【发布时间】:2019-12-02 11:50:21
【问题描述】:
我有一个 CSV 助手的实现,它目前以传统格式读取 CSV:
Name, Address, Age
"Foo", "Foo's address", 24
"Bar", "Bar's address", 19
我使用类映射按名称将字段映射到我的 Person 对象,方法如下:
using (var reader = new StreamReader(file, Encoding.UTF8))
{
using (var csvReader = new CsvReader(reader))
{
csvReader.Configuration.RegisterClassMap<ContentMapper>();
var records = csvReader.GetRecords<Person>().ToArray();
}
}
我需要一个实现,它读取完全相同的数据,但采用垂直格式,该格式源自列名在第一列中是垂直的数据,并且数据在列而不是行中跟随。
Name, "Foo", "Bar"
Address, "Foo's address", "Bar's address"
Age, 24, 19
在保留原始映射的同时处理这种格式的 CSV 的最佳方法是什么?
【问题讨论】:
-
csv中的垂直格式应该是无关紧要的,它是分隔字段的逗号,而不是列位置
-
正是问题所在。我的类映射失败,因为“Foo”和“Bar”被视为列名(与映射不匹配)。
-
嗯,你需要知道以这种方式处理它的东西,而传统上这不是 csv 文件的工作方式
-
如果您打算使用 csvhelper,在将 csvhelper 逻辑应用到它之前先将源数据转换为预期格式可能会有所帮助。
-
我没有时间写出正确的答案,但我建议阅读每一行,然后使用 GetField 对其进行迭代,将结果存储在一个列表中。当你读完所有行后,遍历列表,写出第一个元素,然后是第二个等。这应该会给你一个“标准”的 csv,你可以正常读入