繁体   English   中英

在 C# 中使用流读取器读取 .csv 文件

[英]Read .csv file with streamreader in c#

首先,我对编码非常陌生,并且处于 c# 的初学者级别。 我查看了这些问题,但找不到我的问题的正确答案或不明白。

我有一个 .csv 文件,文件中的行如下所示。 我通过使用float longitude = float.Parse(read[1]);获得经度值但我也想在下面的例子中得到数字“3”。 在我看来,我可以通过使用float.Parse(read[12])来获得价值。 该数字位于该行的第 12 个索引中。 但我无法使用float.Parse(read[12])达到该数字。 当我使用float.Parse(read[9])时,我可以得到 3。这段代码没有读取逗号之间的缺失值。 如何读取包括缺失值在内的所有数据? 因为其他行不同,缺失值也在变化。 有些行不包含日期信息,有些不包含经度信息。

0000000,26.0000000,38.000000,30.01.2017,0,0,0,,,0,0,,3,,0,0,0,0

string[] read;
char[] seperators = { ',' };

StreamReader sr = new StreamReader("D:/xxx.csv");

string data = sr.ReadLine();

while ((data = sr.ReadLine()) != null)
{
    read = data.Split(seperators,StringSplitOptions.RemoveEmptyEntries);
    float longitude = float.Parse(read[1]);
    float latitude = float.Parse(read[2]);
}

这条线

read = data.Split(seperators, StringSplitOptions.RemoveEmptyEntries);

说:

如果有两个逗号,一个接一个,则忽略该条目

因此,您的输入变为:

0000000,26.0000000,38.000000,30.01.2017,0,0,0,0,0,3,0,0,0,0

您真正想要的是这个,它将空值留在数组中

read = data.Split(seperators, StringSplitOptions.None);

错误是此行:

 read = data.Split(seperators,StringSplitOptions.RemoveEmptyEntries);

您正在告诉它删除空值。 您想要的失踪者。 更改为

 read = data.Split(seperators,StringSplitOptions.None);

正如其他人提到的,您必须将StringSplitOptions.RemoveEmptyEntries更改为StringSplitOptions.None

但是,由于这是默认参数,您可以简单地使用:

read = data.Split(seperators);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM