added CSVParse.h

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-07-27 18:51:51 +08:00
parent b1be1d6fb8
commit 9c7aecfdb0
2 changed files with 70 additions and 0 deletions

View File

@ -0,0 +1,69 @@
#pragma once
#include<hgl/io/FileInputStream.h>
#include<hgl/io/TextInputStream.h>
#include<hgl/util/csv/CSVFieldSplite.h>
namespace hgl
{
namespace util
{
template<typename T> class CSVParseCallback
{
public:
virtual bool OnLine(util::CSVFieldSplite<T> &csv)=0;
};
template<typename T> class CSVTextParse:public io::TextInputStream::ParseCallback<T>
{
util::CSVFieldSplite<T> splite;
CSVParseCallback<T> *callback;
public:
CSVTextParse(CSVParseCallback<T> *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<typename T> inline bool ParseCSV(io::InputStream *is,CSVParseCallback<T> *pcb)
{
io::TextInputStream tis(is);
CSVTextParse<T> parse(pcb);
tis.SetParseCallback<T>(&parse);
tis.Run();
return nullptr;
}
template<typename T> inline bool ParseCSVFile(const OSString &filename,CSVParseCallback<T> *pcb)
{
io::FileInputStream *fis=new io::FileInputStream;
if(!fis->Open(filename))
{
delete fis;
return false;
}
return ParseCSV<T>(fis,pcb);
}
}//namespace util
}//namespace hgl

View File

@ -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 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/CSVOutput.h
${CMUTIL_ROOT_INCLUDE_PATH}/hgl/util/csv/CSVOutputStream.h ${CMUTIL_ROOT_INCLUDE_PATH}/hgl/util/csv/CSVOutputStream.h
csv/CSVOutputStream.cpp) csv/CSVOutputStream.cpp)