CSV(逗号分隔值文件格式)

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是7-bitASCII是最基本的通用编码。

这种文件格式经常用来作为不同程序之间的数据交互的格式。

具体文件格式:每条记录占一行 以逗号为分隔符 逗号前后的空格会被忽略 字段中包含有逗号,该字段必须用双引号括起来 字段中包含有换行符,该字段必须用双引号括起来 字段前后包含有空格,该字段必须用双引号括起来 字段中的双引号用两个双引号表示 字段中如果有双引号,该字段必须用双引号括起来 第一条记录,可以是字段名

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文件内容读取的更多相关文章

  1. 将文件中的内容读取到map中,并排除不需要的关键字然后输出

  2. python 修改文件中的内容

    在python的文件操作中,是没有办法对文件中具体某行或者某个位置的内容进行局部的修改的,如果需要对文件的某一行内容进行修改,可以先将文件中的所有的内容全部读取出来,再进行内容判断,是否是需要修改的内 ...

  3. 内容写到 csv 格式的文件中 及 读取 csv 格式的文件内容

    <?php/*把内容写到 csv 格式的文件中 基本思路是:1.用 $fp = fopen("filename", 'mode')打开一个csv文件,可以是打开时才建立的2. ...

  4. C# 读取CSV和EXCEL文件示例

    我们习惯了直接连到数据库上面读取数据表的数据内容: 如果有一天我们需要读取CSV,EXCEL文件的内容的时候,可不可以也像读数据表的方式一样呢?当然可以,使用OleDB ADO.NET是很简单的事情 ...

  5. R—读取数据(导入csv,txt,excel文件)

    导入CSV.TXT文件 read.table函数:read.table函数以数据框的格式读入数据,所以适合读取混合模式的数据,但是要求每列的数据数据类型相同. read.table读取数据非常方便,通 ...

  6. python读取txt、csv和excel文件

    一.python读取txt文件:(思路:先打开文件,读取文件,最后用for循环输出内容) fp = open('test.txt','r') lines = fp.readlines() fp.clo ...

  7. csv、json 文件读取

    1.CSV 文件存储 1.1 写入 简单示例 import csv with open('data.csv', 'a') as csvfile: writer = csv.writer(csvfile ...

  8. python读取与写入csv,txt格式文件

    python读取与写入csv,txt格式文件 在数据分析中经常需要从csv格式的文件中存取数据以及将数据写书到csv文件中.将csv文件中的数据直接读取为dict类型和DataFrame是非常方便也很 ...

  9. 计算机程序的思维逻辑 (64) - 常见文件类型处理: 属性文件/CSV/EXCEL/HTML/压缩文件

    对于处理文件,我们介绍了流的方式,57节介绍了字节流,58节介绍了字符流,同时,也介绍了比较底层的操作文件的方式,60节介绍了随机读写文件,61节介绍了内存映射文件,我们也介绍了对象的序列化/反序列化 ...

  10. python读写word、excel、csv、json文件

    http://blog.csdn.net/pipisorry/article/details/50368044 python读写word文档 (include wps)将word文档转换成txt文档 ...

随机推荐

  1. DataGrip激活码

    引言: 网上有有很多datagirp的激活码,但是经过尝试很多都失效了,找了半天终于 找到了一个可用的激活码! 1. 激活码 适用版本: DataGrip2018.2.3,2018.1.1,其他版本没 ...

  2. Spark SQL笔记

    HDFS HDFS架构 1.Master(NameNode/NN) 对应 N个Slaves(DataNode/NN)2.一个文件会被拆分成多个块(Block)默认:128M例: 130M ==> ...

  3. 两排序数组的中位数 Median of Two Sorted Arrays

    2018-11-18 23:33:28 问题描述: 问题求解: 这个问题是一个比较有难度的可以使用二分搜索法求解的问题,如果采用朴素的解法进行merge再找中位数的话,其时间复杂度为O(n1 + n2 ...

  4. Very Good Article on How Git Commands Work

    http://stackoverflow.com/questions/30038999/differences-between-commit-commit-and-push-commit-and-sy ...

  5. Linux ----> debian中环境的常见配置

    环境: (debian 9)/(lubuntu18.0.4+virtualbox) 1.配置下载源: gedit /etc/apt/sources.list #163 deb http://mirro ...

  6. 基于C# winform实现图片流存储到文件

    本文所述实例实现将一张图片上传到指定的文件夹,然后在窗体上的PictrueBox控件中显示出来. 具体功能代码如下: private void btnUpload_Click(object sende ...

  7. LeetCode--231--2的幂函

    问题描述: 给定一个整数,编写一个函数来判断它是否是 2 的幂次方. 示例 1: 输入: 1 输出: true 解释: 2 0  = 1 示例 2: 输入: 16 输出: true 解释: 2 4   ...

  8. liunx进程管理之进程介绍

    关于进程 process ====================================================================================Wha ...

  9. (Go rails)使用Rescue_from(ActiveSupport:Rescuable::ClassMethods)来解决404(ActiveRecord::RecordNotFound)❌

    https://gorails.com/episodes/handle-404-using-rescue_from?autoplay=1 我的git: https://github.com/chent ...

  10. Postman发包form-data、x-www-form-urlencoded、raw、binary的区别

    首先普及下http的Post四种Content-Type Postman中post编码方式form-data.x-www-form-urlencoded.raw.binary的区别 x-www-for ...