C# c:如何读取每行包含多个元素的CSV文件并放入数组?/为什么Split()不起作用?

C# c:如何读取每行包含多个元素的CSV文件并放入数组?/为什么Split()不起作用?,c#,arrays,csv,split,element,C#,Arrays,Csv,Split,Element,因此,一个研究人员正在寻找解决方案,一些人已经提出了问题,但我不确定他们的答案是否适用于我?我复制了此代码并将其粘贴到我的类的一个构造函数中: var Lines = File.ReadLines("C:\\Users\\k20\\Source\\Repos\\TS_Webform\\TS_Webform\\Forms\\emails.csv").Select(a => a.Split(';')); var CSV = from line in Lines select (line.Spl

因此,一个研究人员正在寻找解决方案,一些人已经提出了问题,但我不确定他们的答案是否适用于我?我复制了此代码并将其粘贴到我的类的一个构造函数中:

var Lines = File.ReadLines("C:\\Users\\k20\\Source\\Repos\\TS_Webform\\TS_Webform\\Forms\\emails.csv").Select(a => a.Split(';'));
var CSV = from line in Lines select (line.Split(',')).ToArray(); //error on "Split"
我收到以下错误消息:

错误CS1061“string[]”不包含“Split”的定义,并且找不到接受“string[]”类型的第一个参数的扩展方法“Split”。是否缺少using指令或程序集引用

写入我的csv文件时,将完全跳过第一行,然后第2行及以后将写入5个元素:example@example.com,例如,1555555123456789001234567890
每一次添加都是这样的。我不确定跳过的第一行将如何影响我的代码。

错误是因为您在第一行上已经调用过一次split:

var Lines = 
    File
    .ReadLines("C:\\Users\\k20\\Source\\Repos\\TS_Webform\\TS_Webform\\Forms\\emails.csv")
    .Select(a => a.Split(';')); // <--- This is causing your problem.

在此之后,csv将按字符串[]类型显示。但正如我所说的,如果您怀疑您的值可能包含逗号,这将是不够的。检查其中一个NuGet软件包。

错误是因为您在第一行中已经调用过一次split:

var Lines = 
    File
    .ReadLines("C:\\Users\\k20\\Source\\Repos\\TS_Webform\\TS_Webform\\Forms\\emails.csv")
    .Select(a => a.Split(';')); // <--- This is causing your problem.

在此之后,csv将按字符串[]类型显示。但正如我所说的,如果您怀疑您的值可能包含逗号,这将是不够的。检查一个NuGet包。

正如我在评论中指出的,行是IEnumerable,而不是IEnumerable,因为您调用的是Split';'最后

要解决此问题,您可以使用SelectMany,它将捕获第一次拆分中的所有项目“;”并将它们添加到行列表中:

或者,如果您知道只需要原始拆分中的第一项,则可以使用索引语法[0]进行选择:


也可以考虑使用一个库,比如解析CSV文件。如果您不确定文件的内容,拆分可能会导致一些问题。

正如我在评论中指出的,行是IEnumerable,而不是IEnumerable,因为您正在调用拆分“;”最后

要解决此问题,您可以使用SelectMany,它将捕获第一次拆分中的所有项目“;”并将它们添加到行列表中:

或者,如果您知道只需要原始拆分中的第一项,则可以使用索引语法[0]进行选择:


也可以考虑使用一个库,比如解析CSV文件。如果您不确定文件的内容,拆分可能会导致一些问题。

在第一行,尝试用实际类型替换var,您会发现问题所在……提示:行是IEnumerable,而不是IEnumerable,因为您正在调用拆分“;”在endEach行,您得到的字符串[]不是字符串,因为您在Selecta=>a.split';'中进行了拆分在第一行中,尝试用实际类型替换var,您将看到问题所在……提示:行是IEnumerable,而不是IEnumerable,因为您正在调用Split“;”在endEach行,您得到的字符串[]不是字符串,因为您在Selecta=>a.split';'中进行了拆分所以我应该删除它吗?@KevinSerrano-好吧,就像我说的,如果你确定这不是一个问题,那就太棒了。即使您怀疑这可能是一个问题,您仍然应该能够整理一些边缘案例,可能不仅仅是使用LINQ。否则,请检查NuGet。顺便问一下,你为什么要在“;”上分手在第一行?我只是复制了那个代码,我不知道是怎么回事。我不知道selecta=>a.Split是什么意思,我假设这就像在java中使用分隔符一样,或者from line in line做了什么。我只是觉得我应该把不适合我的东西换成适合我的东西。@KevinSerrano-好吧,那就放弃吧。只有在需要在“;”上拆分行时,才需要该选项然后在“,”上拆分。检查我的更新,这可能对你有用。所以我应该删除它?@KevinSerrano-好吧,就像我说的,如果你确定这不会是一个问题,那就太棒了。即使您怀疑这可能是一个问题,您仍然应该能够整理一些边缘案例,可能不仅仅是使用LINQ。否则,请检查NuGet。顺便问一下,你为什么要在“;”上分手在第一行?我只是复制了那个代码,我不知道是怎么回事。我不知道selecta=>a.Split是什么意思,我假设这就像在java中使用分隔符一样,或者from line in line做了什么。我只是觉得我应该把不适合我的东西换成适合我的东西。@KevinSerrano-好吧,那就放弃吧。只有在需要在“;”上拆分行时,才需要该选项然后在“,”上拆分。检查我的更新,这可能对你有用。
var Lines = File
    .ReadLines(@"C:\Users\k20\Source\Repos\TS_Webform\TS_Webform\Forms\emails.csv")
    .SelectMany(a => a.Split(';'));
var Lines = File
    .ReadLines(@"C:\Users\k20\Source\Repos\TS_Webform\TS_Webform\Forms\emails.csv")
    .Select(a => a.Split(';')[0]);