【CSV文件】CSV文件内容读取
CSV(逗号分隔值文件格式)
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
这种文件格式经常用来作为不同程序之间的数据交互的格式。
具体文件格式:每条记录占一行 以逗号为分隔符 逗号前后的空格会被忽略 字段中包含有逗号,该字段必须用双引号括起来 字段中包含有换行符,该字段必须用双引号括起来 字段前后包含有空格,该字段必须用双引号括起来 字段中的双引号用两个双引号表示 字段中如果有双引号,该字段必须用双引号括起来 第一条记录,可以是字段名
John,Doe,120 jefferson st.,Riverside, NJ, 08075
Jack,McGinnis,220 hobo Av.,Phila, PA,09119
"John ""Da Man""",Repici,120 Jefferson St.,Riverside, NJ,08075
Stephen,Tyler,"7452 Terrace ""At the Plaza"" road",SomeTown,SD, 91234
,Blankman,,SomeTown, SD, 00298
"Joan ""the bone"", Anne",Jet,"9th, at Terrace plc",Desert City,CO,00123
#include <iostream>
#include <fstream> ifstream file(m_strFilePath);
std::string row;
vector<string> infRow;
getline(file, row);//读取第一行
MySplit(row, infRow); //获取每列的内容 while (file.good())
{
//读取每一行
getline(file, row);
CStringA strRow = row.c_str();
strRow.Replace("\\", "\\\\");
strRow.Replace("'", "\\'");
row = strRow;
infRow.clear();
MySplit(row, infRow);
//...
} char *m_pcTemp;
int m_iMaxTempLength; m_pcTemp(NULL), m_iMaxTempLength() //csv
void PushInTemp(const char *pcCursor, int iLen)
{
if (iLen >= m_iMaxTempLength)
{
m_iMaxTempLength = iLen * ;
if (m_pcTemp)
{
delete[] m_pcTemp;
m_pcTemp = nullptr;
} m_pcTemp = new char[m_iMaxTempLength];
}
if (iLen > )
{
if (!m_pcTemp)
{
m_pcTemp = new char[m_iMaxTempLength];
} memcpy(m_pcTemp, pcCursor, iLen);
} if(m_pcTemp)
m_pcTemp[iLen] = '\0';
} //csv
void MySplit(std::string &row, vector<string> &infRow)
{
const char *pcCursor = row.c_str();
const char *pcComma = NULL;
const char *pcQuot = NULL; do
{
if ( == row.size())
{
break;
}
pcComma = strchr(pcCursor, ',');
pcQuot = strchr(pcCursor, '"'); if (NULL == pcComma && NULL == pcQuot)
{
infRow.push_back(pcCursor);
break;
}
if (NULL == pcQuot)
{
int iLen = (int)pcComma - (int)pcCursor; PushInTemp(pcCursor, iLen);
infRow.push_back(m_pcTemp);
pcCursor += iLen + ;
}
else if (NULL == pcComma)
{
const char *pcLastQuot = strrchr(pcCursor, '"');
int iLen = (int)pcLastQuot - (int)pcQuot - ; PushInTemp(pcQuot + , iLen);
infRow.push_back(m_pcTemp);
break;
}
else
{
int iCommaPos = (int)pcComma;
int iQuotPos = (int)pcQuot; if (iCommaPos < iQuotPos)
{
int iLen = (int)pcComma - (int)pcCursor;
PushInTemp(pcCursor, iLen);
infRow.push_back(m_pcTemp);
pcCursor += iLen + ;
}
else
{
const char *pcNextQuot = NULL;
int iMove = (int)pcQuot - (int)pcCursor + ;
std::string strQuotData; pcCursor += iMove; do
{
pcNextQuot = strchr(pcCursor, '"');
if (NULL == pcNextQuot)
{
goto end;
}
if (*(pcNextQuot + ) == '"')
{
int iLen = (int)pcNextQuot - (int)pcCursor;
PushInTemp(pcCursor, iLen);
strQuotData += m_pcTemp;
pcCursor = pcNextQuot + ;
strQuotData += '"';
}
else
{
int iLen = (int)pcNextQuot - (int)pcCursor;
PushInTemp(pcCursor, iLen);
strQuotData += m_pcTemp;
infRow.push_back(strQuotData);
pcCursor += iLen + ;
if (*pcCursor == ',')
{
++pcCursor;
}
break;
}
} while ();
}
}
if (*pcCursor == '\0')
{
break;
}
} while (); end:
return;
}
【CSV文件】CSV文件内容读取的更多相关文章
- 将文件中的内容读取到map中,并排除不需要的关键字然后输出
- python 修改文件中的内容
在python的文件操作中,是没有办法对文件中具体某行或者某个位置的内容进行局部的修改的,如果需要对文件的某一行内容进行修改,可以先将文件中的所有的内容全部读取出来,再进行内容判断,是否是需要修改的内 ...
- 内容写到 csv 格式的文件中 及 读取 csv 格式的文件内容
<?php/*把内容写到 csv 格式的文件中 基本思路是:1.用 $fp = fopen("filename", 'mode')打开一个csv文件,可以是打开时才建立的2. ...
- C# 读取CSV和EXCEL文件示例
我们习惯了直接连到数据库上面读取数据表的数据内容: 如果有一天我们需要读取CSV,EXCEL文件的内容的时候,可不可以也像读数据表的方式一样呢?当然可以,使用OleDB ADO.NET是很简单的事情 ...
- R—读取数据(导入csv,txt,excel文件)
导入CSV.TXT文件 read.table函数:read.table函数以数据框的格式读入数据,所以适合读取混合模式的数据,但是要求每列的数据数据类型相同. read.table读取数据非常方便,通 ...
- python读取txt、csv和excel文件
一.python读取txt文件:(思路:先打开文件,读取文件,最后用for循环输出内容) fp = open('test.txt','r') lines = fp.readlines() fp.clo ...
- csv、json 文件读取
1.CSV 文件存储 1.1 写入 简单示例 import csv with open('data.csv', 'a') as csvfile: writer = csv.writer(csvfile ...
- python读取与写入csv,txt格式文件
python读取与写入csv,txt格式文件 在数据分析中经常需要从csv格式的文件中存取数据以及将数据写书到csv文件中.将csv文件中的数据直接读取为dict类型和DataFrame是非常方便也很 ...
- 计算机程序的思维逻辑 (64) - 常见文件类型处理: 属性文件/CSV/EXCEL/HTML/压缩文件
对于处理文件,我们介绍了流的方式,57节介绍了字节流,58节介绍了字符流,同时,也介绍了比较底层的操作文件的方式,60节介绍了随机读写文件,61节介绍了内存映射文件,我们也介绍了对象的序列化/反序列化 ...
- python读写word、excel、csv、json文件
http://blog.csdn.net/pipisorry/article/details/50368044 python读写word文档 (include wps)将word文档转换成txt文档 ...
随机推荐
- ABP捕捉异常错误代码
在服务层或者CORE层 随便哪里都可以 创建一个捕捉异常的文件夹 里面写一个LonsidException类 继承后面的接口 然后重写继承的方法 这样在ABP项目运行阶段 无论在哪里出现异 ...
- python使用sessions模拟登录淘宝
之前想爬取一些淘宝的数据,后来发现需要登录,找了很多的资料,有个使用request的sessions加上cookie来登录的,cookie的获取在登录后使用开发者工具可以找到.不过这个登录后获得的网页 ...
- 百万并发中间件系统的内核设计看Java并发性能优化
“ 这篇文章,给大家聊聊一个百万级并发的中间件系统的内核代码里的锁性能优化. 很多同学都对Java并发编程很感兴趣,学习了很多相关的技术和知识.比如volatile.Atomic.synchroniz ...
- 《剑指offer》第五十六题(数组中唯一只出现一次的数字)
// 面试题56(二):数组中唯一只出现一次的数字 // 题目:在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次.请 // 找出那个吃出现一次的数字. #include <iostr ...
- anaconda3 安装opencv3.4.2 cuda9.2 mint19(ubuntu 18.04)
从opencv1的时代,编译这玩意就不是太轻松.之前都是在win下.2.x时代,开始用cmake GUI,选vs版本,x86 x64 各种依赖库选项,debug release,... 现在3.4了, ...
- Visual Studio常用设置
●Visual Studio 2008以后,修改代码中大括号的颜色:Tools-->Environment-->Fonts and Colors-->右边[Display items ...
- echarts的学习
博客1.:https://zrysmt.github.io/ 博客2:http://blog.csdn.net/future_todo/article/details/60956942 工作中一个需求 ...
- word空白页怎么删除
最简单的,直接按键盘上的BackSpace或者Delete键,来进行删除. 分页符过到.打开“编辑”-->替换-->高级-->特殊字符-->手工分页符-->“全部替换” ...
- jquery如何获取checkbox的值
jquery如何获取checkbox的值 一.总结 一句话总结:就是通过jquery获取哪些对应name的checkbox,然后找出:check(被选中的),然后通过jquery的each遍历获取这些 ...
- (转)stm32硬件IIC
cube与I2C:https://www.cnblogs.com/121792730applllo/p/5044920.html I2C官网:https://www.i2c-bus.org/stand ...