【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文档 ...
随机推荐
- Java java.lang.SecurityException: Prohibited package name
java.lang.SecurityException: Prohibited package name 提示java错误: Exception in thread "main" ...
- NoSQL(not only struts query language)的简单介绍
为什么需要NoSQL? 互联网自扩大规模来一直面临3个问题 1.High performance高并发 一个网站开发实时生成动态页面可能会存在高并发请求的需求,硬盘IO已经无法接受 2.Huge St ...
- 力扣(LeetCode)520. 检测大写字母
给定一个单词,你需要判断单词的大写使用是否正确. 我们定义,在以下情况时,单词的大写用法是正确的: 全部字母都是大写,比如"USA". 单词中所有字母都不是大写,比如"l ...
- HYPERSPECTRAL IMAGE CLASSIFICATION USING TWOCHANNEL DEEP CONVOLUTIONAL NEURAL NETWORK阅读笔记
HYPERSPECTRAL IMAGE CLASSIFICATION USING TWOCHANNEL DEEP CONVOLUTIONAL NEURAL NETWORK 论文地址:https:/ ...
- centos/redhat 删除虚拟网桥virbr0
kvm虚拟化环境安装好后,ifconfig会发现多了一个虚拟网卡virbr0. 这是由于安装和启用了libvirt服务后生成的,libvirt在服务器(host)上生成一个 virtual netw ...
- Python - requests https请求的坑
#-*-coding:utf-8-*- # Time:2017/9/25 20:41 # Author:YangYangJun import requests import ssl from requ ...
- 关于Python中的ifelse、while和for循环的简单小结
1.ifelse 1.1首先简单编辑一个关于ifelse的程序: _username = 'yanfeixu' _password = 'wuyifan' username = input(" ...
- Java接口简单理解
1.接口: 接口成员变量默认声明方式:public.static.final 接口成员方法默认声明方式:public.abstract public interface Interface_class ...
- ml基本问题
作者:NgShawn 链接:https://www.nowcoder.com/discuss/33737?type=2&order=3&pos=19&page=1 来源:牛客网 ...
- 『TensorFlow』SSD源码学习_其四:数据介绍及TFR文件生成
Fork版本项目地址:SSD 一.数据格式介绍 数据文件夹命名为VOC2012,内部有5个子文件夹,如下, 我们的检测任务中使用JPEGImages文件夹和Annotations文件夹. JPEGIm ...