Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用CSVHelper读取CSV文件并需要将列提取到阵列_C#_.net_Csvhelper - Fatal编程技术网

C# 使用CSVHelper读取CSV文件并需要将列提取到阵列

C# 使用CSVHelper读取CSV文件并需要将列提取到阵列,c#,.net,csvhelper,C#,.net,Csvhelper,我这里有我想要的代码,但我是在.Net标准上开发的,不能使用Microsoft.VisualBasic.FileIO库。我希望能够使用CsvHelper 是否可以使用CsvHelper首先将标题行作为字符串数组获取。第二,将每一行作为项目的字符串数组 使用Microsoft.VisualBasic.FileIO; 使用(TextFieldParser csvParser=newtextfieldparser(“文件路径”)) { csvParser.CommentTokens=新字符串[]{“#

我这里有我想要的代码,但我是在.Net标准上开发的,不能使用
Microsoft.VisualBasic.FileIO
库。我希望能够使用
CsvHelper

是否可以使用
CsvHelper
首先将标题行作为字符串数组获取。第二,将每一行作为项目的字符串数组

使用Microsoft.VisualBasic.FileIO;
使用(TextFieldParser csvParser=newtextfieldparser(“文件路径”))
{
csvParser.CommentTokens=新字符串[]{“#”};
SetDelimiters(新字符串[]{“,”});
csvParser.HasFieldsEnclosedInQuotes=true;
csvParser.TrimWhiteSpace=true;
string[]fields=csvParser.ReadFields();
int arraySize=fields.Length;
int index=Array.IndexOf(字段,列提取);
而(!csvParser.EndOfData)
{
fields=csvParser.ReadFields();
字符串列=字段[索引];
控制台写入线(列);
}
}
我尝试了下面的代码,该代码读取单元格,但由于行
string Csv=string.Join(“\n”,result.ToArray()”),当遇到分隔符时会断行
有没有办法将所有信息放在一个数组中?它已经存储在字符串列表中,但我无法通过索引检索数据

列表结果=新列表();
字符串值;
使用(TextReader fileReader=File.OpenText(“文件路径”))
{
var csv=新的CsvReader(fileReader,CultureInfo.InvariantCulture);
csv.Configuration.HasHeaderRecord=true;
而(csv.Read())
{
for(int i=0;csv.TryGetField(i,out值);i++)
{
结果:增加(价值);
}
如果(csv.Read()==false)
打破
}
}
string Csv=string.Join(“\n”,result.ToArray());
编辑

这是我反馈后的新代码。但是,在遍历存储所有记录的列表时,似乎忽略了标题行

public List HeaderColumnParser(字符串列提取,字符串路径文件)
{
列表结果=新列表();
字符串值;
使用(TextReader fileReader=File.OpenText(PathToFile))
{
var csv=新的CsvReader(fileReader,CultureInfo.InvariantCulture);
csv.Read();
csv.ReadHeader();
字符串[]头=csv.Context.HeaderRecord;
int extractedIndex=Array.IndexOf(header,columnExtracted);
而(csv.Read())
{
字符串[]行=csv.Context.Record;
字符串列=行[extractedIndex];
结果。添加(列);
}
}
返回结果;

如果希望将每一行作为字符串数组,则此操作应该有效

使用(MemoryStream stream=new MemoryStream())
使用(StreamWriter=新StreamWriter(流))
使用(StreamReader=新StreamReader(stream))
使用(CsvReader csv=新CsvReader(reader,CultureInfo.InvariantCulture))
{
writer.WriteLine(“Id,Name,Column3,Column4,Column5”);
writer.WriteLine(“1,1,Item1,Item2,Item3”);
WriteLine(“2,2,第4项,第5项,第6项”);
writer.Flush();
流位置=0;
reader.BaseStream.Position=0;
csv.Read();
csv.ReadHeader();
字符串[]头=csv.Context.HeaderRecord;
var columnExtracted=“Column3”;
int extractedIndex=Array.IndexOf(header,columnExtracted);
而(csv.Read())
{
字符串[]行=csv.Context.Record;
var列=行[extractedIndex];
控制台写入线(列);
}
}
Console.ReadKey();

您是否要求我们将此代码转换为使用CSVHelper?没有必要。我是问是否可以使用CSVHelper,因为它缺少documentation@GotBannedSoImadeAnotherAccount如果要将值作为数组,为什么要将它们转换回字符串?CsvHelper的文档已经足够了。它展示了如何读取强类型的re跳线、单个字段、匿名对象、动态对象,甚至如何通过CsvDataReader将所有内容加载到数据表中。很可能您尝试的操作是不必要的。但此代码的作用是复制原始文件行,将
更改为
\n
@gotbanendsoimadeanotheraccount Ref您最近的nt编辑,只需在
while(csv.Read())之前添加
result.add(头[extractedIndex])
在回答问题之前,检查问题的有效性,如果是,检查是否有重复。如果你没有,我们很高兴看到你的答案:)我编辑了这个问题,以便更清楚地说明问题的内容。它只需要同行评审。@DavidSpecht我真的很欣赏这个答案。现在它有意义了。只需获取wha的索引即可t我要提取的任何列标题并传递到
csv.Context.Record
@DavidSpecht请回答最后一个问题。正在调用
csv.ReadHeader()
读取标题行,然后转到下一行,这意味着它在返回或打印时将不属于数组的一部分。是否可能以某种方式包含它,或者我遗漏了什么。@DavidSpecht好的。我批准了你的编辑。还有OP的编辑,问题更加集中。至少就我的意见而言,这已经足够了。我投票重新打开t他的问题。让我们看看:)