标签:des http 使用 os 文件 io 数据 for
本文分为5小节,基本上就是我刚接触CSV文件到思考、实践做一个CSV解析器的过程的还原。希望我的思路也能带领你一步步从浅到深认识CSV文件格式。
1.简单的CSV解析器实现。
2.简单实现的CSV解析器的问题
3. CSV格式的定义
4.用FSM(有限状态机)来做CSV格式解析。
5.为什么使用CSV格式
1.简单的CSV解析器实现。
最近有一个需求,读取CSV格式的配置。CSV是CommaSeparated Value(逗号分隔值)的缩写,通常用文本表示数据。CSV格式数据的结构类似表格,不同的记录占用一行,一行中的字段用“,”(逗号)分隔,例如:
名字,职业,工作经验(年),
Siliphen Lee,软件工程师(码畜),5
Edison Chou,游戏服务器端主程,1
Deson,钢琴教师兼游戏策划,1
… …
咋一看,CSV格式比较简单。就是用行来分隔不同的记录,记录中用“,”逗号分隔不同的字段域。仅仅是这样考虑的话,那么编写CSV解析器也很简单了。就是字符串的分割而已。
好,下面来动手实现下这个思路。C#等语言的字符串都有Split函数,C++的标准库却连这个很常用的函数都没,C++的标准库简直是弱爆了!而就算用了boost,因为boost接近std的风格,类似Split功能的函数,使用起来也比较麻烦。
没办法,只好自己编写Split来实现CSV的解析了。对于CSV的解析功能,为了实现“组件化”,“复用”的理想,可以单独写一个Csv类,封装一些相关操作。以后在别的工程项目中,也可以直接把这个类拿过去用。
CSV类,三下五除二,就编写好了。代码如下:
头文件
[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
#pragma once
#include <vector>
#include <string>
using namespace std;
class Csv
{
public:
Csv();
~Csv();
public:
// 载入一个CSV文件
void Load(const string& strFileName);
// 从字符串从解析
void Parse(const string& strText);
public :
/*
分割字符串
str 要分隔的字符串
seperator 分隔符
Ret 分割后的结果
*/
static void Split(const string &str, const string& seperator, vector< string >& Ret);
/*
读取整个文件的数据
*/
static void ReadAll(const string& strFileName , string& Data );
public :
vector< vector< string > >& GetGridData(){ return m_GridData; }
private :
// 原始表格数据
vector< vector< string > > m_GridData;
};
实现文件:
[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
#include "Csv.h"
#include <stdio.h>
Csv::Csv()
{
}
Csv::~Csv()
{
}
void Csv::ReadAll(const string& strFileName, string& Data)
{
// 读取文件数据
FILE* pFile = fopen(strFileName.c_str(), "rb");
if (pFile == 0)
{
return;
}
fseek(pFile, 0, SEEK_END);
long len = ftell(pFile);
char *pBuffer = new char[len + 1];
fseek(pFile, 0, SEEK_SET);
fread(pBuffer, 1, len, pFile);
fclose(pFile);
pBuffer[len] = 0;
Data.assign(pBuffer, len );
delete[] pBuffer;
}
void Csv::Load(const string& strFileName)
{
string Data;
ReadAll(strFileName, Data);
Parse(Data );
}
void Csv::Parse(const string& strText)
{
// 清除之前的数据
m_GridData.clear();
// 分出行,分出字段。
vector< string > ret;
Split(strText, "\r\n", ret);
for (size_t i = 0; i < ret.size(); ++i)
{
vector< string > Fields;
Split(ret[i], ",", Fields);
m_GridData.push_back(Fields);
}
}
void Csv::Split(const string &str, const string& seperator, vector< string >& Ret)
{
Ret.clear();
size_t nStartPosFound = str.find(seperator, 0);
size_t nFieldStart = 0;
for (; nStartPosFound != -1; nStartPosFound = str.find(seperator, nStartPosFound))
{
string strSub = str.substr(nFieldStart, nStartPosFound - nFieldStart);
nStartPosFound = nStartPosFound + seperator.size();
nFieldStart = nStartPosFound;
Ret.push_back(strSub);
}
// 加入最后一个字段
if (nFieldStart < str.size())
{
string strSub = str.substr(nFieldStart, str.size() - nFieldStart);
Ret.push_back(strSub);
}
}
对代码做一些简要说明。设计Csv类首先考虑的就是“独立性”。Csv类不应该耦合(依赖)任何其他库,比如说:尽量避免使用Cocos2d-x,QT里面的函数。Cocos2d-x有跨平台的文件读取方法,QT有字符串的split函数。如果用了这些库的现成机制,会导致类的通用性下降。比如,在另一个非Cocos2d-x,非QT的项目中,就不能直接用了。
同样地,从可移植性考虑。用VS编写读取文件,也不应该使用CreateFile, ReadFile等Win32 Api。fopen虽然不太好用,但由于其是C语言标准库的,移植性好,故用之。
这里有一个问题需要注意下,用VS2013编辑和编译的话,可能会对fopen函数提示有错误。如下:
这句英文大概是说:“fopen函数或者变量可能是不安全的。考虑使用fopen_s替代。要屏蔽这个错误,请使用_CRT_SECURE_NO_WARNINGS。”
_CRT_SECURE_NO_WARNINGS怎样用呢?简单,在“项目属性 -> 配置属性 -> C/C++ -> 命令行 -> 其他选择”上,添加“/D _CRT_SECURE_NO_WARNING”。如下图:
添加完后,重新编译。这样,我们的简单的CSV解析器就写好了。运行调试一下,看看是否运行正确
OK,没问题。解析的结果,我们放在一个vector< vector< string > > 类型的数据结构中。这个数据结构比较灵活,可以模拟表示一个表格。实际上,vector< vector< string > > 也可以表示可动态调整大小的二维数组。
2.简单实现的CSV解析器的问题
之前用字符串处理方法split做的CSV解析器有问题吗?对于简单的数据,没问题。但仔细想下就会发现,字段之间用“,”英文逗号分隔,如果字段数据本身包含了逗号,怎么办?我们用Excel做下实验,看看Excel导出的CSV格式表格是怎样的。
实验结果如下:
从以上结果可以看到,对于包含了“,”字段分隔符的字段,是用“”””双引号把这个字段包围起来。但如果字段数据本身也包含了“””引号,又怎么办呢?继续做实验,如下图
实验发现,如果字段数据本身存在“””引号,那么引号的前面也会放一个引号,前置的引号相当于C语言的字符串的转义字符。
如果用一个字段表示一篇文章,有分段换行。那又是一个什么情况?做实验看看,实验结果如下:
复制一段文章或者是有段落的一段文本,然后粘贴到Excel的一个字段中,最后Excel另存为CSV格式文件。用记事本打开那个CSV格式文件。发现用记事本看不到换行,这是什么情况?用UltraEdit查看下二进制数据
发现,回车换行(/r/n),会被Excel替换成/n换行。而用记事本程序打开是看不到/n换行效果的。
如果用记事本程序编辑CSV文件,敲入回车换行(/r/n),然后用Excel打开,会怎样?如下图:
可以看到用记事本程序编辑CSV文件,人工按下回车键,会键入回车换行(/r/n)数据。用Excel打开的话,也显示了分行的效果。
做了一些实验得出的结论是:CSV一个字段的数据是可以表示存在“,”字段分隔符的。如果有逗号字段分隔符存在,那么整个字段就会用双引号包围起来。如果字段数据本身有引号,那么会在之前放一个前置的引号表示转义,并且该字段也会用双引号包围起来。用双引号包围起来的字段数据里面,也可以有回车换行数据。
这样,问题来了。我们用回车换行来分割出行,再用逗号分割出一行中不同的字段。这种简单的方法无法区分一个逗号是字段本身的数据,还是用来作为字段分隔符的。也无法区分一个回车换行,是字段里面的数据,还是用来分隔行的。
3. CSV格式的定义
上面是用Excel另存为CSV文件格式做实验来摸索CSV格式和一些显示特性。其实CSV是有格式规范的。
关于CSV格式的定义,可以参考这里: 一篇百度文档的CSV格式定义 ,IETF上的CSV格式定义的文档
4.用FSM(有限状态机)来做CSV格式解析。
了解CSV格式的定义后,我们知道,要写一个完善的CSV解析器,不能简单地用字符串的Split方法了。
我们的目标是:写一个CSV类,能正确解析Excel导出的任何CSV文件!也许有人会认为,用正则表达式可以搞定。用正则有几个问题,第一,C++的正则表达式通常都依赖于一些第三方库,QT,Boost等,C++11的正则也不是在所有的编译器上都实现了,这很大地影响了我们的CSV类通用性。第二,对于语法格式分析,正则不是万能的,至少文章作者本人是很难写出能解析CSV的正则。
这里介绍一个很强大的方法:FSM(Finite State Machine,有限状态机)。我第一次接触FSM是在罗森(KennethH.Rosen)著的《离散数学及其应用》。关于FSM的概念,可以百度下,看看百度百科的解释。也可以看看维基百科的解释:http://zh.wikipedia.org/wiki/%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E6%9C%BA
FSM的应用很广,电路、游戏开发和编译原理等都会涉及。这里,我们就使用FSM来做CSV的解析。使用FSM一般是先画状态图,然后编码实现,调试,修改,反复这个过程。我画的CSV解析FSM状态图如下:
从上图,可以看到FSM还可以做语法检查。实际上《编译原理》中的词法分析的扫描器,通常就是基于FSM。这个FSM要解析Excel导出的任何CSV格式文件应该是足够了。为了简化实现,不考虑容错。
由于代码较多。我就不贴完整实现代码了。用我们之前实现的简单Csv类来改。就是砍掉Split函数。然后,重写Parse函数。
大概步骤是:
先定义状态
[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
// 定义状态
enum StateType
{
// 新字段开始
NewFieldStart ,
// 非引号字段
NonQuotesField ,
// 引号字段
QuotesField ,
// 字段分隔
FieldSeparator ,
// 引号字段中的引号
QuoteInQuotesField ,
// 行分隔符字符1,回车
RowSeparator ,
// 语法错误
Error ,
};
然后,写一个for循环,从头到尾遍历CSV文件数据,把遍历到的字符“喂给”FSM。FSM用一个Switch-Case语句实现。遍历结束后,再判断下状态,做一些相应处理。算法截图如下:
做下测试,读取效果如何。先用Excel构造一个复杂的表格,字段里面包含“, 半角逗号”,““ 引号”,“\r\n 回车换行符”。如下所示:
导出CSV文件。用Csv类读一下。结果如下图:
OK。大功告成!一个相对完善的Csv类完成了!我们可是用编译原理涉及的技术搞定的哦,赞!
我的Csv类完整实现(包括整个VS工程和测试CSV文件)可以在这里下载到:
如果发现我的类读取Excel导出的CSV文件有什么bug。请联系我。我改!:)
5.为什么使用CSV格式
我思考一段时间,总结的理由有如下几点:
1.CSV文件格式占用空间比较小,是文本文件。
2.CSV文件可以用记事本打开,编辑修改方便。同时也可以用Excel打开。
3.游戏项目中,策划通常喜欢用Excel做数值和配置。Excel可以直接另存为CSV文件。
4.配置也可以用xml。Excel同样可以导出xml文件格式。xml不错,但C++的标准库没有xml的读取方法。通常C++项目读xml需要依赖第三方库。例如:TinyXml之类的。
http://club.jd.com/CommunityGroupDetail/12594721_1.html
http://club.jd.com/CommunityGroupDetail/12594876_1.html
http://club.jd.com/CommunityGroupDetail/12594964_1.html
http://club.jd.com/CommunityGroupDetail/12594988_1.html
http://club.jd.com/CommunityGroupDetail/12595015_1.html
http://club.jd.com/CommunityGroupDetail/12595018_1.html
http://club.jd.com/CommunityGroupDetail/12595040_1.html
http://club.jd.com/CommunityGroupDetail/12595042_1.html
http://club.jd.com/CommunityGroupDetail/12595074_1.html
http://club.jd.com/CommunityGroupDetail/12595076_1.html
http://club.jd.com/CommunityGroupDetail/12595118_1.html
http://club.jd.com/CommunityGroupDetail/12595171_1.html
http://club.jd.com/CommunityGroupDetail/12595215_1.html
http://club.jd.com/CommunityGroupDetail/12595287_1.html
http://club.jd.com/CommunityGroupDetail/12595338_1.html
http://club.jd.com/CommunityGroupDetail/12595339_1.html
http://club.jd.com/CommunityGroupDetail/12595355_1.html
http://club.jd.com/CommunityGroupDetail/12595359_1.html
http://club.jd.com/CommunityGroupDetail/12595365_1.html
http://club.jd.com/CommunityGroupDetail/12595387_1.html
http://club.jd.com/CommunityGroupDetail/12595413_1.html
http://club.jd.com/CommunityGroupDetail/12595439_1.html
http://club.jd.com/CommunityGroupDetail/12595453_1.html
http://club.jd.com/CommunityGroupDetail/12595457_1.html
http://club.jd.com/CommunityGroupDetail/12595513_1.html
http://club.jd.com/CommunityGroupDetail/12595556_1.html
http://club.jd.com/CommunityGroupDetail/12595671_1.html
http://club.jd.com/CommunityGroupDetail/12595695_1.html
http://club.jd.com/CommunityGroupDetail/12595724_1.html
http://club.jd.com/CommunityGroupDetail/12595784_1.html
http://club.jd.com/CommunityGroupDetail/12594723_1.html
http://club.jd.com/CommunityGroupDetail/12594845_1.html
http://club.jd.com/CommunityGroupDetail/12594932_1.html
http://club.jd.com/CommunityGroupDetail/12594970_1.html
http://club.jd.com/CommunityGroupDetail/12595019_1.html
http://club.jd.com/CommunityGroupDetail/12595043_1.html
http://club.jd.com/CommunityGroupDetail/12595077_1.html
http://club.jd.com/CommunityGroupDetail/12595095_1.html
http://club.jd.com/CommunityGroupDetail/12595101_1.html
http://club.jd.com/CommunityGroupDetail/12595127_1.html
http://club.jd.com/CommunityGroupDetail/12595149_1.html
http://club.jd.com/CommunityGroupDetail/12595154_1.html
http://club.jd.com/CommunityGroupDetail/12595205_1.html
http://club.jd.com/CommunityGroupDetail/12595208_1.html
http://club.jd.com/CommunityGroupDetail/12595324_1.html
http://club.jd.com/CommunityGroupDetail/12595342_1.html
http://club.jd.com/CommunityGroupDetail/12595400_1.html
http://club.jd.com/CommunityGroupDetail/12595431_1.html
http://club.jd.com/CommunityGroupDetail/12595474_1.html
http://club.jd.com/CommunityGroupDetail/12595525_1.html
http://club.jd.com/CommunityGroupDetail/12595526_1.html
http://club.jd.com/CommunityGroupDetail/12595542_1.html
http://club.jd.com/CommunityGroupDetail/12595557_1.html
http://club.jd.com/CommunityGroupDetail/12595581_1.html
http://club.jd.com/CommunityGroupDetail/12595610_1.html
http://club.jd.com/CommunityGroupDetail/12595611_1.html
http://club.jd.com/CommunityGroupDetail/12595632_1.html
http://club.jd.com/CommunityGroupDetail/12595672_1.html
http://club.jd.com/CommunityGroupDetail/12595725_1.html
http://club.jd.com/CommunityGroupDetail/12594847_1.html
http://club.jd.com/CommunityGroupDetail/12594879_1.html
http://club.jd.com/CommunityGroupDetail/12594909_1.html
http://club.jd.com/CommunityGroupDetail/12594927_1.html
http://club.jd.com/CommunityGroupDetail/12594990_1.html
http://club.jd.com/CommunityGroupDetail/12595025_1.html
http://club.jd.com/CommunityGroupDetail/12595080_1.html
http://club.jd.com/CommunityGroupDetail/12595110_1.html
http://club.jd.com/CommunityGroupDetail/12595120_1.html
http://club.jd.com/CommunityGroupDetail/12595130_1.html
http://club.jd.com/CommunityGroupDetail/12595147_1.html
http://club.jd.com/CommunityGroupDetail/12595204_1.html
http://club.jd.com/CommunityGroupDetail/12595237_1.html
http://club.jd.com/CommunityGroupDetail/12595277_1.html
http://club.jd.com/CommunityGroupDetail/12595292_1.html
http://club.jd.com/CommunityGroupDetail/12595360_1.html
http://club.jd.com/CommunityGroupDetail/12595368_1.html
http://club.jd.com/CommunityGroupDetail/12595407_1.html
http://club.jd.com/CommunityGroupDetail/12595469_1.html
http://club.jd.com/CommunityGroupDetail/12595470_1.html
http://club.jd.com/CommunityGroupDetail/12595476_1.html
http://club.jd.com/CommunityGroupDetail/12595477_1.html
http://club.jd.com/CommunityGroupDetail/12595484_1.html
http://club.jd.com/CommunityGroupDetail/12595502_1.html
http://club.jd.com/CommunityGroupDetail/12595559_1.html
http://club.jd.com/CommunityGroupDetail/12595584_1.html
http://club.jd.com/CommunityGroupDetail/12595639_1.html
http://club.jd.com/CommunityGroupDetail/12595674_1.html
http://club.jd.com/CommunityGroupDetail/12595754_1.html
http://club.jd.com/CommunityGroupDetail/12595788_1.html
http://club.jd.com/CommunityGroupDetail/12594726_1.html
http://club.jd.com/CommunityGroupDetail/12594728_1.html
http://club.jd.com/CommunityGroupDetail/12594729_1.html
http://club.jd.com/CommunityGroupDetail/12594730_1.html
http://club.jd.com/CommunityGroupDetail/12594785_1.html
http://club.jd.com/CommunityGroupDetail/12594847_1.html
http://club.jd.com/CommunityGroupDetail/12594879_1.html
http://club.jd.com/CommunityGroupDetail/12594902_1.html
http://club.jd.com/CommunityGroupDetail/12594909_1.html
http://club.jd.com/CommunityGroupDetail/12594927_1.html
http://club.jd.com/CommunityGroupDetail/12594990_1.html
http://club.jd.com/CommunityGroupDetail/12595022_1.html
http://club.jd.com/CommunityGroupDetail/12595025_1.html
http://club.jd.com/CommunityGroupDetail/12595080_1.html
http://club.jd.com/CommunityGroupDetail/12595110_1.html
http://club.jd.com/CommunityGroupDetail/12595120_1.html
http://club.jd.com/CommunityGroupDetail/12595130_1.html
http://club.jd.com/CommunityGroupDetail/12595133_1.html
http://club.jd.com/CommunityGroupDetail/12595146_1.html
http://club.jd.com/CommunityGroupDetail/12595147_1.html
http://club.jd.com/CommunityGroupDetail/12595174_1.html
http://club.jd.com/CommunityGroupDetail/12595176_1.html
http://club.jd.com/CommunityGroupDetail/12595204_1.html
http://club.jd.com/CommunityGroupDetail/12595223_1.html
http://club.jd.com/CommunityGroupDetail/12595237_1.html
http://club.jd.com/CommunityGroupDetail/12595277_1.html
http://club.jd.com/CommunityGroupDetail/12595292_1.html
http://club.jd.com/CommunityGroupDetail/12595350_1.html
http://club.jd.com/CommunityGroupDetail/12595484_1.html
http://club.jd.com/CommunityGroupDetail/12594788_1.html
http://club.jd.com/CommunityGroupDetail/12594908_1.html
http://club.jd.com/CommunityGroupDetail/12594994_1.html
http://club.jd.com/CommunityGroupDetail/12595084_1.html
http://club.jd.com/CommunityGroupDetail/12595134_1.html
http://club.jd.com/CommunityGroupDetail/12595160_1.html
http://club.jd.com/CommunityGroupDetail/12595227_1.html
http://club.jd.com/CommunityGroupDetail/12595242_1.html
http://club.jd.com/CommunityGroupDetail/12595256_1.html
http://club.jd.com/CommunityGroupDetail/12595258_1.html
http://club.jd.com/CommunityGroupDetail/12595259_1.html
http://club.jd.com/CommunityGroupDetail/12595272_1.html
http://club.jd.com/CommunityGroupDetail/12595273_1.html
http://club.jd.com/CommunityGroupDetail/12595372_1.html
http://club.jd.com/CommunityGroupDetail/12595374_1.html
http://club.jd.com/CommunityGroupDetail/12595403_1.html
http://club.jd.com/CommunityGroupDetail/12595444_1.html
http://club.jd.com/CommunityGroupDetail/12595465_1.html
http://club.jd.com/CommunityGroupDetail/12595482_1.html
http://club.jd.com/CommunityGroupDetail/12595561_1.html
http://club.jd.com/CommunityGroupDetail/12595573_1.html
http://club.jd.com/CommunityGroupDetail/12595603_1.html
http://club.jd.com/CommunityGroupDetail/12595616_1.html
http://club.jd.com/CommunityGroupDetail/12595680_1.html
http://club.jd.com/CommunityGroupDetail/12595732_1.html
http://club.jd.com/CommunityGroupDetail/12595733_1.html
http://club.jd.com/CommunityGroupDetail/12595736_1.html
http://club.jd.com/CommunityGroupDetail/12595871_1.html
http://club.jd.com/CommunityGroupDetail/12595874_1.html
http://club.jd.com/CommunityGroupDetail/12595876_1.html
http://club.jd.com/CommunityGroupDetail/12593620_1.html
http://club.jd.com/CommunityGroupDetail/12593800_1.html
http://club.jd.com/CommunityGroupDetail/12593851_1.html
http://club.jd.com/CommunityGroupDetail/12593967_1.html
http://club.jd.com/CommunityGroupDetail/12594062_1.html
http://club.jd.com/CommunityGroupDetail/12594078_1.html
http://club.jd.com/CommunityGroupDetail/12594104_1.html
http://club.jd.com/CommunityGroupDetail/12594142_1.html
http://club.jd.com/CommunityGroupDetail/12594145_1.html
http://club.jd.com/CommunityGroupDetail/12594146_1.html
http://club.jd.com/CommunityGroupDetail/12594166_1.html
http://club.jd.com/CommunityGroupDetail/12594173_1.html
http://club.jd.com/CommunityGroupDetail/12594201_1.html
http://club.jd.com/CommunityGroupDetail/12594208_1.html
http://club.jd.com/CommunityGroupDetail/12594222_1.html
http://club.jd.com/CommunityGroupDetail/12594224_1.html
http://club.jd.com/CommunityGroupDetail/12594233_1.html
http://club.jd.com/CommunityGroupDetail/12594255_1.html
http://club.jd.com/CommunityGroupDetail/12594297_1.html
http://club.jd.com/CommunityGroupDetail/12594377_1.html
http://club.jd.com/CommunityGroupDetail/12594470_1.html
http://club.jd.com/CommunityGroupDetail/12594486_1.html
http://club.jd.com/CommunityGroupDetail/12594506_1.html
http://club.jd.com/CommunityGroupDetail/12594508_1.html
http://club.jd.com/CommunityGroupDetail/12594649_1.html
http://club.jd.com/CommunityGroupDetail/12594698_1.html
http://club.jd.com/CommunityGroupDetail/12594743_1.html
http://club.jd.com/CommunityGroupDetail/12594854_1.html
http://club.jd.com/CommunityGroupDetail/12594885_1.html
http://club.jd.com/CommunityGroupDetail/12594886_1.html
http://club.jd.com/CommunityGroupDetail/12593937_1.html
http://club.jd.com/CommunityGroupDetail/12593948_1.html
http://club.jd.com/CommunityGroupDetail/12594003_1.html
http://club.jd.com/CommunityGroupDetail/12594019_1.html
http://club.jd.com/CommunityGroupDetail/12594024_1.html
http://club.jd.com/CommunityGroupDetail/12594035_1.html
http://club.jd.com/CommunityGroupDetail/12594077_1.html
http://club.jd.com/CommunityGroupDetail/12594080_1.html
http://club.jd.com/CommunityGroupDetail/12594084_1.html
http://club.jd.com/CommunityGroupDetail/12594090_1.html
http://club.jd.com/CommunityGroupDetail/12594093_1.html
http://club.jd.com/CommunityGroupDetail/12594099_1.html
http://club.jd.com/CommunityGroupDetail/12594113_1.html
http://club.jd.com/CommunityGroupDetail/12594114_1.html
http://club.jd.com/CommunityGroupDetail/12594118_1.html
http://club.jd.com/CommunityGroupDetail/12594136_1.html
http://club.jd.com/CommunityGroupDetail/12594162_1.html
http://club.jd.com/CommunityGroupDetail/12594195_1.html
http://club.jd.com/CommunityGroupDetail/12594314_1.html
http://club.jd.com/CommunityGroupDetail/12594321_1.html
http://club.jd.com/CommunityGroupDetail/12594448_1.html
http://club.jd.com/CommunityGroupDetail/12594453_1.html
http://club.jd.com/CommunityGroupDetail/12594581_1.html
http://club.jd.com/CommunityGroupDetail/12594596_1.html
http://club.jd.com/CommunityGroupDetail/12594623_1.html
http://club.jd.com/CommunityGroupDetail/12594628_1.html
http://club.jd.com/CommunityGroupDetail/12594772_1.html
http://club.jd.com/CommunityGroupDetail/12594827_1.html
http://club.jd.com/CommunityGroupDetail/12594830_1.html
http://club.jd.com/CommunityGroupDetail/12594887_1.html
http://club.jd.com/CommunityGroupDetail/12593850_1.html
http://club.jd.com/CommunityGroupDetail/12593950_1.html
http://club.jd.com/CommunityGroupDetail/12593960_1.html
http://club.jd.com/CommunityGroupDetail/12593963_1.html
http://club.jd.com/CommunityGroupDetail/12593991_1.html
http://club.jd.com/CommunityGroupDetail/12594004_1.html
http://club.jd.com/CommunityGroupDetail/12594028_1.html
http://club.jd.com/CommunityGroupDetail/12594036_1.html
http://club.jd.com/CommunityGroupDetail/12594044_1.html
http://club.jd.com/CommunityGroupDetail/12594050_1.html
http://club.jd.com/CommunityGroupDetail/12594052_1.html
http://club.jd.com/CommunityGroupDetail/12594092_1.html
http://club.jd.com/CommunityGroupDetail/12594095_1.html
http://club.jd.com/CommunityGroupDetail/12594138_1.html
http://club.jd.com/CommunityGroupDetail/12594147_1.html
http://club.jd.com/CommunityGroupDetail/12594172_1.html
http://club.jd.com/CommunityGroupDetail/12594225_1.html
http://club.jd.com/CommunityGroupDetail/12594269_1.html
http://club.jd.com/CommunityGroupDetail/12594312_1.html
http://club.jd.com/CommunityGroupDetail/12594374_1.html
http://club.jd.com/CommunityGroupDetail/12594395_1.html
http://club.jd.com/CommunityGroupDetail/12594428_1.html
http://club.jd.com/CommunityGroupDetail/12594449_1.html
http://club.jd.com/CommunityGroupDetail/12594571_1.html
http://club.jd.com/CommunityGroupDetail/12594633_1.html
http://club.jd.com/CommunityGroupDetail/12594683_1.html
http://club.jd.com/CommunityGroupDetail/12594709_1.html
http://club.jd.com/CommunityGroupDetail/12594805_1.html
http://club.jd.com/CommunityGroupDetail/12594829_1.html
http://club.jd.com/CommunityGroupDetail/12594856_1.html
http://club.jd.com/CommunityGroupDetail/12593796_1.html
http://club.jd.com/CommunityGroupDetail/12593798_1.html
http://club.jd.com/CommunityGroupDetail/12593829_1.html
http://club.jd.com/CommunityGroupDetail/12593853_1.html
http://club.jd.com/CommunityGroupDetail/12593962_1.html
http://club.jd.com/CommunityGroupDetail/12593992_1.html
http://club.jd.com/CommunityGroupDetail/12594018_1.html
http://club.jd.com/CommunityGroupDetail/12594038_1.html
http://club.jd.com/CommunityGroupDetail/12594051_1.html
http://club.jd.com/CommunityGroupDetail/12594057_1.html
http://club.jd.com/CommunityGroupDetail/12594096_1.html
http://club.jd.com/CommunityGroupDetail/12594105_1.html
http://club.jd.com/CommunityGroupDetail/12594203_1.html
http://club.jd.com/CommunityGroupDetail/12594205_1.html
http://club.jd.com/CommunityGroupDetail/12594282_1.html
http://club.jd.com/CommunityGroupDetail/12594300_1.html
http://club.jd.com/CommunityGroupDetail/12594345_1.html
http://club.jd.com/CommunityGroupDetail/12594349_1.html
http://club.jd.com/CommunityGroupDetail/12594376_1.html
http://club.jd.com/CommunityGroupDetail/12594379_1.html
http://club.jd.com/CommunityGroupDetail/12594397_1.html
http://club.jd.com/CommunityGroupDetail/12594484_1.html
http://club.jd.com/CommunityGroupDetail/12594518_1.html
http://club.jd.com/CommunityGroupDetail/12594576_1.html
http://club.jd.com/CommunityGroupDetail/12594636_1.html
http://club.jd.com/CommunityGroupDetail/12594637_1.html
http://club.jd.com/CommunityGroupDetail/12594700_1.html
http://club.jd.com/CommunityGroupDetail/12594831_1.html
http://club.jd.com/CommunityGroupDetail/12594913_1.html
http://club.jd.com/CommunityGroupDetail/12594914_1.html
http://club.jd.com/CommunityGroupDetail/12593828_1.html
http://club.jd.com/CommunityGroupDetail/12593830_1.html
http://club.jd.com/CommunityGroupDetail/12593961_1.html
http://club.jd.com/CommunityGroupDetail/12593971_1.html
http://club.jd.com/CommunityGroupDetail/12593995_1.html
http://club.jd.com/CommunityGroupDetail/12594005_1.html
http://club.jd.com/CommunityGroupDetail/12594016_1.html
http://club.jd.com/CommunityGroupDetail/12594085_1.html
http://club.jd.com/CommunityGroupDetail/12594086_1.html
http://club.jd.com/CommunityGroupDetail/12594097_1.html
http://club.jd.com/CommunityGroupDetail/12594107_1.html
http://club.jd.com/CommunityGroupDetail/12594112_1.html
http://club.jd.com/CommunityGroupDetail/12594120_1.html
http://club.jd.com/CommunityGroupDetail/12594122_1.html
http://club.jd.com/CommunityGroupDetail/12594204_1.html
http://club.jd.com/CommunityGroupDetail/12594223_1.html
http://club.jd.com/CommunityGroupDetail/12594296_1.html
http://club.jd.com/CommunityGroupDetail/12594316_1.html
http://club.jd.com/CommunityGroupDetail/12594350_1.html
http://club.jd.com/CommunityGroupDetail/12594372_1.html
http://club.jd.com/CommunityGroupDetail/12594452_1.html
http://club.jd.com/CommunityGroupDetail/12594459_1.html
http://club.jd.com/CommunityGroupDetail/12594579_1.html
http://club.jd.com/CommunityGroupDetail/12594598_1.html
http://club.jd.com/CommunityGroupDetail/12594711_1.html
http://club.jd.com/CommunityGroupDetail/12594811_1.html
http://club.jd.com/CommunityGroupDetail/12594861_1.html
http://club.jd.com/CommunityGroupDetail/12594944_1.html
http://club.jd.com/CommunityGroupDetail/12594974_1.html
CSV文件格式解析器的实现:从字符串Split到FSM,布布扣,bubuko.com
标签:des http 使用 os 文件 io 数据 for
原文地址:http://www.cnblogs.com/iasd923/p/3879768.html