如何从文本文件中读取然后计算平均值

How to read the from a text file then calculate an average

我计划从文本文件中读取分数,然后根据之前代码中写入的数据计算平均分数。我无法读取标记,也无法计算有多少标记,因为 BinaryReader 不允许您使用 .Length。 我试过使用数组来保存每个标记,但它不喜欢每个标记都是整数

    public static int CalculateAverage()
    {
        int count = 0;
        int total = 0;
        float average;
        BinaryReader markFile;

        markFile = new BinaryReader(new FileStream("studentMarks.txt", FileMode.Open));
        //A loop to read each line of the file and add it to the total
        {
            //total = total + eachMark;
            //count++;
        }


        //average = total / count;
        //markFile.Close();
        //Console.WriteLine("Average mark:", average);
        return 0;
    }

This is my studentMark.txt file in VS

首先,不要使用BinerayRead,你可以使用StreamReader

还有 using 语句不需要实现 close().

有一个使用 while 循环的答案,所以使用 Linq 你可以在一行中完成:

var avg = File.ReadAllLines("file.txt").ToArray().Average(a => Int32.Parse(a));
Console.WriteLine("avg = "+avg); //5

同样使用File.ReadAllLines() according too docs 文件被加载到内存中然后关闭,所以不存在内存泄漏问题或其他问题。

Opens a text file, reads all lines of the file into a string array, and then closes the file.

编辑添加使用BinaryReader阅读的方式。

首先要知道您正在阅读 txt 文件。除非您使用 BinaryWriter 创建文件,否则二进制文件 reader 将不起作用。而且,如果您要创建二进制文件,则没有一个好的做法名称 .txt.

因此,假设您的文件是二进制文件,您需要循环读取每个整数,因此这段代码应该可以工作。

var fileName = "file.txt";
if (File.Exists(fileName))
{
    using (BinaryReader reader = new BinaryReader(File.Open(fileName, FileMode.Open)))
    {
        while (reader.BaseStream.Position < reader.BaseStream.Length)
        {
            total +=reader.ReadInt32();
            count++;
        }

    }
    average = total/count;
    Console.WriteLine("Average = "+average); // 5
}

我已经使用 using 来确保文件在最后关闭。

如果您的文件只包含数字,您只需使用 ReadInt32() 即可。

此外,如果您的文件不是二进制文件,显然二进制编写器将无法工作。顺便说一句,我使用 BinaryWriter 创建的二进制 file.txt 看起来像这样:

所以我假设您没有二进制文件...