将未知 headers 的 csv 反序列化为列表或数组
Deserializing csv with unknown headers to a List or Array
我的问题与其他 SO 问题不同,因为那些反序列化样本是针对 typed<Customer> POCO class
的,在我的场景中我没有提前任何类型。文件正在从各种来源放入文件夹中。
如果没有类型或 header 信息,我将如何 deserialize/read 具有未知 headers 的 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 中获取列表
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();
}
更新:
要获取 headers,请将记录转换为 IDictionary 并在其上使用键 属性 来获取键。
为了自动发现 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}");
}
}
我的问题与其他 SO 问题不同,因为那些反序列化样本是针对 typed<Customer> POCO class
的,在我的场景中我没有提前任何类型。文件正在从各种来源放入文件夹中。
如果没有类型或 header 信息,我将如何 deserialize/read 具有未知 headers 的 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 中获取列表
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();
}
更新:
要获取 headers,请将记录转换为 IDictionary 并在其上使用键 属性 来获取键。
为了自动发现 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}");
}
}