C# 从grades.txt文件读取成绩,并将最佳成绩保存到BestGrades.txt

C# 从grades.txt文件读取成绩,并将最佳成绩保存到BestGrades.txt,c#,.net,txt,C#,.net,Txt,我需要从grades.txt文件中读取最佳成绩,并将每个学生的最佳成绩保存在BestGrades.txt文件中。不幸的是,我只能在控制台上查看学生数据。 有人能帮我吗 using System; using System.IO; namespace Projekt { class Program { static void Main(string[] args) { int counter = 0;

我需要从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();
        }
    }
}

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++;
}
因此,根据您的输入,我得到了从低级到高级的有机有序输出:

3 3,Jakub,Mateja,Informatyka,3
5 1,Jan,Kowalski,Informatyka,5
6 2,Wiktoria,Prietz,Informatyka,6
我想如果您需要从高等级到低等级,只需在列表中添加
OrderBy

sortedList.OrderBy(e => e.Value)
也就是说,我建议您为数据创建一个模型对象,并将其插入到对象列表中,然后对其进行排序。好多了

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

sortedList.OrderBy(e => e.Value)