我试图通过循环并将CSV放入2D数组。。
我的应用程序由于抛出一个var tokens = sr.ReadLine().Split(',');而使崩溃我怎么才能解决这个问题?
下面是我的整个方法,名为csvToArray
public string[,] csvToArray (string filePath)
{
int col = colCount(filePath);
int row = rowCount(filePath);
string line;
string[,] data = new string[col, row];
using (StreamReader sr = new StreamReader(filePath))
{
for (int i = 0; i < col; i++)
{
var tokens = sr.ReadLine().Split(',');
for (int j = 0; j < row; j++)
{
data[i, j] = tokens[j];
}
}
}
return data;
}没有意义的是,它完成了整个循环。异常下面的变量具有本应具有的值。

发布于 2017-01-23 09:49:10
您必须首先对行使用for循环,然后对列使用内环。
public static string[,] csvToArray(string filePath)
{
int col = colCount(filePath);
int row = rowCount(filePath);
string line;
string[,] data = new string[row, col];
using (StreamReader sr = new StreamReader(filePath))
{
for (int i = 0; i < row; i++)
{
var tokens = sr.ReadLine().Split(',');
for (int j = 0; j < col; j++)
{
data[i, j] = tokens[j];
}
}
}
return data;
}在您的代码中,您正在执行null.Split(),这就是它给您异常的原因。
如果要为空行在每个单元格中插入0,则可以实现以下代码。
for (int i = 0; i < row; i++)
{
string content = sr.ReadLine();
if (!string.IsNullOrEmpty(content))
{
var tokens = content.Split(',');
for (int j = 0; j < col; j++)
{
data[i, j] = tokens[j];
}
}
else
{
for (int j = 0; j < col; j++)
{
data[i, j] = "0";
}
}
}发布于 2017-01-23 09:50:30
让我们先分析一下你的例子中的错误。
1)为什么你要知道乞讨中行和列的长度?就在头顶上。
2)循环中的行和列无效。
3)此异常抛出您的示例,因为您达到了EOF。
因此,下面是将csv读入2D矩阵的更好方法:
public int[][] csvToArray (string filePath)
{
string line = null;
var result = new List<int[]>();
using (var sr = new StreamReader(filePath))
{
while((line = sr.ReadLine()) != null)
{
if(string.IsNullOrWhiteSpace(line)) continue;
result.Add(sr.Split(',').Select(x=> string.IsNullOrWhiteSpace(x) ? 0 : int.Parse(x)).ToArray());
}
}
return result.ToArray();
}然后你可以检查你的矩阵是否一致。至少,这样您将不会打开您的文件三次,并防止计数错误。
https://stackoverflow.com/questions/41803125
复制相似问题