diff --git a/inc/hgl/util/csv/CSVParse.h b/inc/hgl/util/csv/CSVParse.h new file mode 100644 index 0000000..14db389 --- /dev/null +++ b/inc/hgl/util/csv/CSVParse.h @@ -0,0 +1,69 @@ +#pragma once +#include +#include +#include + +namespace hgl +{ + namespace util + { + template class CSVParseCallback + { + public: + + virtual bool OnLine(util::CSVFieldSplite &csv)=0; + }; + + template class CSVTextParse:public io::TextInputStream::ParseCallback + { + util::CSVFieldSplite splite; + + CSVParseCallback *callback; + + public: + + CSVTextParse(CSVParseCallback *pcb) + { + callback=pcb; + } + + bool OnLine(const T *text,const int length) override + { + if(!text||!*text||length<=0) + return(false); + + splite.Start(text,length); + + callback->OnLine(splite); + + return(true); + } + };//class CSVTextParse + + template inline bool ParseCSV(io::InputStream *is,CSVParseCallback *pcb) + { + io::TextInputStream tis(is); + + CSVTextParse parse(pcb); + + tis.SetParseCallback(&parse); + + tis.Run(); + + return nullptr; + } + + template inline bool ParseCSVFile(const OSString &filename,CSVParseCallback *pcb) + { + io::FileInputStream *fis=new io::FileInputStream; + + if(!fis->Open(filename)) + { + delete fis; + return false; + } + + return ParseCSV(fis,pcb); + } + }//namespace util +}//namespace hgl diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8b1e8be..faaabcb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -81,6 +81,7 @@ SOURCE_GROUP("Crypt" FILES ${CRYPT_HEADER_FILES} ${CRYPT_SOURCE_FILES}) #################################################################################################### SET(CSV_SOURCE ${CMUTIL_ROOT_INCLUDE_PATH}/hgl/util/csv/CSVFieldSplite.h + ${CMUTIL_ROOT_INCLUDE_PATH}/hgl/util/csv/CSVParse.h ${CMUTIL_ROOT_INCLUDE_PATH}/hgl/util/csv/CSVOutput.h ${CMUTIL_ROOT_INCLUDE_PATH}/hgl/util/csv/CSVOutputStream.h csv/CSVOutputStream.cpp)