繁体   English   中英

C#来自txt文件的值的总和

[英]C# Sum of values from txt file

如何从“Values.txt”中获取值的总和? 以及如何显示它? 我对编码很陌生,这是一个入门级的编码课程。

static void Main(string[] args)
{
    StreamReader myReader = new StreamReader("Values.txt");
    string line = "";

    while (line != null)
    {
        line = myReader.ReadLine();
        if (line != null)
            Console.WriteLine(line);
    }
}

假设文本文件只包含整数,每行一个。 我没有为此使用 LINQ,因为您才刚刚开始,最好先了解正常循环并先进行解析。 这种方式也不能容忍坏数据:

//read all the file into an array, one line per array entry
string[] lines = File.ReadAllLines(@"c:\temp\values.txt");

//declare a variable to hold the sum
int sum = 0;

//go through the lines one by one...
foreach(string line in lines)
  //...converting the line to a number and then adding it to the sum
  sum = sum + int.Parse(line);

//print the result
Console.WriteLine("sum is " + sum);

并与我们现在使用 LINQ 和其他代码缩短编写的方式进行比较:

var lines = File.ReadAllLines(@"c:\temp\values.txt");
var sum = lines.Sum(e => int.TryParse(e, out int x) ? x : 0);
Console.WriteLine($"sum is {sum}");

后一种形式使用 TryParse 来容忍坏数据。 不要把这段代码当作你的作业——你的主管肯定知道是其他人写的; 内联条件、LINQ、字符串插值、速记输出变量和 var 声明等都是您不会在编程 101 中涵盖的内容,仅供参考和您自己的好奇心:)

您已经获得了从文件中读取每一行的准系统,因此您现在需要做的是将这些行解析为整数。 假设每一行只是一个数字,您可以执行以下操作:

您要做的是声明一个变量,一个存储总和的整数(您可以更改它),从 0 开始。然后,在 null check if 块中,您可以输入以下内容:

// Check whether the line is an integer.
if (Int32.TryParse(line, out int parseValue) {
    // Add the value to the sum.
    sum += parseValue;
}

这是我对单行代码的尝试。

ReadAllLines 将所有行读入一个字符串数组。 您可以在数组上使用内置方法 .Sum() 将所有数字相加,但由于数组由字符串组成,我们可以使用 int.Parse() 将字符串转换为整数。

ReadAllLines 的定义
Array.Sum() 的定义

现在既然我们知道如何从文件中读取所有行并将它们转换为数字,我们可以使用语句Sum(x => int.Parse(x)) .. 这意味着,将字符串解析为数字并将它们相加都起来。

int sum = File.ReadAllLines(@"C:\temp\numbers.txt").Sum(x => int.Parse(x));
Console.WriteLine(sum);
// sum = 29

numbers.txt 文件有内容:

10
10
2
2
2
3

详细流程:

  • File.ReadAllLines(FilePath)生成字符串数组。 我们可以在数组上运行各种进程,如 Sum、Count、Average 等。
  • (x => int.Parse(x))本身根据字符串数组中的each line (由 x 表示(x => int.Parse(x))生成一个数字数组。 如果我们能得到数字数组,我们可以使用 Sum(arrayOfNumbers) 的方法
  • Array.Sum(x => int.Parse(x))生成单个数字,它是 Array 的所有数字的总和。

首先,您需要读取文件并获取所有行。 然后循环每一行并检查它是否为数字,然后添加。

 string[] strNumbers = System.IO.File.ReadAllLines(@"C:\MyFolder\Values.txt");
 int count = 0;
 foreach (string strNumber in strNumbers)
 {
   if (Int32.TryParse(strNumber, out int number)) 
   {
      count = count + number;
   }
}

Console.WriteLine("Total : " +count);
var sum = File.ReadLines("Values.txt")
    .Select(line => Convert.ToInt32(line))
    .Sum();
Console.WriteLine(sum);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM