C#Streamreader阅读行不存在吗?

时间:2018-08-12 22:45:24

标签: c#

我想读取一个.csv文件,并将数据存储在数据表中,但是由于某种原因,该代码正在引发错误:

  

System.NullReferenceException:'对象引用未设置为对象的实例。'

line为空。

我已经调试并搜索错误是什么,在读取最后一行后说CSV的第194行,其中包含值,并且在读取该行之后,他将读取“ another”行195,该行为空,因为行在我的CSV文件中不存在,并且读取的内容不知道为什么。我已经尝试打开记事本并删除我得到的多余行并保存,并不断给我同样的错误-有帮助吗?

这是我的代码:

using (StreamReader sr = new streamReader(@"PATH"))
    {
        var datatable = new DataTable();
        datatable.Columns.Add("PowerPlantId", typeof(string));
        datatable.Columns.Add("AssetId", typeof(int));
        string line;

        line = sr.ReadLine();
        if (line != null)
        {
            do
            {
                line = sr.ReadLine();
                System.Diagnostics.Debug.WriteLine(line + "\n");
                string[] lineitems = line.Split(",");
                DataRow dr = datatable.NewRow();
                dr["PowerPlantId"] = lineitems[0];
                dr["AssetId"] = lineitems[1];
                datatable.Rows.Add(dr);
            } while (line != null);
        }

1 个答案:

答案 0 :(得分:3)

让我们看看您的do-while循环中发生的步骤:

  • 呼叫ReadLine()
  • 处理线路
  • 检查是否为空并重复

应该怎么做:

  • 呼叫ReadLine()
  • 检查是否为空
  • 处理线路

由于事件顺序错误,您得到NRE

您可以改为将循环更改为while

while((line = sr.ReadLine()) != null)
{
     // process line, do NOT call ReadLine!
}