我有以下代码:
public static Array readCVS(string absolutePath)
{
string[,] temperatureMatrix = new string[384, 288];
string value;
using (TextReader fileReader = File.OpenText(absolutePath))
{
var csv = new CsvReader(fileReader);
csv.Configuration.HasHeaderRecord = false;
int y = 1;
while (csv.Read())
{
for (int x = 1; csv.TryGetField<string>(x, out value); x++)
{
x = x - 1;
temperatureMatrix[1, 1] = value;
}
y = y + 1;
}
return temperatureMatrix;
}
}
所以return t;
不起作用,我的意思是它不返回数组,我也尝试在这里设置断点,然后我看不到填充数组的结构
答案 0 :(得分:1)
您的代码似乎在for中进入无限循环,用于读取由CsvReader提取的行的列值。
我认为您应该更改代码以删除for循环中x的减量(不清楚该行的原因但肯定不允许x前进到输入行的下一列)。 / p>
最后你应该正确使用y(对于行)和x(对于列)来设置矩阵的值
public static Array readCVS(string absolutePath)
{
string[,] temperatureMatrix = new string[384, 288];
string value;
using (TextReader fileReader = File.OpenText(absolutePath))
{
var csv = new CsvReader(fileReader);
csv.Configuration.HasHeaderRecord = false;
int y = 0;
while (csv.Read())
{
for (int x = 0; csv.TryGetField<string>(x, out value); x++)
temperatureMatrix[x, y] = value;
y = y + 1;
}
return temperatureMatrix;
}
}
我还将x和y的初始索引从1更改为0。在网络数组中(也是多维数组)从索引0开始而不是1。
另请注意,此代码非常依赖于输入文件的确切结构。如果您获得的文件超过288行或单行超过384个单个临时值,则代码将崩溃,索引超出范围异常。
答案 1 :(得分:0)
史蒂夫指出,你的代码似乎在许多地方都是不正确的。
我想指出一件事,更好的是使用List
而不是Array
,因为如果你有大文件,你将获得索引超出范围的异常。而List
会给你无限的长度。
public static List<string> readCVS(string absolutePath)
{
List<string> result = new List<string>();
string value;
using (TextReader fileReader = File.OpenText(absolutePath))
{
var csv = new CsvReader(fileReader);
csv.Configuration.HasHeaderRecord = false;
while (csv.Read())
{
for (int i = 0; csv.TryGetField<string>(i, out value); i++)
{
result.Add(value);
}
}
}
return result;
}
我不知道你为什么在代码中使用y
。这没用,我们只是递减它。