如何在c#中正确获取csv文件头?为同一代码获得不同的结果
我想从csv文件(我在其他帖子中看到FileHelpers应该是好的,但在我的情况下它不是一个选项…)中提取标题数据(要清楚:我指的是包含列名的文件的第一行),它可以工作,但我仍然有问题 我想读取以下格式的文件(很抱歉格式不好,我不知道如何在这里使它更漂亮): 我使用以下代码来实现这一点:如何在c#中正确获取csv文件头?为同一代码获得不同的结果,c#,csv,filereader,C#,Csv,Filereader,我想从csv文件(我在其他帖子中看到FileHelpers应该是好的,但在我的情况下它不是一个选项…)中提取标题数据(要清楚:我指的是包含列名的文件的第一行),它可以工作,但我仍然有问题 我想读取以下格式的文件(很抱歉格式不好,我不知道如何在这里使它更漂亮): 我使用以下代码来实现这一点: string [] csvHeader; using (CsvReader csv = new CsvReader(file.OpenText(), true, ',')) { if (!csv.Get
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());
}
现在我的问题是:
csvHeader =csv.GetFieldHeaders().ToString().Split(',');
using CsvFile;
using LumenWorks.Framework.IO.Csv;
请注意,该库现在已经很旧了,但它仍然可以使用那里的示例代码:
using System.IO;
using LumenWorks.Framework.IO.Csv;
void ReadCsv()
{
// open the file "data.csv" which is a CSV file with headers
using (CsvReader csv =
new CsvReader(new StreamReader("data.csv"), true))
{
int fieldCount = csv.FieldCount;
string[] headers = csv.GetFieldHeaders();
while (csv.ReadNextRecord())
{
for (int i = 0; i < fieldCount; i++)
Console.Write(string.Format("{0} = {1};",
headers[i], csv[i]));
Console.WriteLine();
}
}
}
使用System.IO;
使用LumenWorks.Framework.IO.Csv;
void ReadCsv()
{
//打开文件“data.csv”,这是一个带有标题的csv文件
使用(CsvReader csv)=
新的CsvReader(新的StreamReader(“data.csv”),真)
{
int fieldCount=csv.fieldCount;
string[]headers=csv.GetFieldHeaders();
而(csv.ReadNextRecord())
{
对于(int i=0;i
为什么在检索标头时需要获取第一个元素“[0]”?这对我来说毫无意义
注释中有一些关于文件的整个第一行如何进入数组0的闲聊。我不确定这怎么可能,因为:
- 您已经在问题中粘贴了一个文件示例,它确实包含逗号
- csv代表逗号分隔的值
- 默认情况下,csv阅读器使用逗号作为拆分器
- 第一行以“或其他引号字符开头,因此被视为单个值->文件已损坏,请修复文件或更改读取器使用的引号字符
- 该文件不使用真正的ascii逗号作为分隔符,但可能使用其他看起来像逗号的Unicode字符;修复该文件或为读取器指定实际分隔符
- 读卡器库在默认情况下不使用逗号拆分(很难相信),因此在csv读卡器的构造函数中,在True之后指定逗号
csvHeader =csv.GetFieldHeaders().ToString().Split(',');
csvHeader=csv.GetFieldHeaders().ToString().Split(',')
因为这在星期天的一个月内永远不会起作用。GetFieldHeaders返回一个字符串数组作为标头。在字符串数组上调用ToString将给出对象的类型,在本例中为“System.String[]“,它不包含标题和逗号,所以用逗号拆分它是完全无用的,而且是错误的 您想要数组还是字符串?我正在尝试将标题字段保存到我的字符串数组
csvHeader=csv.GetFieldHeaders()代码>?我不确定您使用的是什么库,但是GetFieldHeaders
方法返回一个列表或数组或其他东西是有意义的。只要分配它,如果它是另一种IEnumerable
调用.GetFieldHeaders().ToArray()
你正在使用的库的文档在哪里?我猜这个库正在寻找一个不同的定界器,而不是,
。也许你应该试试CsvHelper,图书馆,至少很容易找到它的文档谢谢你详细的回答并指出,图书馆有些过时了!我将尝试更新问题,并尝试您的建议