StreamReader 仅显示所选文件中的最后一项
StreamReader only displaying last item in selected file
我对此很陌生,不知道我做错了什么。
它只处理和显示一行结果,但我需要它来处理和显示文件中的所有内容。可以选择的文件是 .txt
个文件,这些文件有多个学生姓名和 3 个测试分数,供程序计算和显示平均分和字母等级,它做得很好,但每个学生只显示一个学生文件,当文件中每个文件可能有 10 个名称时。
有问题的代码是:
//VARIABLES
string gLetter = null, studentName = null;
int test1 = 0, test2 = 0, test3 = 0, avg = 0;
private void processButton_Click(object sender, EventArgs e)
{
try
{
getdata();
calculatedata();
displaydata();
resetitems();
}
catch
{
MessageBox.Show("Error");
}
}
private void getdata()
{
try
{
StreamReader inputFile;
if (openFile.ShowDialog() == DialogResult.OK)
{
inputFile = File.OpenText(openFile.FileName);
while (!inputFile.EndOfStream)
{
studentName = inputFile.ReadLine();
test1 = int.Parse(inputFile.ReadLine());
test2 = int.Parse(inputFile.ReadLine());
test3 = int.Parse(inputFile.ReadLine());
}
}
}
catch (Exception)
{
MessageBox.Show("Error");
}
}
private void calculatedata()
{
try
{
//calc avg
avg = (test1 + test2 + test3) / 3;
//find gLetter
if (avg >= 90)
gLetter = "A";
else if (avg >= 80)
gLetter = "B";
else if (avg >= 70)
gLetter = "C";
else if (avg >= 60)
gLetter = "D";
else if (avg < 60)
gLetter = "F";
}
catch
{
MessageBox.Show("Error");
}
}
private void displaydata()
{
try
{
listBox1.Items.Add(studentName + "\t" + avg.ToString("N2") + "\t" + gLetter);
}
catch (Exception)
{
MessageBox.Show("Error");
}
}
private void resetitems()
{
openFile.FileName = " ";
}
private void exitButton_Click(object sender, EventArgs e)
{
try
{
Application.Exit();
}
catch
{
MessageBox.Show("Error");
}
}
你的问题是,在方法 getData() 上,你正在读取 EOF 的所有行,但你必须将它添加到列表或调用方法内的其他方法,因为你一直在覆盖变量,并且你只得到最后一行
我对此很陌生,不知道我做错了什么。
它只处理和显示一行结果,但我需要它来处理和显示文件中的所有内容。可以选择的文件是 .txt
个文件,这些文件有多个学生姓名和 3 个测试分数,供程序计算和显示平均分和字母等级,它做得很好,但每个学生只显示一个学生文件,当文件中每个文件可能有 10 个名称时。
有问题的代码是:
//VARIABLES
string gLetter = null, studentName = null;
int test1 = 0, test2 = 0, test3 = 0, avg = 0;
private void processButton_Click(object sender, EventArgs e)
{
try
{
getdata();
calculatedata();
displaydata();
resetitems();
}
catch
{
MessageBox.Show("Error");
}
}
private void getdata()
{
try
{
StreamReader inputFile;
if (openFile.ShowDialog() == DialogResult.OK)
{
inputFile = File.OpenText(openFile.FileName);
while (!inputFile.EndOfStream)
{
studentName = inputFile.ReadLine();
test1 = int.Parse(inputFile.ReadLine());
test2 = int.Parse(inputFile.ReadLine());
test3 = int.Parse(inputFile.ReadLine());
}
}
}
catch (Exception)
{
MessageBox.Show("Error");
}
}
private void calculatedata()
{
try
{
//calc avg
avg = (test1 + test2 + test3) / 3;
//find gLetter
if (avg >= 90)
gLetter = "A";
else if (avg >= 80)
gLetter = "B";
else if (avg >= 70)
gLetter = "C";
else if (avg >= 60)
gLetter = "D";
else if (avg < 60)
gLetter = "F";
}
catch
{
MessageBox.Show("Error");
}
}
private void displaydata()
{
try
{
listBox1.Items.Add(studentName + "\t" + avg.ToString("N2") + "\t" + gLetter);
}
catch (Exception)
{
MessageBox.Show("Error");
}
}
private void resetitems()
{
openFile.FileName = " ";
}
private void exitButton_Click(object sender, EventArgs e)
{
try
{
Application.Exit();
}
catch
{
MessageBox.Show("Error");
}
}
你的问题是,在方法 getData() 上,你正在读取 EOF 的所有行,但你必须将它添加到列表或调用方法内的其他方法,因为你一直在覆盖变量,并且你只得到最后一行