CSV用C++拆分数据(CSV必须是UTF-8)


std::string strTmp;
std::string subStrTmp;
std::string str;
int    pos = 0;
int    subPos1 = 0;
int    subPos2 = 0;

Data fileData = FileUtils::getInstance()->getDataFromFile( FileUtils::getInstance()->fullPathForFilename( "data/SelectCard.csv" ) );
str.clear();
str.assign( (const char *)fileData.getBytes(), fileData.getSize() );

/* string 拆解
for( int i = 0; i < data.getSize(); i++ ) {
pos = str.find( "\n", i );
strTmp = str.substr( i, pos - i );
i = pos;
}
*/
for( unsigned int i = 0; i < str.size(); i++ ) {
    pos = str.find( "\n", i );
    strTmp = str.substr( i, pos - i );
    // 拆数据,第一行不要
    if( i != 0 ) {
        selectCardData_s *data = new selectCardData_s;
        subPos1 = 0;
        //
        subPos2 = strTmp.find( ",", subPos1 );
        subStrTmp = strTmp.substr( subPos1, subPos2 - subPos1 );
        data->id = atoi( subStrTmp.c_str() );
        subPos1 = subPos2 + 1;    // 需要自加,跳过分割符号
        //
        subPos2 = strTmp.find( ",", subPos1 );
        subStrTmp = strTmp.substr( subPos1, subPos2 - subPos1 );
        data->cardType = atoi( subStrTmp.c_str() );
        subPos1 = subPos2 + 1;
        //
        subPos2 = strTmp.find( ",", subPos1 );
        subStrTmp = strTmp.substr( subPos1, subPos2 - subPos1 );
        data->rewardMultiple = atoi( subStrTmp.c_str() );
        subPos1 = subPos2 + 1;
        //
        subPos2 = strTmp.find( ",", subPos1 );
        subStrTmp = strTmp.substr( subPos1, subPos2 - subPos1 );
        data->chance = atof( subStrTmp.c_str() );
        subPos1 = subPos2 + 1;
        // 记录数据
        dataMap[ data->id ] = data;
    }

    if( pos == - 1 ) {
        break;
    }
    i = pos;
}

拆分的CSV里面的数据格式为:

id,cardType,rewardMultiple,chance
1,5,10,测试

所以从第二行开始才是真是的数据

时间: 2024-11-08 00:18:38

CSV用C++拆分数据(CSV必须是UTF-8)的相关文章

PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据

如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json.xml.html.serialize.csv.php等数据? 其实这也不难,因为Rest API也是基于http协议的,只要我们按照协议走,就能做到自动化识别 API 的内容,方法如下: 1.API服务端要返回明确的 http Content-Type头信息,如 Content-Type: application/json; charset=utf-8 Content-Type: application/xml;

Import CSV data to Sqlite. 导入CSV数据到SQLite.

Import CSV data to Sqlite. 导入CSV数据到SQLite. 在做数据导入的时候,只需要理清楚两点就可以了. 1, 提取 Title 作为field name. 2, 数据写入数据池. 这里SQLite很好的为我们解决了这类问题. fieldsnames 属性很高的解决了 提取title的问题, 而数据池, sqlite insert接受 包涵元组的list 数据集.这里一个元组,就是一行数据. 最后, 其实我们要实现的就是段 SQL: DROP TABLE IF EXI

使用joomla通过CSV文件上传数据存入数据库并使用JavaScript验证码是否符合规则

1,实现效果截图 2,A.php上传CSV文件表单 2-1:html结构使用jqeury.form.min.js表单框架异步提交 1 <div class="uploadFile border_bg"> 2 <form action="" method="post" id="formToUpdate"> 3 <div class="form-group"> 4 <l

将CSV文件中的数据导入到SQL Server 数据库中

导入数据时,需要注意 CSV 文件中的数据是否包含逗号以及双引号,存在时,导入会失败 选择数据库 -> 右键 -> 任务 -> 导入数据 ,然后根据弹出的导入导出向导(如下图)中的提示内容进行操作即可. 原文地址:https://www.cnblogs.com/daochangone/p/9134718.html

C++ 把数组数据存入 CSV 文件,以及读取 CSV 文件的数据

1. CSV-百度百科 2. 代码 #pragma once //Microsoft Visual Studio 2015 Enterprise #include<iostream> #include<fstream> #include<string> #include<vector> #include<cstdio> #include<cstdlib> using namespace std; template<typenam

自制工具:CSV代码生成器:自动生成CSV文件对应的C++实体类和字段类型解析代码

本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee 更有开发效率地使用CSV文件 为了更有效率地使用CSV文件,我制作了一个工具:Code代码生成器. 这个工具可以对CSV文件进行简单地配置,自动生成这个CSV文件对应的C++数据结构和字段类型解析函数代码. 工程项目只要加入这些自动生成的代码,就可以更方便地使用来自CSV配置文件的数据. 用工具自动生代码,可以省去了手工编写.手工维护那些大量的.无聊繁琐的类型定义.数据转换的代码的过

R: 导入 csv 文件,导出到csv文件,;绘图后导出为图片、pdf等

################################################### 问题:导入 csv 文件 如何从csv文件中导入数据,?参数怎么设置?常用参数模板是啥? 解决方案: yuan <- read.csv(file = "C:/Users/Administrator/Desktop/test1.csv",header = TRUE,sep = ",",dec = ".", stringsAsFactors

寻找自适应元素(10)-透视表的自动拆分数据

寻找自适应元素(10)-透视表的自动拆分数据 设计要点:excle.界面.自动调整.数据透视表 阿金:不管怎么说,俺一下子说了这么多透视表的自动功能,在这场PK中应该算俺赢. 秀秀:不一定,因为俺还有好多自适应元素没说呢,透视表就是这么几下子吧? 阿金:那俺再说一个!透视表不仅能组合,还能自动拆分. 秀秀:自动拆分? 阿金:当然!俺记得给你说过"按部门拆分为多个工作表"的方法么? 秀秀:噢,就是把"部门"字段设置为"数据透视表"的页字段.然后,单

csv文件的使用,csv空白行问题

首先w+和wb区别 两者都是用于以只写方式打开指定文件指定文件原来不存在,则在打开时由系统新建一个以指定文件名命名的文件,如果原来已存在一个以该文件名命名的文件,则在打开时将该文件删去,然后重新建立一个新文件. 两者的不同在于前者以ASCII文件打开文件,而后者用于打开二进制文件 csv如果使用w+的接入方式,每个row之间会有一个空白行,所以需要wb方式写入 f=open("d:\\ceshi.csv","w+")try:    writer=csv.writer