这是我解决的程序,它将读取带有分隔符的文本文件,并使用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
声明来确保你的读者最后关闭.
你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
声明来确保你的读者最后关闭.