如何从文本文件中读取然后计算平均值
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
看起来像这样:
所以我假设您没有二进制文件...
我计划从文本文件中读取分数,然后根据之前代码中写入的数据计算平均分数。我无法读取标记,也无法计算有多少标记,因为 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
看起来像这样:
所以我假设您没有二进制文件...