From 1f8d32087e9b1658a0c729fdda59363fef9b995b Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Mon, 31 Jul 2023 17:13:44 +0800 Subject: [PATCH] removed field_count in construct function, and then added WriteHeader in CSVOutput/CSVOutputStream --- inc/hgl/util/csv/CSVOutput.h | 25 ++++++++++++++----------- inc/hgl/util/csv/CSVOutputStream.h | 12 ++++++++---- src/csv/CSVOutputStream.cpp | 8 ++++---- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/inc/hgl/util/csv/CSVOutput.h b/inc/hgl/util/csv/CSVOutput.h index 353907f..754a90d 100644 --- a/inc/hgl/util/csv/CSVOutput.h +++ b/inc/hgl/util/csv/CSVOutput.h @@ -13,7 +13,7 @@ namespace hgl { io::TextOutputStream *tos; - uint FieldCount; + int FieldCount; T FieldsTerminatedChar; T EnclosedChar; @@ -22,15 +22,15 @@ namespace hgl protected: - uint write_count; + int left_count; void NextField() { - --write_count; + --left_count; - if(!write_count) + if(!left_count) { - write_count=FieldCount; + left_count=FieldCount; tos->WriteLineEnd(); } else @@ -40,13 +40,12 @@ namespace hgl public: CSVOutput( io::TextOutputStream *os, //文本输出流 - const uint field_count, //字段数量 const T fields_terminated_char=T(','), //字段分隔符 const T enclosed_char=T('"')) //字符串包裹字符 { tos=os; - FieldCount =field_count; + FieldCount =0; FieldsTerminatedChar=fields_terminated_char; @@ -55,7 +54,7 @@ namespace hgl NullStringField[0] =enclosed_char; NullStringField[1] =enclosed_char; - write_count =FieldCount; + left_count =0; } ~CSVOutput()=default; @@ -98,6 +97,10 @@ namespace hgl WriteString(str); } + void WriteHeader(const StringList &sl){left_count=FieldCount=sl.GetCount(); WriteStringList(sl);} + void WriteHeader(const std::initializer_list> &sl){left_count=FieldCount=(int)sl.size(); WriteStringList(sl);} + void WriteHeader(const std::initializer_list &sl){left_count=FieldCount=(int)sl.size(); WriteStringList(sl);} + template void WriteInteger(const I &value) { @@ -119,8 +122,8 @@ namespace hgl using UTF16CSVOutput=CSVOutput; using UTF32CSVOutput=CSVOutput; - inline CSVOutput * CreateUTF8CSVOutput (io::TextOutputStream * tos,const uint fc,const u8char ftc=U8_TEXT (','),const u8char ec=U8_TEXT ('"')){return(new UTF8CSVOutput (tos,fc,ftc,ec));} - inline CSVOutput * CreateUTF16CSVOutput (io::TextOutputStream * tos,const uint fc,const u16char ftc=U16_TEXT(','),const u16char ec=U16_TEXT('"')){return(new UTF16CSVOutput(tos,fc,ftc,ec));} - inline CSVOutput * CreateUTF32CSVOutput (io::TextOutputStream * tos,const uint fc,const u32char ftc=U32_TEXT(','),const u32char ec=U32_TEXT('"')){return(new UTF16CSVOutput(tos,fc,ftc,ec));} + inline CSVOutput * CreateUTF8CSVOutput (io::TextOutputStream * tos,const u8char ftc=U8_TEXT (','),const u8char ec=U8_TEXT ('"')){return(new UTF8CSVOutput (tos,ftc,ec));} + inline CSVOutput * CreateUTF16CSVOutput (io::TextOutputStream * tos,const u16char ftc=U16_TEXT(','),const u16char ec=U16_TEXT('"')){return(new UTF16CSVOutput(tos,ftc,ec));} + inline CSVOutput * CreateUTF32CSVOutput (io::TextOutputStream * tos,const u32char ftc=U32_TEXT(','),const u32char ec=U32_TEXT('"')){return(new UTF16CSVOutput(tos,ftc,ec));} }//namespace util }//namespace hgl diff --git a/inc/hgl/util/csv/CSVOutputStream.h b/inc/hgl/util/csv/CSVOutputStream.h index a208117..95726b2 100644 --- a/inc/hgl/util/csv/CSVOutputStream.h +++ b/inc/hgl/util/csv/CSVOutputStream.h @@ -43,6 +43,10 @@ namespace hgl void WriteStringList(const std::initializer_list> &sl){return csv->WriteStringList(sl);} void WriteStringList(const std::initializer_list &sl){return csv->WriteStringList(sl);} + void WriteHeader(const StringList &sl){csv->WriteHeader(sl);} + void WriteHeader(const std::initializer_list> &sl){csv->WriteHeader(sl);} + void WriteHeader(const std::initializer_list &sl){csv->WriteHeader(sl);} + template void WriteInteger(const I &value){csv->WriteInteger(value);} @@ -50,14 +54,14 @@ namespace hgl void WriteFloat(const F &value,const uint frac){csv->WriteFloat(value,frac);} };//template class CSVOutputStream - template inline CSVOutputStream *CreateCSVOutputToStream(io::OutputStream *os,io::TextOutputStream *tos,const uint field_count,const T fields_terminated_char=T(','),const T enclosed_char=T('"')) + template inline CSVOutputStream *CreateCSVOutputToStream(io::OutputStream *os,io::TextOutputStream *tos,const T fields_terminated_char=T(','),const T enclosed_char=T('"')) { - CSVOutput *csv=new CSVOutput(tos,field_count,fields_terminated_char,enclosed_char); + CSVOutput *csv=new CSVOutput(tos,fields_terminated_char,enclosed_char); return(new CSVOutputStream(os,tos,csv)); } - CSVOutputStream *CreateCSVOutputToUTF8File(const OSString &filename,const uint field_count,const u8char fields_terminated_char=U8_TEXT(','),const u8char enclosed_char=U8_TEXT('"')); - CSVOutputStream *CreateCSVOutputToUTF16LEFile(const OSString &filename,const uint field_count,const u16char fields_terminated_char=U16_TEXT(','),const u16char enclosed_char=U16_TEXT('"')); + CSVOutputStream *CreateCSVOutputToUTF8File(const OSString &filename,const u8char fields_terminated_char=U8_TEXT(','),const u8char enclosed_char=U8_TEXT('"')); + CSVOutputStream *CreateCSVOutputToUTF16LEFile(const OSString &filename,const u16char fields_terminated_char=U16_TEXT(','),const u16char enclosed_char=U16_TEXT('"')); }//namespace util }//namespace hgl diff --git a/src/csv/CSVOutputStream.cpp b/src/csv/CSVOutputStream.cpp index faa96f8..79ab02e 100644 --- a/src/csv/CSVOutputStream.cpp +++ b/src/csv/CSVOutputStream.cpp @@ -8,22 +8,22 @@ namespace hgl { namespace util { - CSVOutputStream *CreateCSVOutputToUTF8File(const OSString &filename,const uint field_count,const u8char fields_terminated_char,const u8char enclosed_char) + CSVOutputStream *CreateCSVOutputToUTF8File(const OSString &filename,const u8char fields_terminated_char,const u8char enclosed_char) { io::FileOutputStream *fos=io::CreateFileOutputStream(filename); if(!fos)return(nullptr); - return CreateCSVOutputToStream(fos,new io::UTF8TextOutputStream(fos),field_count,fields_terminated_char,enclosed_char); + return CreateCSVOutputToStream(fos,new io::UTF8TextOutputStream(fos),fields_terminated_char,enclosed_char); } - CSVOutputStream *CreateCSVOutputToUTF16LEFile(const OSString &filename,const uint field_count,const u16char fields_terminated_char,const u16char enclosed_char) + CSVOutputStream *CreateCSVOutputToUTF16LEFile(const OSString &filename,const u16char fields_terminated_char,const u16char enclosed_char) { io::FileOutputStream *fos=io::CreateFileOutputStream(filename); if(!fos)return(nullptr); - return CreateCSVOutputToStream(fos,new io::UTF16LETextOutputStream(fos),field_count,fields_terminated_char,enclosed_char); + return CreateCSVOutputToStream(fos,new io::UTF16LETextOutputStream(fos),fields_terminated_char,enclosed_char); } }//namespace util }//namespace hgl