【问题标题】:How to add up amount of data from an external file in C# (Stream Reader)如何在 C# (Stream Reader) 中添加来自外部文件的数据量
【发布时间】:2013-11-25 12:41:10
【问题描述】:

我是这个网站的新手,对编程也很陌生,目前我正在尝试在我的捐赠列表上显示用户名的计数,然后我还想计算一个总和捐赠清单包含的总金额,如果有人可以帮助我创建一种方法来在donations.txt文件中添加捐赠者数量,这将是非常有帮助的,我不知道从哪里开始,但到目前为止这是我的编码:

        string sName;
        double dAmount;
        string sTotalNames;
        double dAmountTotal;
        double dAmountAverage;

    using (StreamReader sr = new StreamReader("Donations.txt"))
    {
        while (sr.Peek() != -1)
        {
            sName = sr.ReadLine();
            Console.WriteLine(sName);

            dAmount = Convert.ToDouble(sr.ReadLine());
            Console.WriteLine(dAmount);
        }

        Console.WriteLine("Press any key to close");
        Console.ReadKey();
    }

【问题讨论】:

  • 能否提供Donations.txt 的格式以及该样本的预期结果。
  • 其中只是写入字符串名称和双打,我使用我的 Stream Writer 获得文件,目前其中的以下信息是:Alex 50 Bob 45 Sam 90 Sarah 33 Harry 60
  • 我基本上只是想将外部文件中的字符串相加并在我的阅读器程序中显示一个总数,捐赠的金额也是如此
  • 听起来应该是像50这样的xml。

标签: c# variables loops while-loop streamreader


【解决方案1】:

假设您拥有的其他一切都正常工作,那么创建总和将非常容易。

string sName;
double dAmount;
int sTotalNames = 0;
double dAmountTotal = 0;
double dAmountAverage;

using (StreamReader sr = new StreamReader("Donations.txt"))
{
    while (sr.Peek() != -1)
    {
        sName = sr.ReadLine();
        Console.WriteLine(sName);

        dAmount = Convert.ToDouble(sr.ReadLine());
        Console.WriteLine(dAmount);
        dAmountTotal += dAmount;
        sTotalNames++;
    }
    dAmountAverage = dAmountTotal / sTotalNames;
    Console.WriteLine("Sum = {0}", dAmountTotal );
    Console.WriteLine("Total Names = {0}", sTotalNames);
    Console.WriteLine("Average Amount = {0}", dAmountAverage);
    Console.WriteLine("Press any key to close");
    Console.ReadKey();
}

【讨论】:

  • 非常感谢,这解决了我的总金额问题,知道如何计算捐赠者的数量吗?
  • 非常感谢凯文,您的回答对我很有帮助,甚至在我的平均代码中添加了,我会在允许时接受您的回答作为解决方案,再次感谢,非常感谢您帮助。
  • 是的,没问题,我想你也想要这个,因为你已经为它声明了一个变量。
  • 是的,我认为这就是你为我做这件事的原因:) 谢谢
【解决方案2】:
List<double> dAmountList = new List<double>();

using (StreamReader sr = new StreamReader("Donations.txt"))
{
    while (sr.Peek() != -1)
    {
        sName = sr.ReadLine();
        Console.WriteLine(sName);

        dAmount = Convert.ToDouble(sr.ReadLine());
        Console.WriteLine(dAmount);
        dAmountList.Add(dAmount);

    }

    double sum = dAmountList.Sum(); //here you have your sum

    int dAmountOfDonators = dAmountList.Count(); //here you have your donators total count

    Console.WriteLine("Press any key to close");
    Console.ReadKey();
}

【讨论】:

    【解决方案3】:

    快速而紧凑的实现:

    var lines = File.ReadAllLines("Donations.txt");
    
    // Convert odd rows to Double
    var amounts = lines.Where((x,i) => i % 2 == 1)
                       .Select(Convert.ToDouble)
                       .ToArray();
    
    var sum = amounts.Sum();
    var count = amounts.Count();
    

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 2013-02-06
      • 2017-09-08
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      相关资源
      最近更新 更多