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

5

首先,我对编码非常陌生,是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]);
}

3
这段代码没有读取逗号之间缺失的值 - 请先阅读[ask]和[mcve],然后展示相关的代码。 - CodeCaster
1
如何获取 read[] - Jacky
StreamReader sr = new StreamReader("文档路径"); 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]); } - Burak
抱歉回答比较复杂,我无法正确编写读取代码。 - Burak
你明确地跳过了空条目,这使得计算索引变得困难。只需省略该可选参数即可:read = data.Split(seperators);这将包括您的 CSV 输入中的空部分。 但请确保在尝试解析空字符串时不会遇到异常。 - Simon D.
3个回答

8

这一行

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);

0

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

然而,由于这是默认参数,因此您可以简单地使用:

read = data.Split(seperators);

0
错误出现在这一行:
 read = data.Split(seperators,StringSplitOptions.RemoveEmptyEntries);

你要告诉它删除空值,而保留缺失的值。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接