繁体   English   中英

我的StreamReader代码仅每隔一行读取c#

[英]My StreamReader code is reading only every other line c#

这是我解决的程序,它将读取带有定界符的文本文件,并使用datagridview将数据传输到表中。

现在,我很难过,因为while循环仅读取每隔一行。

这是我的代码:

private void Form1_Load(object sender, EventArgs e)
{

    TextReader tr = new StreamReader("aplusixdata.txt");
    string[] columns = {"School","Room No.","Student No.","Excercise No.","Problem No.",
                                   "Nth Problem Taken","Date","Time","Excercise Degree",
                                   "Action No.","Duration","Action","Error","Etape",
                                   "Expression","Etat","Cursor Location","Selection",
                                   "Equivalence","Resolution","Empty"};

    while (tr.ReadLine() != null)
    {
        int i = 0;                
        char[] delimiterChar = { ';' };
        string words = tr.ReadLine();
        text = words.Split(delimiterChar);
        DataRow row = t.NewRow();
        foreach (String data in text)
        {
            //System.Console.WriteLine(data);
            System.Console.WriteLine(i);
            row[columns[i]] = data;
            i++;
        }
        t.Rows.Add(row);
    }
}

您在每次迭代中都两次调用ReadLine在这里一次:

while (tr.ReadLine() != null)

然后在这里:

string words = tr.ReadLine();

将其更改为每个迭代仅读取一次:

char[] delimiterChar = { ';' };

string words;
while ((words = tr.ReadLine()) != null)
{
    int i = 0;                
    text = words.Split(delimiterChar);
    ...
}

(请注意,我还拉了创建char[]圈外的-真的没有必要做在每个迭代上我个人使它成为一个私有静态变量)。

其他一些风格要点:

  • 您的text变量在哪里声明? 为什么不在循环本身中声明它?
  • 我会忽略row的声明和第一次分配:

     DataRow row = t.NewRow(); 

编辑:根据shahkalpesh的回答,您确实应该使用using语句来确保您的读者在最后关闭。

那是因为您要两次拨打ReadLine

更好的方法可能是:
while (!tr.EndOfStream)

编辑:最好将代码包含在using子句中。

using (TextReader tr = new StreamReader("aplusixdata.txt"))
{
  //.. your code here that reads the file line by line
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM