added CSVFieldSplite.h/.cpp

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-07-12 18:34:57 +08:00
parent 9ed3f1b6c3
commit 8691bc0fe7
3 changed files with 93 additions and 0 deletions

View File

@ -0,0 +1,26 @@
#pragma once
namespace hgl
{
namespace util
{
/**
* CSV字段拆分工具<br>
* tab分隔以及使用引号包裹的字符串 */
class CSVFieldSplite
{
const char *str;
int str_length;
const char *sp;
const char *end;
public:
CSVFieldSplite(const char *s,const int length);
~CSVFieldSplite()=default;
const char *next_field(int *len);
};//class CSVFieldSplite
}//namespace util
}//namespace hgl

View File

@ -63,6 +63,11 @@ ENDIF(CM_UTIL_SUPPORT_HASH)
#################################################################################################### ####################################################################################################
SET(CSV_SOURCE ${CMUTIL_ROOT_INCLUDE_PATH}/hgl/util/csv/CSVFieldSplite.h
csv/CSVFieldSplite.cpp)
SOURCE_GROUP("CSV" FILES ${CSV_SOURCE})
SET(CMD_SOURCE ${CMUTIL_ROOT_INCLUDE_PATH}/hgl/util/cmd/CmdParse.h SET(CMD_SOURCE ${CMUTIL_ROOT_INCLUDE_PATH}/hgl/util/cmd/CmdParse.h
cmd/CmdParse.cpp) cmd/CmdParse.cpp)
@ -90,6 +95,7 @@ add_cm_library(CMUtil "CM" ${CMD_SOURCE}
${XML_PARSE_SOURCE} ${XML_PARSE_SOURCE}
${JSON_TOOL_SOURCE} ${JSON_TOOL_SOURCE}
${CSV_SOURCE}
${HASH_HEADER_FILES} ${HASH_HEADER_FILES}
${HASH_SOURCE_FILES} ${HASH_SOURCE_FILES}

View File

@ -0,0 +1,61 @@
#include<hgl/util/csv/CSVFieldSplite.h>
#include<hgl/type/StrChar.h>
namespace hgl
{
namespace util
{
CSVFieldSplite::CSVFieldSplite(const char *s,const int length)
{
str=s;
str_length=length;
sp=str;
end=str+str_length;
}
const char *CSVFieldSplite::next_field(int *len)
{
if(!len)return(nullptr);
if(sp>=end)return(nullptr);
if(*sp==','||*sp=='\t')
{
*len=0;
++sp;
return sp;
}
const char *result;
if(*sp=='"')
{
++sp;
const char *ep=hgl::strchr(sp,'"');
if(!ep)
return nullptr;
result=sp;
*len=ep-sp;
sp=ep+2;
return result;
}
else
{
result=sp;
const char *ep=sp+1;
while(*ep!=','&&*ep!='\t'&&ep<end)
++ep;
*len=ep-sp;
sp=ep+1;
return result;
}
}
}//namespace util
}//namespace hgl