将字符串存储到二维数组中
本文关键字:二维数组 存储 字符串 | 更新日期: 2023-09-27 18:10:50
为了更多地学习c#,我正在尝试制作我自己的(尽管是基本的)CSV阅读器,以CSV文件为例,其中第一行有描述,然后其余行保存数值数据。
我能够找到行和元素的数量。既然我知道这两个数字,我就声明一个数组:
string [,] file_data = new string[row_count, column_count];
当我试图从CSV文件中读取值并将它们存储到二维数组中时,问题出现了:
var reader = new StreamReader(File.OpenRead(user_input_file));
for(int row_index = 0; row_index < row_count; row_count++){
for(int column_index = 0; column_index < column_count; column_index++){
var line = reader.ReadLine();
var values = line.Split(',');
// seem to be having problem here.
// It compiles but returns an unhandled exception
file_data[row_index, column_index] = values[column_index];
}
}
当我去编译代码时,我没有问题;然而,当我在终端中运行代码时,我得到以下错误:
未处理的例外:系统。NullReferenceException:对象引用没有设置为ReadCSV对象的实例。主要(系统。String[] args) [0x00000] in
:0
第一个错误
您正在循环row_count
你必须循环row_index
然后你的readline()语句在第二个循环中…
所以每次当它执行readline()语句时,它跳转到下一行。而在for循环中,您希望循环到您的row_count,这样会导致文件被读取更多的行数,并导致异常
喜欢
for(int row_index = 0; row_index < row_count; row_index++){//<= You were using row_count++
var line = reader.ReadLine();
var values = line.Split(',');
for(int column_index = 0; column_index < column_count; column_index++){
// seem to be having problem here. It compiles but returns an unhandled exception
file_data[row_index, column_index] = values[column_index];
}
}
注意:如果你不想硬编码行数,你可以使用EndOfStream
限制循环for(int row_index = 0; !reader.EndOfStream; row_index++)