#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(T *text,const int length) override { if(!text||!*text||length<=0) return(true); splite.Start(text,length); return callback->OnLine(splite); } };//class CSVTextParse template inline bool ParseCSV(io::InputStream *is,CSVParseCallback *pcb) { io::TextInputStream tis(is); CSVTextParse parse(pcb); tis.SetParseCallback(&parse); return tis.Run()>0; } template inline bool ParseCSVFile(const OSString &filename,CSVParseCallback *pcb) { io::OpenFileInputStream fis(filename); if(!fis) return false; return ParseCSV(fis,pcb); } }//namespace util }//namespace hgl