【问题标题】:Deserializing csv with unknown headers to a List or Array将带有未知标头的 csv 反序列化为列表或数组
【发布时间】:2018-12-14 01:33:29
【问题描述】:

我的问题与其他 SO 问题不同,因为这些反序列化示例适用于 typed<Customer> POCO class,在我的场景中,我没有提前准备任何类型。正在从各种来源将文件放入文件夹中。

如果没有类型或标头信息,我将如何将具有未知标头的 CSV 文件反序列化/读取到列表、JSON 数组或可枚举(我不需要数据表)

using System;
using System.Data;
using System.Collections;
using System.Linq;
using ChoETL;
using System.Text;

public class Program
{
    public static void Main()
    {
        //headers are not known in the SourceFile.csv - i need a list and headers
        //var csvLisFromCho = new ChoCSVReader(@"SourceFile.csv").WithFirstLineHeader();

        StringBuilder csvIn = new StringBuilder(@"ID,Name
        1, David
        2, Bob");
        using (var r = new ChoCSVReader(csvIn).WithFirstLineHeader())
        {
            var list = r.Select(r1 => r1.Values).ToList();
            Console.WriteLine("Coverted List from Raj");
            list.ForEach(Console.WriteLine);
        }

    }
}

【问题讨论】:

  • “反序列化”在这里可能是错误的词......或者它可能是“CSV”。 CSV 数据也是序列化数据会很奇怪。您提到 JSON 数组作为直接目标,听起来它可能根本不是 CSV。
  • 我上次查看时不需要标题来解析 CSV
  • 这与标题无关,我的 csv 文件可能有也可能没有标题。我需要从 CSV 获取列表
  • 你试过什么? FileHelpersChoetl 文档页面上有明确的示例。
  • @shamp00 请查看您的链接并再次阅读我的问题,如果是类型化 POCO 类的反序列化,在我的场景中,我没有提前任何类型。

标签: c# csv filehelpers excel-reader choetl


【解决方案1】:

开始,从 CSV 获取列表

StringBuilder csvIn = new StringBuilder(@"ID,Name
1, David
2, Bob");

using (var r = new ChoCSVReader(csvIn)
    .WithFirstLineHeader()
    )
{
    var list = r.Select(r1 => r1.Values).ToList();
}

更新:

要获取标题,请将记录转换为 IDictionary 并使用其上的 Keys 属性来获取键。

为了自动发现 CSV 列的数据类型,您必须在解析器上设置 MaxScanRows。否则所有列都将被视为字符串类型。

StringBuilder csvIn = new StringBuilder(@"ID,Name,Date
1, David, 1/1/2018
2, Bob, 2/12/2019");

using (var r = new ChoCSVReader(csvIn)
    .WithFirstLineHeader()
    .WithMaxScanRows(2)
    )
{
    foreach (IDictionary<string, object> rec in r.Take(1))
    {
        foreach (var kvp in rec)
            Console.WriteLine($"{kvp.Key} - {r.Configuration[kvp.Key].FieldType}");
    }
}

【讨论】:

  • 会在列表中创建日期类型,还是JSON数组,头信息存储在哪里,是否有get headers函数
  • dotnetfiddle.net/LnN18g 好像不行,用代码,我把它放在小提琴上
  • 效果很好,标记为答案,不确定为什么我的问题被否决,将删除。 r.configuration 是关键:")
猜你喜欢
  • 2015-04-13
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-17
  • 2022-07-21
  • 1970-01-01
相关资源
最近更新 更多