![](/img/trans.png)
[英]I am trying to read information from a .csv and put it into an array in C#. Can anyone tell me why the code doesn't work?
[英]c#: how to read CSV file with multiple elements per line and put in array?/ Why doesn't Split() work?
因此,在尋找解決方案的過程中,一些人已經問過,但是我不確定他們的答案對我有用嗎? 我復制了此代碼並將其粘貼到我的類的構造函數中:
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'的定義,並且找不到擴展方法'Split'接受類型為'string []'的第一個參數(您是否缺少using指令或程序集引用? )”
當寫入我的csv文件時,第一行將被完全跳過,然后第二行及之后的行將有5個這樣的元素: example@example.com,example,15555555555,1234567890,1234567890
每個添加都是這樣。 我不確定第一行跳過會如何影響我的代碼。
正如我在評論中指出的那樣, Lines
是IEnumerable<string[]>
,而不是IEnumerable<string>
,因為您在最后調用了Split(';')
。
要解決此問題,可以使用SelectMany
,它將捕獲第一個Split(';')
所有項目並將它們添加到“ Lines
列表中:
var Lines = File
.ReadLines(@"C:\Users\k20\Source\Repos\TS_Webform\TS_Webform\Forms\emails.csv")
.SelectMany(a => a.Split(';'));
或者,如果您知道僅想要第一項,例如,來自原始拆分,則可以使用索引語法( [0]
)選擇它:
var Lines = File
.ReadLines(@"C:\Users\k20\Source\Repos\TS_Webform\TS_Webform\Forms\emails.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[][]
類型string[][]
。 但是,正如我所說,如果您懷疑自己的價值觀可能包含逗號,那么這還不夠。 檢查這些 NuGet軟件包之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.