当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《我的StreamReader代码只读取每一行c#》经验,为你挑选了1个好方法。

这是我解决的程序,它将读取带有分隔符的文本文件,并使用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);
    }
}

Jon Skeet.. 9

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声明来确保你的读者最后关闭.



1> Jon Skeet..:

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声明来确保你的读者最后关闭.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有