从 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)

也就是说,我建议您创建数据的模型对象并将其插入到对象列表中并对其进行排序。好多了。

我做的是一个概念性的解决方案,它还有改进的地方。那部分留给你。享受吧。