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, )); 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(, ++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,,SEEK_END); u32 dwsize = ftell(pfile); rewind(pfile); char* filebuffer = new char[dwsize]; fread(filebuffer, , dwsize, pfile); std::map<u32, std::string> StringMap; char* pBegin = filebuffer; char* pEnd = strchr(filebuffer, '\n'); u32 uiIndex = ; while (pEnd != NULL) { std::string strbuff; strbuff.insert(, pBegin, pEnd-pBegin); if (!strbuff.empty()) { StringMap[uiIndex] = strbuff; } pBegin = pEnd + ; pEnd = strchr(pEnd + , '\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); ; i < StringVec.size(); ++i) { l_StringMap[i+] = 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=,uiColumn=; out1<<CSVOperator.GetString(,)->c_str()<<,)->c_str()<<'\n'; out1<<CSVOperator.GetString(,)->c_str()<<'\n'; out1<<CSVOperator.GetString(,)->c_str()<<"\n\n"; out1<<CSVOperator.GetString(,)->c_str()<<,)->c_str()<<'\n'; ;uiRow<=;uiRow++) { ;uiColumn<=;uiColumn++) { out1<<setiosflags(ios::left)<<setw()<<CSVOperator.GetString(uiRow,uiColumn)->c_str(); } out1<<'\n'; } out1<<)->c_str()<<)->c_str()<<'\n'; ;uiRow++) { ;uiColumn<=;uiColumn++) { out1<<setiosflags(ios::left)<<setw()<<CSVOperator.GetString(uiRow,uiColumn)->c_str(); } out1<<'\n'; } //OTDR Test Datas ofstream out2("OTDR_Test_Datas.txt"); out2<< CSVOperator.GetString(,)->c_str() << ,)->c_str() ; CSVOperator.GetInt(,,OtdrTestsNum);//get datas num out2 << ,)->c_str(); ;uiRow<OtdrTestsNum+;uiRow++) { out2 << <<)->c_str(); } //OTDR Events ofstream out3("OTDR_Events.txt"); out3<< CSVOperator.GetString(+OtdrTestsNum,)->c_str()<<+OtdrTestsNum,)->c_str(); CSVOperator.GetInt(OtdrTestsNum+,,OtdrEventsNum);//get Events num +OtdrTestsNum+;uiRow<+OtdrTestsNum+OtdrEventsNum+;uiRow++) { out3 << '\n'; ;uiColumn<=;uiColumn++) { std::string* pString = CSVOperator.GetString(uiRow,uiColumn); if (pString) { )!=) out3<<setiosflags(ios::left)<<setw()<<pString->c_str(); else out3<<pString->c_str(); } } } ; }
csv2txt.cpp的更多相关文章
- 使用“Cocos引擎”创建的cpp工程如何在VS中调试Cocos2d-x源码
前段时间Cocos2d-x更新了一个Cocos引擎,这是一个集合源码,IDE,Studio这一家老小的整合包,我们可以使用这个Cocos引擎来创建我们的项目. 在Cocos2d-x被整合到Cocos引 ...
- Json CPP 中文支持与入门示例
在每一个Json Cpp自带*.cpp文件头加上: #include "stdafx.h" 将Json Cpp对自带的头文件的引用修改为单引号方式,例如json_reader.cp ...
- cpp 调用python
在用cpp调用python时, 出现致命错误: no module named site , 原因解释器在搜索路径下没有找到python库.可以在调用Py_Initialize前,调用 Py_Se ...
- nginx+fastcgi+c/cpp
参考:http://github.tiankonguse.com/blog/2015/01/19/cgi-nginx-three/ 跟着做了一遍,然后根据记忆写的,不清楚有没错漏步骤,希望多多评论多多 ...
- APM程序分析-ArduCopter.cpp
该文件是APM的主文件. #define SCHED_TASK(func, rate_hz, max_time_micros) SCHED_TASK_CLASS(Copter, &copter ...
- APM程序分析-AC_WPNav.cpp
APM程序分析 主程序在ArduCopter.cpp的loop()函数. /// advance_wp_target_along_track - move target location along ...
- Dev Cpp 输出中文字符问题
最近 c++ 上机作业,vc++6.0 挂了没法用,只好用 Dev Cpp 先顶替一下,然而在遇到输出中文字符的时候出现了乱码的情况,但这种情况又非常诡异.于是简单了解了一下写成此博客. [写在前面] ...
- 【安卓】aidl.exe E 10744 10584 io_delegate.cpp:102] Error while creating directories: Invalid argument
这几天在使用.aidl文件的时候eclipse的控制台总是爆出如下提示: aidl.exe E 10744 10584 io_delegate.cpp:102] Error while creatin ...
- Identify Memory Leaks in Visual CPP Applications —— VLD内存泄漏检测工具
原文地址:http://www.codeproject.com/Articles/1045847/Identify-Memory-Leaks-in-Visual-CPP-Applications 基于 ...
随机推荐
- [水煮 ASP.NET Web API2 方法论](3-1)集中式路由
问题 怎样集中的定义路由 解决方案 通过调用 HttpRouteCollectionExtension 类中的 MapHttpRoute 扩展方法在 HttpRouteCollection 中定义路由 ...
- 【LOJ】#2541. 「PKUWC2018」猎人杀
题解 一道神仙的题>< 我们毙掉一个人后总的w的和会减少,怎么看怎么像指数算法 然而,我们可以容斥-- 设\(\sum_{i = 1}^{n} w_{i} = Sum\) 我们把问题转化一 ...
- 解决Python爬虫使用requests包控制台输出乱码问题
输出爬取的信息为乱码! 解决办法 爬取下来的编码是ISO-8859-1格式,需要转化为utf-8格式,加一句response.encoding = "utf8"
- nginx中配置文件的讲解
一: 1.配置文件的结构 nginx由配置文件中指定的指令控制的模块组成. 指令分为简单指令和块指令. 一个简单的指令由空格分隔的名称和参数组成,并以分号(;)结尾. 块指令具有与简单指令相同的结构, ...
- 源码之Java集合
No1: ArrayList的扩容策略是,新容量扩大为原来的1.5倍. ArrayList不是线性安全的,因为没有使用synchronized关键字,但是优点是效率提高了.与之相比,Vector是线性 ...
- 远程连接mysql root账号报错:2003-can't connect to MYSQL serve
1.远程连接Linux系统,登录数据库:mysql -uroot -p(密码) 2.修改root账号的设置: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDE ...
- My blog in AI -- 梯度下降算法
人工神经网络是对生物神经网络的模仿,神经网络对一个问题的学习,需要经历数据输入.网络参数的训练.超参数的调节等部分. 这次我们来详细讨论一下神经网络的学习过程. 假设我们要训练一个神经网络去识别一张图 ...
- windows上springboot打war部署tomcat小记
web项目,需要部署到云主机里去,现在windows里试一下. springboot项目,主要流程就只是打成war包后扔到tomcat里去,但是由于是springboot项目,有一些需要注意的地方,这 ...
- Javap -c 字节码解析
栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 icon ...
- eclipse 设置文本模板
1.开打点击Windows选择Prederences选项卡 2.弹出窗口,选择Java选项卡下的Code Style选项卡 3.选择Code Templates选项卡 打开Code选择,选择New J ...