[英]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.