将字符串存储到二维数组中

本文关键字:二维数组 存储 字符串 | 更新日期: 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++)