- 浏览: 280342 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhang_shuai870717:
求指教。没懂
Graphics 的translate(int x, int y) 函数 -
刘亮love小雪:
楼主我还是没有懂啊
Graphics 的translate(int x, int y) 函数 -
wenhaoliu:
大侠!我在从ios平台移植到android平台遇到很多问题!编 ...
android平台移植总结 -
lansehuan:
dwpcny 写道楼主 你给得链接是你自己才能看得啊 。我也遇 ...
cocos2d-x,windows环境配置总结 -
leishengwei:
u_xtian 写道jifengyu 写道楼主你好,我想问一下 ...
(转)Android开发:在EditText中关闭软键盘
针对unix跟windows平台,换行符不同,造成的问题,对csv解析进行了一些修改。。。
参考:http://www.cnblogs.com/JCSU/articles/1190685.html
http://www.cnblogs.com/huoguofeng/archive/2010/11/24/1887087.html
/** * 解析完的数据放到data这个二维数组中,通过getData(int rows,int cols) * 获取数据 **/ #ifndef _CSVPARSE_ #define _CSVPARSE_ #include "cocos2d.h" #include <stdio.h> #include <iostream> #include <fstream> class CSVParse { public: CSVParse(istream& fin = cin, string sep = ","): fieldsep(sep), cols(0) {} ~CSVParse(); private: string fieldsep; // separator characters vector<vector<string> > data; int cols; private: void split(vector<string>& field,string line); int advplain(const string& line, string& fld, int); int advquoted(const string& line, string& fld, int); public: //打开文件 bool openFile(const char* fileName); bool openFile2(const char* fileName); //根据行列获取数据 const char* getData(int rows,int cols); //该列是否有此数据 int findColsData(int cols,const char* value); //得到最大的列数 inline int getCols(){return cols;} //得到总共的行数 inline int getRows(){return data.size();} }; #endif #endif
#include "CSVParse.h" using namespace cocos2d; CSVParse::~CSVParse() { for (int i=0; i<data.size(); i++) { data[i].clear(); } data.clear(); } // split: split line into fields void CSVParse::split(vector<string>& field,string line) { string fld; int i, j; if (line.length() == 0) return ; i = 0; do { if (i < line.length() && line[i] == '"') j = advquoted(line, fld, ++i); // skip quote else j = advplain(line, fld, i); field.push_back(fld); i = j + 1; } while (j < line.length()); } // advquoted: quoted field; return index of next separator int CSVParse::advquoted(const string& s, string& fld, int i) { int j; fld = ""; for (j = i; j < s.length(); j++) { if (s[j] == '"' && s[++j] != '"') { int k = s.find_first_of(fieldsep, j); if (k > s.length()) // no separator found k = s.length(); for (k -= j; k-- > 0; ) fld += s[j++]; break; } fld += s[j]; } return j; } // advplain: unquoted field; return index of next separator int CSVParse::advplain(const string& s, string& fld, int i) { int j; j = s.find_first_of(fieldsep, i); // look for separator if (j > s.length()) // none found j = s.length(); fld = string(s, i, j-i); return j; } // getfield: return n-th field const char* CSVParse::getData(int rows,int cols) { if (rows<0||rows>=data.size()||cols<0||cols>=data[rows].size()) { return ""; } return data[rows][cols].c_str(); } int CSVParse::findColsData(int cols,const char* value) { for (int i=0; i<data.size(); i++) { if (strcmp(getData(i, cols), value)==0 ) { return i; } } return -1; } //用于兼容windows下的换行符\r\n //原因是在windows下换行符为\r\n,而在unix下则为\n //进行封装,否则读取的每行读取的最后一个数据默认会有个额外的\r bool getline(std::ifstream &is,std::string &str){ bool b = std::getline(is,str); std::string::size_type p = str.find_last_of('\r'); if(p != std::string::npos) str.erase(p); return b; } //读取方式: 逐行读取, 将行读入字符串, 行之间用回车换行区分 //If you want to avoid reading into character arrays, //you can use the C++ string getline() function to read lines into strings bool CSVParse::openFile(const char* fileName) { string pathKey = CCFileUtils::fullPathFromRelativePath(fileName); ifstream fin(pathKey.c_str()); string s; while(::getline(fin,s)) { CCLOG("%s",s.c_str()); vector<string> field; split(field,s); data.push_back(field); cols=max(cols, (int)field.size()); } for (int i=0; i<data.size(); i++) { for (int k=0; k<data[i].size(); k++) { CCLOG("%s",getData(i, k)); } } return true; } //该方法可用于anroid跟ios及windows平台 bool CSVParse::openFile2(const char* fileName) { const char* xmlConfFullPath = CCFileUtils::fullPathFromRelativePath(fileName); CCFileData csvdata(xmlConfFullPath, "rt"); unsigned long size = csvdata.getSize(); char *pBuffer = (char*) csvdata.getBuffer(); string stringData(pBuffer); stringstream strm; strm.write(pBuffer, size); string s; while(::getline(fin,s)) { CCLOG("%s",s.c_str()); vector<string> field; split(field,s); data.push_back(field); cols=max(cols, (int)field.size()); } for (int i=0; i<data.size(); i++) { for (int k=0; k<data[i].size(); k++) { CCLOG("%s",getData(i, k)); } } return true; }
参考:http://www.cnblogs.com/JCSU/articles/1190685.html
http://www.cnblogs.com/huoguofeng/archive/2010/11/24/1887087.html
发表评论
-
C++正则表达式匹配、分割字符串
2017-11-14 16:32 2155#include "stdafx.h" # ... -
C语言字节对齐示例
2014-09-23 16:44 776#include "stdafx.h" ... -
(转)C语言字节对齐
2014-09-23 16:16 719文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但 ... -
C++ stl中remove的实现
2013-09-24 23:14 992原文:http://www.cplusplus.com/ref ... -
(转)c++ explicit构造函数
2013-09-11 18:51 703按照默认规定,只有一 ... -
(转)string替换所有指定字符串(C++)
2013-07-27 17:01 1897C++的string提供了replace方法来实现字符串的替换 ... -
C++哲学
2013-01-10 20:34 856即:只为用到的东西付出代价。 -
jni文件传递方法参数
2012-11-26 17:43 5663使用jni从java传递多个参数到c++时,如果是多个参数,当 ... -
(转)C++ string类的一些函数方法
2012-10-24 14:41 900string类的构造函数: string(const char ... -
CCTMXTiledMap使用的几个事项
2012-08-02 11:12 7397项目中的地图层采用coco ... -
android平台移植总结
2012-07-30 13:11 2759最近完成了一款游戏的android平台移植,从ios平台移植到 ... -
(转)子类重新父类方法的限制
2012-07-23 15:17 939若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要 ... -
(装)NDK Build 参数
2012-07-17 16:20 2860'ndk-build' Overview ndk-build ... -
(转)在VS2005下使用libjson注意事项
2012-07-17 15:31 1727最近项目中要使用libjson,无奈boost下的1.34版的 ... -
c++ 字符串的一些概念
2012-06-13 00:16 1224今天看到《c++ primer》上 ... -
(转)cocos2d-x解析json(使用libjson库)
2012-06-06 11:26 2517cocos2d-x很好,扩展性很好,但是其第三方库还不是很成熟 ... -
c++ vector方法push_back的新理解
2012-05-25 11:57 0写了上篇文章 对c++方法返回对象的理解(对c++方法返回对象 ... -
对c++方法返回对象的理解
2012-05-25 11:51 1225今天更深刻的认识到了通过方法返回一个对象或者数组是不可以的,因 ... -
C/C++ 指针删除的几个细节
2012-05-23 15:44 8877在C/C++中,当指针需要删除时,对于new的指针,调用del ... -
(转)C语言深入浅出可变参数函数的使用技巧
2012-05-23 15:04 1016深入浅出可变参数函数的使用技巧本文主要介绍可变参数的函数使用, ...
相关推荐
使用c++开发的csv文件解析类。 namespace cpp { namespace str { /** 高性能的 csv 解析 */ class csv_parser { public: typedef std::pair, size_t > string_t; typedef std::vector<string_t > fields_t; ...
总的来说,C++解析CSV文件涉及文件I/O、字符串处理、容器操作等多个核心概念。选择合适的解析方法取决于具体需求,包括性能、易用性、可维护性和灵活性。理解这些基本概念并结合C++强大的编程工具,能帮助开发者有效...
c++读取csv数据并存储到数组中。csv数据可以为一行多列也可以为多行一列。
本文档将详细讲解如何在Visual Studio 2013环境下使用C++语言读取CSV文件,并通过动态分配数组来存储读取到的数据。 首先,我们需要包含必要的头文件,以便使用文件流操作。在C++中,`<fstream>`头文件提供了处理...
在描述中提到的"CSVparser类"可能是项目中自定义的一个类,用于读取和解析CSV文件。通常,这个类会逐行读取文件,然后根据逗号分隔符分割每一行,将数据存储在某种结构(如QStringList或std::vector)中。 接下来,...
本篇文章将详细介绍如何利用C++标准模板库(STL)中的`vector`容器来读取和写入CSV文件。 ### CSV文件的基本概念 CSV文件是由逗号分隔的一系列数据,每一行代表一个记录,每一列代表一个字段。这样的结构使得CSV...
CSV文件是一种常见的数据存储格式,通常用于数据交换,因为它的结构简单且易于解析。以下将详细介绍如何在C++中进行Linux平台上的CSV文件读写。 一、CSV文件读取 1. **标准库iostream** 使用`ifstream`类可以...
在本教程中,我们将探讨如何使用C++和标准库中的`std::ifstream`、`std::getline`以及`std::stringstream`来高效地读取CSV文件,并将数据存储到`std::vector`容器中。 首先,我们需要包含必要的头文件: ```cpp #...
本篇文章将深入探讨如何使用纯C++来读取CSV文件,不依赖任何第三方库,同时会提供一个简单的CSVReader类设计及其使用示例。 首先,理解CSV文件的结构至关重要。CSV文件由一行行的数据组成,每行数据由逗号分隔,每...
本文将详细讲解如何在C++环境下,特别是在Visual C++ 2005(VC2005)中进行CSV文件的读写操作。 CSV文件的核心特点是用逗号分隔各个字段,每一行代表一条记录,每条记录由一个或多个字段组成。在C++中,我们可以...
在C++编程中,对文件中的数据进行排序并输出到CSV文件是一项常见的任务,尤其在数据分析、报表生成或数据处理的场景下。本项目提供的功能实现了这一需求,具有良好的代码可读性和实用性。下面我们将详细探讨相关的...
本篇文章将深入探讨如何使用C++来读取和写入CSV文件,以实现数据的导入和导出功能。 首先,理解CSV文件的基本结构至关重要。CSV文件由行组成,每行包含一个或多个字段,字段之间通过逗号分隔。在某些情况下,如果...
本教程将详细介绍如何使用C++来实现CSV文件的读取和写入操作。 首先,我们需要理解C++的标准库并不直接支持CSV处理,但我们可以利用文件流(fstream)类来读写文件,并结合字符串处理函数实现对CSV的解析和生成。...
C++作为一种强大的编程语言,提供了多种方式来读取和处理CSV文件。本示例"CDataFile_demo.zip"包含了一个C++实现的CSV阅读器,帮助开发者轻松地读取和存储CSV文件中的数字数据。 首先,我们来看标题"CSVFile_demo....
本教程将详细解释如何使用C++实现.csv文件的读写功能,以及如何解决在处理中文路径时可能遇到的问题。 首先,让我们了解一下.csv文件的结构。这种文件格式以纯文本形式存储表格数据,每一行代表一行记录,列之间以...
虽然这个实现较为基础,但它展示了手动解析CSV文件的基本思路。 标签“源码”和“工具”暗示了本文可能会涉及编写自己的CSV处理代码或者讨论现有的CSV处理工具。无论是编写自己的解析器还是利用现有库,理解CSV文件...
本项目实现了一个基于C++的CSV文件解析器,采用有限状态机(Finite State Machine, FSM)的设计模式。有限状态机是一种计算模型,用于描述和设计具有固定数量状态的系统,这些状态可以根据特定输入进行转换。在CSV...
综上所述,C++中读取CSV文件涉及文件流操作、字符串处理和数据解析等技术,而在惯性导航数据处理中,还需要理解传感器数据的特性,以及如何有效地对这些数据进行分析和计算。通过结合`fstream`、`sstream`等工具,...
C++作为一种强大的系统级编程语言,虽然没有内置的CSV处理库,但可以通过自定义函数或使用第三方库来实现CSV文件的读取。本文将详细讲解如何在C++中读取CSV表格。 首先,我们需要理解CSV文件的基本结构。每行代表一...
在C++中,我们可以利用标准库中的`fstream`来处理文件操作,结合字符串处理函数来解析CSV内容。下面是一个基本的CSV文件读取类的设计思路: 1. **类定义**:创建一个名为`CSVReader`的类,包含以下成员: - `...