added CSVFieldSplite.h/.cpp
This commit is contained in:
parent
9ed3f1b6c3
commit
8691bc0fe7
26
inc/hgl/util/csv/CSVFieldSplite.h
Normal file
26
inc/hgl/util/csv/CSVFieldSplite.h
Normal 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
|
@ -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
|
||||
cmd/CmdParse.cpp)
|
||||
|
||||
@ -90,6 +95,7 @@ add_cm_library(CMUtil "CM" ${CMD_SOURCE}
|
||||
|
||||
${XML_PARSE_SOURCE}
|
||||
${JSON_TOOL_SOURCE}
|
||||
${CSV_SOURCE}
|
||||
|
||||
${HASH_HEADER_FILES}
|
||||
${HASH_SOURCE_FILES}
|
||||
|
61
src/csv/CSVFieldSplite.cpp
Normal file
61
src/csv/CSVFieldSplite.cpp
Normal 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
|
Loading…
x
Reference in New Issue
Block a user