【发布时间】:2018-08-10 10:45:32
【问题描述】:
我对 c# 很陌生,但我真的很想开始使用 linq 从 excel 电子表格中提取简单信息。
问这个我觉得很尴尬,但我似乎找不到解决办法。基本上,我想要的只是在 CSV 文件中找到捐赠金额的平均值。
到目前为止,这是以下代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpTest
{
class Program
{
public string Donor { get; set; }
public DateTime Date { get; set; }
public decimal Amount { get; set; }
public string Charity { get; set; }
static void Main(string[] args)
{
{
var file = "C:\\Users\\user\\Desktop\\Donations.csv".AsFile();
File.ReadAllLines(file).Select(x => x.Split('\n')).Average(x => x.Count());
}
}
}
问题是我知道这是错误的,因为我只想要 Amount 中的值。对于这样的事情,我确信我应该使用 GroupBy(),但是我似乎无法提取公共类 Amount。如果有人能指出我正确的方向,我将不胜感激。非常感谢。
【问题讨论】:
-
CSV Helper的时间?
-
您要的是每人的平均值还是整个文件的平均值?如果您想要每人或某事的平均值,您只需要分组。如果您只想要整列的平均值,则不需要分组。您需要做的是拆分
,上的每一行(而不是\n- 您已经有行),获取第三项(金额),将其解析为数字类型(例如十进制),然后应用您的平均运营商。正如其他人所说,使用 CSV 解析器可以使其中几个步骤变得更容易。 -
我一定会看看 CSV 助手,非常感谢 - @DragandDrop
-
我只是在平均一个整体之后,抱歉没有更清楚。哦,当然分开,会更有意义。当你说采取第三项时,它会是这样的:.Select(x => x[2] .....?然后它会给出一个 TryParseAs()。非常感谢@Chris 的帮助
-
@DanielLee:基本上是的,获得第三个项目将通过
x[2]或类似的方式完成。但是,请务必使用 CSV 解析器阅读以下答案。它们通常更好用。例如,如果您的第一列具有诸如“Smith, John”之类的值,那么您仅使用逗号分割的方法将不再有效,因为您需要担心该字段如何转义该逗号。使用 CSV 解析器是解决问题的更可靠的解决方案。