如何将不同列的合并CSV合并?

uklbhaso  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(76)

我有多个CSV文件,我需要合并到1 CSV文件,他们都。
例如:

1.csv有如下数据:

| 卷号|名称|
| --|--|
| 1 |ABC|
| 2 |xyz|

2.csv有如下数据:

| 名称|日期|评分|言论|
| --|--|--|--|
| MNO| 2023年12月20日| 450 ||
| PQR| 2023年12月21日| 480 ||
我想要这个数据的组合CSV文件,如下所示:

Master.csv

| 卷号|名称|日期|评分|言论|
| --|--|--|--|--|
| 1 |ABC||||
| 2 |xyz||||
| | 2023年12月20日| 450 |||
| | 2023年12月21日| 480 |||
如果CSV文件中不存在特定列,则将其保留为空。
如何在C#中做到这一点?

2admgd59

2admgd591#

您可以将这两个文件读取为csv2.GetRecords<dynamic>(),并获取动态属性来创建一个新的dynamic列表,该列表包含两组标题的并集。

void Main()
{
    using var reader1 = new StringReader("Roll no,Name\n1,ABC\n2,xyz");
    using var csv1 = new CsvReader(reader1, CultureInfo.InvariantCulture);
    var records1 = csv1.GetRecords<dynamic>().ToList();

    using var reader2 = new StringReader("Name,Date,Score,Remarks\nMno,20-12-2023,450,\nPqr,21-12-2023,480,");
    using var csv2 = new CsvReader(reader2, CultureInfo.InvariantCulture);
    var records2 = csv2.GetRecords<dynamic>().ToList();
    
    IDictionary<string, object> properties1 = (IDictionary<string, object>)records1.First();
    IDictionary<string, object> properties2 = (IDictionary<string, object>)records2.First();
    
    var headings = properties1.Keys.Union(properties2.Keys);
    
    var results = ConvertRecords(records1, headings);
    results.AddRange(ConvertRecords(records2, headings));
    
    using var csvOut = new CsvWriter(Console.Out, CultureInfo.InvariantCulture);
    csvOut.WriteRecords(results);
}

public List<dynamic> ConvertRecords(IEnumerable<dynamic> records, IEnumerable<string> headings)
{
    var results = new List<dynamic>();

    foreach (var record in records)
    {
        var result = new ExpandoObject() as IDictionary<string, Object>;
        var item = (IDictionary<string, object>)record;

        foreach (var heading in headings)
        {
            if (item.ContainsKey(heading))
            {
                result.Add(heading, item[heading]);
            }
            else
            {
                result.Add(heading, string.Empty);
            }
        }

        results.Add(result);
    }
    
    return results;
}

字符串

相关问题