【发布时间】:2020-07-03 06:48:15
【问题描述】:
我想从 csv 文件中提取标题数据(要清楚:我的意思是文件的第一行包含列名)(我从其他帖子中看到 FileHelpers 应该是好的,但在我的情况下,这不是一个选择......)它可以工作,但我仍然有问题。
我想读取以下格式的文件(抱歉格式错误,我不知道如何使它更漂亮):
header1,header2,header3
data1,data2,data3
我正在使用以下代码来实现这一点:
string [] csvHeader;
using (CsvReader csv = new CsvReader(file.OpenText(), true, ','))
{
if (!csv.GetFieldHeaders().Any())
throw new Exception("header of file empty \n" + file.FullName);
csvHeader = csv.GetFieldHeaders()[0].ToString().Split(',');
if (!CompareArrays(csvHeader, expHeaderFormat))
throw new MalformedCsvException("Csv Headers don't match! \n CsvHeader: " + csvHeader.ToString() + "\n Expected format: " + expHeaderFormat.ToString());
}
现在我的问题:
-
为什么在检索标头时需要获取第一个元素“[0]”?这对我来说没有意义。
-
- 仅适用于我的一个文件,当在另一个文件上尝试它时,它的格式完全相同(在我看来),所有的突然,当我访问 [0] 时,我得到了标题的第一个元素。这是我所期望的行为,但现在由于某种原因我无法读出整个标题。
-
为什么不能只执行以下操作来检索整个第一行,因为根据文档“GetFieldHeaders()”返回一个字符串数组,所以这对我来说很有意义:
csvHeader =csv.GetFieldHeaders().ToString().Split(',');
我希望这足以继续解决我的问题......
编辑:我正在使用以下库
using CsvFile;
using LumenWorks.Framework.IO.Csv;
【问题讨论】:
-
你想要一个数组还是字符串?
-
我正在尝试将标题字段保存到我的字符串数组中
-
csvHeader = csv.GetFieldHeaders();?我不确定您使用的是什么库,但是GetFieldHeaders方法返回一个列表或数组或其他东西是有意义的。只要分配它,如果它是某种其他类型的IEnumerable调用.GetFieldHeaders().ToArray() -
你正在使用的这个库的文档在哪里?
-
我的猜测是这个库正在寻找一个不同于
,的分隔符。也许你应该试试 CsvHelper 库,至少它很容易找到它的文档
标签: c# csv filereader