d3.js,csv表格文件的读取与显示.doc
文本预览下载声明
d3.js,csv表格文件的读取与显示
篇一:准确读取CSV文件
C#准确读取CSV格式数据
众所周知,VS框架下的程序读取表格文件可以用OLEDB像数据库一样select检索,但是对于某些符合CSV标准,而不符合表格标准的文件,用select方法会报错。毕竟它们的格式是不一样的,于是这种情况下通常采用读文本的方法来读取CSV数据,它本身就是纯文本文件。
如果文件数据的列是纯粹的数字,然后用单一符号分割(通常是逗号),那
么读取一行,直接用split()函数分割即可。但对于列包含字符串,字符串包含逗号,字符串内还可能包含引号,这样的情况,split()就无能为力了。我们先来看一下对于这种情况,可用如下代码解决: //调用示例:
Listlt;string ls=GetCsvLineData(@1999,Chevy,Venture Extended
Edition,,4900.00);//分割单行成列
public Listlt;string GetCsvLineData(string line)
{
Listlt;string ls = new Listlt;string();
bool start = false; //标记是否在块中
bool headFlag = false;//引号开头
int i=0;//指针
string part = ;//分块
while (i lt; line.Length)
{
string s = line.Substring(i, 1);
string spre = (i 0) ? line.Substring(i - 1, 1) : ,;//前一位
string snext = (i lt; line.Length - 1) ? line.Substring(i + 1,
1) : ,; //后一位
string snext2 = (i lt; line.Length - 2) ? line.Substring(i + 2,
1) : ; //后二位
if(!start)//块外
{
start = true;
headFlag = false;
if(s==,)//空块
{
ls.Add(); start = false;
}
else if(s==@)
{
if (snext == @)
{
if (snext2 == @)//开头三引号
{
i += 2; ls.Add(s); headFlag = true;
}
else if (snext2 == ,)//空字符串
{
i += 2; ls.Add(); start = false;
}
}
else
{
headFlag = true;
}
}
else
{
part += s;
}
}
else
{
if(s==@)//块内引号
{
if (snext == @ amp;amp; snext2 == ,)//引号
{
part += s; ls.Add(part);
i += 2; start = false;
}
else if (snext == @ amp;amp; snext2 == @)//三引号 {
part += s; i++;
}
else if (snext == ,)
{
if(headFlag==true)
{
ls.Add(part);part = ;
start = false; i++;
}
}
}
else if(s==,)
{
if (headFlag)
part += s;
else
{
ls.Add(part); part = ; start = false;
}
}
else
{
part += s;
}
}
i++;
}
if (part != ) ls.Add(part);
return ls;
}
CSV标准是如何规定的:
1、 以半角逗号(即,)作分隔符,列为空也要表达其存在。
2、 列内容如存在半角逗号(即,)则用半角双引号(即)将该字段值包含
起来。
3、 列内容如存在半角引号(即)则应替换成半角双引号()转义,并用
半角引号(即)将该字段值包含起来。
我们来看如下源数据:
写成CSV文件为:
1997,Ford,E350,ac, abs, moon,3000.00
1999,Chevy,Venture Extended Edition,,4900.00
1999,Chevy,Venture Extended Edition, Very Large,,5000.0
显示全部