首页 > 代码库 > csv2txt.cpp
csv2txt.cpp
#include <iostream>#include <fstream.h>#include <windows.h>#include <iomanip.h>#pragma once#include <process.h>#include <map>#include <vector>#include <queue>#include <set>#include <string>#include <list>typedef char i8;typedef unsigned char u8;typedef short i16;typedef unsigned short u16;typedef long int i32;typedef unsigned long u32;class CCSVOperator{public: CCSVOperator(){}; ~CCSVOperator(){}; CCSVOperator(const char* path); bool LoadCSV(const char* path); bool SaveCSV(const char* path = NULL); bool GetInt(u32 uiLine, u32 uiRow, int& iValue); std::string* GetString(u32 uiLine, u32 uiRow); std::map<u32, std::map<u32, std::string> >& GetCSVMap(){return m_StringKeyMap;}protected: std::string m_CSVName; std::map<u32, std::map<u32, std::string> > m_StringKeyMap;};namespace StringParser{//从分隔符中获得数据inline int GetParamFromString(std::string Str, std::vector<i32>& IntVec, char Delim = ‘,‘){ char* p = strtok((char*)Str.c_str(), &Delim); while (p) { IntVec.push_back(atoi(p)); p = strtok(NULL, &Delim); } return IntVec.size();}inline int GetParamFromString(std::string Str, std::vector<float>& FloatVec, char Delim = ‘,‘){ char* p = strtok((char*)Str.c_str(), &Delim); while (p) { FloatVec.push_back(atof(p)); p = strtok(NULL, &Delim); } return FloatVec.size();}inline int GetParamFromString(std::string Str, std::vector<u32>& uiIntVec, char Delim = ‘,‘){ char* p = strtok((char*)Str.c_str(), &Delim); while (p) { uiIntVec.push_back(strtoul(p, NULL, 10)); p = strtok(NULL, &Delim); } return uiIntVec.size();}inline int GetParamFromString(std::string Str, std::vector<std::string>& StringVec, char Delim = ‘,‘){ char* p = strtok((char*)Str.c_str(), &Delim); while (p) { std::string buffer = p; StringVec.push_back(buffer); p = strtok(NULL, &Delim); } return StringVec.size();}//以左右符号得到括号中的数据ex:[3.1415;0.125][1000;9999]template<typename T>int GetParamFromArea(std::string Str, std::vector<std::vector<T> >& IntVec, char left = ‘[‘, char right = ‘]‘, char Delim = ‘;‘){ char* pTarget = (char*)Str.c_str(); for (;;) { char* pLeft = strchr(pTarget, left); char* pRight = strchr(pTarget, right); if (pLeft && pRight) { std::string strbuff; strbuff.insert(0, ++pLeft, pRight-pLeft); std::vector<T> Intbuff; if (GetParamFromString(strbuff, Intbuff, Delim)) { IntVec.push_back(Intbuff); } pTarget = ++pRight; } else { break; } } return IntVec.size();}};CCSVOperator::CCSVOperator(const char* path){ LoadCSV(path);}bool CCSVOperator::LoadCSV(const char* path){ FILE* pfile = fopen(path, "r"); if (pfile) { fseek(pfile,0,SEEK_END); u32 dwsize = ftell(pfile); rewind(pfile); char* filebuffer = new char[dwsize]; fread(filebuffer, 1, dwsize, pfile); std::map<u32, std::string> StringMap; char* pBegin = filebuffer; char* pEnd = strchr(filebuffer, ‘\n‘); u32 uiIndex = 1; while (pEnd != NULL) { std::string strbuff; strbuff.insert(0, pBegin, pEnd-pBegin); if (!strbuff.empty()) { StringMap[uiIndex] = strbuff; } pBegin = pEnd + 1; pEnd = strchr(pEnd + 1, ‘\n‘); ++uiIndex; } delete[] filebuffer; std::map<u32, std::string>::iterator iter = StringMap.begin(); for (; iter != StringMap.end(); ++iter) { std::vector<std::string> StringVec; std::map<u32, std::string> l_StringMap; StringParser::GetParamFromString(iter->second, StringVec); for (int i = 0; i < StringVec.size(); ++i) { l_StringMap[i+1] = StringVec.at(i); } m_StringKeyMap[iter->first] = l_StringMap; } fclose(pfile); m_CSVName = path; return true; } return false;}bool CCSVOperator::GetInt(u32 uiLine, u32 uiRow, int& iValue){ std::string* pKey = GetString(uiLine, uiRow); if (pKey) { iValue = atoi(pKey->c_str()); return true; } else { return false; }}std::string* CCSVOperator::GetString(u32 uiLine, u32 uiRow){ std::map<u32, std::map<u32, std::string> >::iterator iterLine = m_StringKeyMap.find(uiLine); if (iterLine != m_StringKeyMap.end()) { std::map<u32, std::string>& rStringMap = iterLine->second; std::map<u32, std::string>::iterator iterRow = rStringMap.find(uiRow); if (iterRow != rStringMap.end()) { return &iterRow->second; } else { return NULL; } } else { return NULL; }}int main(int argc, char* argv[]){ int OtdrTestsNum;//total num of OTDR test datas int OtdrEventsNum;//total num of OTDR test datas CCSVOperator CSVOperator; if(!CSVOperator.LoadCSV("file.csv")) { printf("没有找到csv文档,请将csv文档放在本目录下!\n"); system("pause"); return false; } CreateDirectory("OTDR_Test_Out",NULL); if( !SetCurrentDirectory("OTDR_Test_Out")) { printf("设置输出目录失败!\n"); } //OTDR Information ofstream out1("OTDR_Information.txt"); u32 uiRow=1,uiColumn=1; out1<<CSVOperator.GetString(1,1)->c_str()<<": "<<CSVOperator.GetString(1,2)->c_str()<<‘\n‘; out1<<CSVOperator.GetString(2,1)->c_str()<<‘\n‘; out1<<CSVOperator.GetString(3,1)->c_str()<<"\n\n"; out1<<CSVOperator.GetString(4,1)->c_str()<<": "<<CSVOperator.GetString(4,2)->c_str()<<‘\n‘; for(uiRow=5;uiRow<=6;uiRow++) { for(uiColumn=1;uiColumn<=7;uiColumn++) { out1<<setiosflags(ios::left)<<setw(22)<<CSVOperator.GetString(uiRow,uiColumn)->c_str(); } out1<<‘\n‘; } out1<<‘\n‘<<CSVOperator.GetString(uiRow++,1)->c_str()<<": "<<CSVOperator.GetString(uiRow,2)->c_str()<<‘\n‘; for(;uiRow<=9;uiRow++) { for(uiColumn=1;uiColumn<=3;uiColumn++) { out1<<setiosflags(ios::left)<<setw(22)<<CSVOperator.GetString(uiRow,uiColumn)->c_str(); } out1<<‘\n‘; } //OTDR Test Datas ofstream out2("OTDR_Test_Datas.txt"); out2<< CSVOperator.GetString(10,1)->c_str() << ‘:‘ << ‘ ‘ << CSVOperator.GetString(10,2)->c_str() ; CSVOperator.GetInt(10,2,OtdrTestsNum);//get datas num out2 << ‘\n‘ << CSVOperator.GetString(11,1)->c_str(); for(uiRow=12;uiRow<OtdrTestsNum+12;uiRow++) { out2 << ‘\n‘ << uiRow-11 <<‘ ‘ << CSVOperator.GetString(uiRow,1)->c_str(); } //OTDR Events ofstream out3("OTDR_Events.txt"); out3<< CSVOperator.GetString(12+OtdrTestsNum,1)->c_str()<<‘:‘<<‘ ‘<< CSVOperator.GetString(12+OtdrTestsNum,2)->c_str(); CSVOperator.GetInt(OtdrTestsNum+12,2,OtdrEventsNum);//get Events num for(uiRow=12+OtdrTestsNum+1;uiRow<12+OtdrTestsNum+OtdrEventsNum+1;uiRow++) { out3 << ‘\n‘; for(uiColumn=1;uiColumn<=3;uiColumn++) { std::string* pString = CSVOperator.GetString(uiRow,uiColumn); if (pString) { if((uiColumn%3)!=0) out3<<setiosflags(ios::left)<<setw(16)<<pString->c_str(); else out3<<pString->c_str(); } } } return 0;}
csv2txt.cpp
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。