【发布时间】:2013-09-14 21:51:50
【问题描述】:
我正在尝试将 CSV 文件解析为 C# 中的二维数组。我遇到了一个非常奇怪的问题,这是我的代码:
string filePath = @"C:\Users\Matt\Desktop\Eve Spread Sheet\Auto-Manufacture.csv";
StreamReader sr = new StreamReader(filePath);
data = null;
int Row = 0;
while (!sr.EndOfStream)
{
string[] Line = sr.ReadLine().Split(',');
if (Row == 0)
{
data = new string[Line.Length, Line.Length];
}
for (int column = 0; column < Line.Length; column++)
{
data[Row, column] = Line[column];
}
Row++;
Console.WriteLine(Row);
}
我的 .csv 文件有 87 行,但在执行过程中存在一个奇怪的问题,它会完全按照预期将前 15 行读入数据数组,但是当它第 16 次下降到 data[Row, column] = Line[column]; 行时它似乎只是跳出整个循环(不满足sr.EndOfStream 条件)并且不再将任何数据读入数据数组。
谁能解释一下可能发生的事情?
【问题讨论】:
-
每行的列数是否相同?列数是否等于行数?您正在将数组中的总行数初始化为 csv 第一行中的列数。
-
我以为你的 csv 文件中有一些特殊的字符。首先从 csv 中删除前 15 行,然后将其上传。如果遇到同样的错误,请回复
-
我删除了第 16 行,同样的事情发生了,我删除了第 15 行周围的几行,同样的事情发生了。它似乎只能读取 15 行代码,但现在解释了为什么以及实际上代码永远不会离开 while 循环并且之后不会执行任何操作。这是我在编程中遇到的最奇怪的事情。
-
@MattR 有 87 行,并非所有行都有相同数量的列,但是对于前 15 行,它只是完全按照预期用空白值填充空格,所以我不认为这是问题
-
第16行的列数比第一行大吗?