这是我解决的程序,它将读取带有分隔符的文本文件,并使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
你ReadLine在每次迭代时都会调用两次 - 一次在这里:
while (tr.ReadLine() != null)
Run Code Online (Sandbox Code Playgroud)
在这里:
string words = tr.ReadLine();
Run Code Online (Sandbox Code Playgroud)
将其更改为每次迭代只读取一次:
char[] delimiterChar = { ';' };
string words;
while ((words = tr.ReadLine()) != null)
{
int i = 0;
text = words.Split(delimiterChar);
...
}
Run Code Online (Sandbox Code Playgroud)
(请注意,我还拉了创建char[]圈外的-真的没有必要做那个.在每个迭代上我个人使它成为一个私有静态变量).
其他几个风格点:
text变量在哪里声明?为什么不在循环中声明它呢?我会忽略声明并首先分配row:
DataRow row = t.NewRow();
Run Code Online (Sandbox Code Playgroud)编辑:根据shahkalpesh的回答,你真的应该使用一个using声明来确保你的读者最后关闭.
| 归档时间: |
|
| 查看次数: |
2592 次 |
| 最近记录: |