diff --git a/inc/hgl/util/csv/CSVFieldSplite.h b/inc/hgl/util/csv/CSVFieldSplite.h
new file mode 100644
index 0000000..ee5a06f
--- /dev/null
+++ b/inc/hgl/util/csv/CSVFieldSplite.h
@@ -0,0 +1,26 @@
+#pragma once
+
+namespace hgl
+{
+ namespace util
+ {
+ /**
+ * CSV字段拆分工具
+ * 支持逗号分隔与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
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3e65073..36aec87 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -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}
diff --git a/src/csv/CSVFieldSplite.cpp b/src/csv/CSVFieldSplite.cpp
new file mode 100644
index 0000000..a6e82de
--- /dev/null
+++ b/src/csv/CSVFieldSplite.cpp
@@ -0,0 +1,61 @@
+#include
+#include
+
+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