从 Grades.txt 文件中读取成绩并将最好的成绩保存到 BestGrades.txt
Read grades from Grades.txt file and save best grades to BestGrades.txt
我需要从Grades.txt文件中读取最好成绩,并将个别学生的最好成绩保存在BestGrades.txt文件中。不幸的是,我只能在控制台上查看学生数据。
有人可以帮助我吗?
using System;
using System.IO;
namespace Projekt
{
class Program
{
static void Main(string[] args)
{
int counter = 0;
string line;
System.IO.StreamReader file =
new System.IO.StreamReader(@"C:\Users\eryks\Desktop\Grades.txt");
while ((line = file.ReadLine()) != null)
{
System.Console.WriteLine(line);
counter++;
}
file.Close();
}
}
}
Console, and Grade.txt
Grades.txt:
1,Jan,Kowalski,Informatyka,5
2,Wiktoria,Prietz,Informatyka,6
3,Jakub,Mateja,Informatyka,3
id,name,lastname,school subject,grade
因此,您的问题是要求在不提及模型的情况下订购成绩,我假设您的成绩是 CSV 文件每一行中的最后一个值。所以我选择了一个简单的解决方案是使用 SortedList
键和值,所以成绩变成整数,你的行是字符串类型。
我已经构建了您现有代码的解决方案,并附有一些内联解释。
代码如下:
SortedList<int, string> sortedList = new SortedList<int, string>();
while ((line = file.ReadLine()) != null)
{
System.Console.WriteLine(line);
// this is to prevent parsing the header
if (!line.StartsWith("id"))
{
// Extract the grade from the line
var s = line.Substring(1 + line.LastIndexOf(",", StringComparison.Ordinal));
// Parse the grade to integer
var grade = int.Parse(s);
// Adding the grade and line to our sorted list
sortedList.Add(grade, line);
}
counter++;
}
所以让我们测试一下
foreach (var keyValuePair in sortedList)
{
var data = keyValuePair.Key;
var grade = keyValuePair.Value;
Console.WriteLine($"{data} {grade}");
}
所以根据你的输入,我得到了这个从低等级到高等级的有机有序输出:
3 3,Jakub,Mateja,Informatyka,3
5 1,Jan,Kowalski,Informatyka,5
6 2,Wiktoria,Prietz,Informatyka,6
我想如果您需要从高到低的顺序,只需将 OrderBy
添加到列表中:
sortedList.OrderBy(e => e.Value)
也就是说,我建议您创建数据的模型对象并将其插入到对象列表中并对其进行排序。好多了。
我做的是一个概念性的解决方案,它还有改进的地方。那部分留给你。享受吧。
我需要从Grades.txt文件中读取最好成绩,并将个别学生的最好成绩保存在BestGrades.txt文件中。不幸的是,我只能在控制台上查看学生数据。 有人可以帮助我吗?
using System;
using System.IO;
namespace Projekt
{
class Program
{
static void Main(string[] args)
{
int counter = 0;
string line;
System.IO.StreamReader file =
new System.IO.StreamReader(@"C:\Users\eryks\Desktop\Grades.txt");
while ((line = file.ReadLine()) != null)
{
System.Console.WriteLine(line);
counter++;
}
file.Close();
}
}
}
Console, and Grade.txt
Grades.txt:
1,Jan,Kowalski,Informatyka,5
2,Wiktoria,Prietz,Informatyka,6
3,Jakub,Mateja,Informatyka,3
id,name,lastname,school subject,grade
因此,您的问题是要求在不提及模型的情况下订购成绩,我假设您的成绩是 CSV 文件每一行中的最后一个值。所以我选择了一个简单的解决方案是使用 SortedList
键和值,所以成绩变成整数,你的行是字符串类型。
我已经构建了您现有代码的解决方案,并附有一些内联解释。
代码如下:
SortedList<int, string> sortedList = new SortedList<int, string>();
while ((line = file.ReadLine()) != null)
{
System.Console.WriteLine(line);
// this is to prevent parsing the header
if (!line.StartsWith("id"))
{
// Extract the grade from the line
var s = line.Substring(1 + line.LastIndexOf(",", StringComparison.Ordinal));
// Parse the grade to integer
var grade = int.Parse(s);
// Adding the grade and line to our sorted list
sortedList.Add(grade, line);
}
counter++;
}
所以让我们测试一下
foreach (var keyValuePair in sortedList)
{
var data = keyValuePair.Key;
var grade = keyValuePair.Value;
Console.WriteLine($"{data} {grade}");
}
所以根据你的输入,我得到了这个从低等级到高等级的有机有序输出:
3 3,Jakub,Mateja,Informatyka,3
5 1,Jan,Kowalski,Informatyka,5
6 2,Wiktoria,Prietz,Informatyka,6
我想如果您需要从高到低的顺序,只需将 OrderBy
添加到列表中:
sortedList.OrderBy(e => e.Value)
也就是说,我建议您创建数据的模型对象并将其插入到对象列表中并对其进行排序。好多了。
我做的是一个概念性的解决方案,它还有改进的地方。那部分留给你。享受吧。