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

时间:2015-09-02 00:50:17

标签: c# arrays string csv

为了更多地学习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];
        }
}

当我编写代码时,我没有问题;但是,当我在终端中运行代码时,出现以下错误:

  

未处理的例外情况:   System.NullReferenceException:对象引用未设置为ReadCSV.Main(System.String [] args)[0x00000]中&lt; filename unknown&gt;中的对象实例:0 [错误]致命未处理异常:System.NullReferenceException:对象引用未设置为ReadCSV.Main(System.String [] args)[0x00000]中&lt; filename unknown&gt;的对象实例:0

1 个答案:

答案 0 :(得分:2)

第一个错误

您正在循环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++)