博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简易csv解析
阅读量:4509 次
发布时间:2019-06-08

本文共 2569 字,大约阅读时间需要 8 分钟。

游戏开发中少不了配置数据,csv格式既方便导出又方便使用,下面是简单csv解析(字段数据中不能含有分隔符),以后会继续完善,嘿嘿。

////  CCSVParse.hpp//  CPPAlgorithm////  Created by xujw on 16/2/26.//  Copyright © 2016年 xujw. All rights reserved.//#ifndef CCSVParse_h#define CCSVParse_h#include 
#include
#include
#include
class CCSVParse{public: CCSVParse(); ~CCSVParse(); //解析出行列数据 std::vector< std::vector
> parseCsvFile(const std::string &fileName,const std::string &separator = ","); //打印出解析的数据 测试用 void printParseData() const; inline size_t getRowNum() const {
return _gridData.size();}; /* 分隔字符串 str:要分隔的字符串/文件 seperator:分隔符 */ std::vector
splitString(const std::string &str,const std::string &sparator); std::string loadCsvFile(const std::string &fileName);private: //原始数据 std::vector< std::vector
> _gridData;};#endif /* CCSVParse_h *///// CCSVParse.cpp// CPPAlgorithm//// Created by xujw on 16/2/26.// Copyright © 2016年 xujw. All rights reserved.//#include "CCSVParse.h"CCSVParse::CCSVParse(){}CCSVParse::~CCSVParse(){}std::vector
CCSVParse::splitString(const std::string &str, const std::string &separator){ std::vector
resVec; if ("" == str) { return resVec; } //方便截取最后一段数据 std::string dataStr = str + separator; size_t pos = dataStr.find(separator); size_t size = dataStr.size(); while (pos != std::string::npos) { std::string x = dataStr.substr(0,pos); resVec.push_back(x); dataStr = dataStr.substr(pos+1,size); pos = dataStr.find(separator); } return resVec;}std::string CCSVParse::loadCsvFile(const std::string &fileName){ FILE *pFile = fopen(fileName.c_str(), "rb"); if (0 == pFile) { return ""; } fseek(pFile, 0, SEEK_END); //指针移动到文件结尾 long len = ftell(pFile); //获取文件大小 char *pBuffer = new char[len+1]; fseek(pFile, 0, SEEK_SET); //指针移动到文件开头 fread(pBuffer, 1, len, pFile); //读取文件 fclose(pFile); //等价于std::string s;s.assign(pBuffer,len); pBuffer[len] = 0; std::string strRead(pBuffer,len); delete [] pBuffer; return strRead;}std::vector
> CCSVParse::parseCsvFile(const std::string &fileName,const std::string &separator){ clock_t before = clock(); _gridData.clear(); std::string allDataStr = loadCsvFile(fileName); //分出行和字段 std::vector
ret = splitString(allDataStr, "\n"); for (size_t i=0; i
rowData = splitString(ret.at(i), separator); _gridData.push_back(rowData); } float used = (float)(clock()-before)/CLOCKS_PER_SEC; std::cout<<"解析此csv花费时间:"<
<<"S"<
rowData = _gridData.at(row); for (int col = 0; col

转载于:https://www.cnblogs.com/skyxu123/p/9543807.html

你可能感兴趣的文章
密码学摘要算法之SHA2
查看>>
dealloc和weak底层实现
查看>>
【网络】Windows 下 socket 编程范例
查看>>
【IT】CRC校验码是怎么回事呢?
查看>>
hashmap C++实现
查看>>
C++深拷贝和浅拷贝细节理解
查看>>
云风协程库coroutine源码分析
查看>>
【漫谈数据仓库】 如何优雅地设计数据分层 ODS DW DM层级
查看>>
POJ - 2559 && POJ - 3494 (单调栈)
查看>>
POJ - 2796 Feel Good (单调栈)
查看>>
2019牛客暑期多校训练营(第一场合集)
查看>>
2019牛客暑期多校训练营(第二场合集)
查看>>
2019牛客暑期多校训练营(第四场合集)
查看>>
树的直径
查看>>
随机面试题
查看>>
git
查看>>
creat-react-app http升级为https出现的问题
查看>>
ES6 symbol
查看>>
vue 坑
查看>>
js手写call函数
查看>>