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



所以a搜索了这个问题的解决方案,有些人已经问过了,但我不确定他们的答案是否对我有用?我复制了这段代码并将其粘贴到我类的一个构造函数中:

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[]' 不包含'拆分'的定义,并且找不到接受类型为'string[]'的第一个参数的扩展方法'拆分'(您是否缺少 using 指令或程序集引用?

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

正如我在评论中指出的,Lines是一个IEnumerable<string[]>,而不是一个IEnumerable<string>,因为你在最后调用Split(';')

要解决此问题,您可以使用SelectMany,它将捕获第一个Split(';')中的所有项目并将它们添加到Lines列表中:

var Lines = File
.ReadLines(@"C:Usersk20SourceReposTS_WebformTS_WebformFormsemails.csv")
.SelectMany(a => a.Split(';'));

或者,如果您知道您只需要第一项,例如,从原始拆分中,那么您可以使用索引语法 ([0](:

var Lines = File
.ReadLines(@"C:Usersk20SourceReposTS_WebformTS_WebformFormsemails.csv")
.Select(a => a.Split(';')[0]);

此外,请考虑使用库(如文件帮助程序(来分析 CSV 文件。 如果您不确定文件的内容,Split可能会导致一些问题。

错误是因为您之前已经在第一行调用了一次 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.

所以Lines是一个IEnumerable<string[]>.然后,您尝试枚举每个string[]并对其调用Split,但string[]没有这样的函数。

通常,这是解析 CSV 文件的一种幼稚方法。如果其中一个值包含逗号,会发生什么情况:

"比如,像这样">

在这种情况下,您最终会拆分您的价值。您知道自己的数据,因此您可以肯定地说这不会成为问题。如果这么好。如果没有,我会检查NuGet是否有可以帮助您解决此问题的现有包。

更新

根据您的意见,这可能就足够了:

var csv =
File
.ReadLines("C:\Users\k20\Source\Repos\TS_Webform\TS_Webform\Forms\emails.csv")
.Select(line => line.Split(','))
.ToArray();

在此之后,csv将按类型string[][].但正如我所说,如果你怀疑你的值可能包含逗号,这是不够的。检查这些 NuGet 包之一。

最新更新