簡體   English   中英

C#:如何讀取每行包含多個元素的CSV文件並放入數組?/為什么Split()不起作用?

[英]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每個添加都是這樣。 我不確定第一行跳過會如何影響我的代碼。

正如我在評論中指出的那樣, LinesIEnumerable<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.

所以LinesIEnumerable<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM