从 .csv 读取、计算、写入 .csv

Read from .csv, calculate, write on .csv

我正在为 C# 使用 csv reader。 这是我的 Record class

internal class Record
{
    int _y;
    int _x;
    [Name("y")]
    public int y { get; set; }
    [Name("x")]
    public int x { get; set; }
    
    public int getSum()
    {
        return _x+_y;
    }
}

然后,我尝试读取多个 .csv 文件并将聚合写入 1 个 .csv 文件

using (var writer = new StreamWriter(SaveTxt.Text))
            using (var csvOut = new CsvWriter(writer, CultureInfo.InvariantCulture))
            {
                for (int i = 0; i < Int16.Parse(numberFile); i++)
                {
                    using (var reader = new StreamReader(files[i]))
                    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
                    {
                        var records = csv.GetRecords<Record>();
                        csvOut.WriteRecords(records);
                        
                    }
                }
            }

但结果只显示 xy 数据。不显示 getSum() 函数的结果。我应该怎么做才能在写入其他 .csv 之前操作我从 .csv 读取的数据?

我相信 CsvReader 正在写入 X 和 Y,因为它们是属性;它不会调用方法并将它们的结果包含在文件中。将 getSum 方法转换为 属性,它应该出现在文件中。您可能还必须给它一个名称属性。这是固定的记录 class:

internal class Record
{
    
    
    [Name("y")]
    public int X { get; set; }
    [Name("x")]
    public int Y { get; set; }

    [Optional]
    [Name("sum")]
    public int Sum { get { return X + Y; } set; } }
}

(请注意,在 c# 中,我们编写的属性和方法名称以大写字母开头..)

我删除了你的 _x 和 _y,因为它们什么也没做;它们没有连接到 x 和 y 属性,它们的默认值始终为 0,因此将它们用于求和也将是 0


你问在写入数据之前如何操作数据;在这两行之间输出一些代码:

var records = csv.GetRecords<Record>();

//put code here

csvOut.WriteRecords(records);

应该是class记录的问题。 GetSum() 是一个函数,函数不会被序列化。 xy 是属性(正如您可以在 { get; set; } 上指出的那样)并将被序列化。 您可以像这样将函数更改为 属性:

public int GetSum
{
    get
    {
        return _x+_y;
    }
}

下一个问题是 _x_y 变量永远不会设置值。所以 GetSum 总是 return 0.