C#中分割包含嵌入逗號的CSV欄位
CSV檔案通常使用逗號分隔列。但是,某些列本身可能包含逗號,這在將CSV資料分割成不同的字串時會帶來挑戰。
問題:
給定一個CSV行:
<code>2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,"Corvallis, OR",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34</code>
如何將此行分割成一個字串數組,確保「Corvallis, OR」文字保留在一個欄位中?
解:
提供的正規表示式僅適用於所有逗號都在引號外或引號內的CSV資料。為了解決這個問題,請考慮使用Microsoft.VisualBasic.FileIO
命名空間中的TextFieldParser
類別。此類旨在處理分隔文件,其中某些欄位用引號括起來,而其他欄位則沒有。
代碼:
<code class="language-csharp">using Microsoft.VisualBasic.FileIO; // ... string csv = "2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,\"Corvallis, OR\",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34"; using (TextFieldParser parser = new TextFieldParser(new StringReader(csv))) { parser.HasFieldsEnclosedInQuotes = true; parser.SetDelimiters(","); while (!parser.EndOfData) { string[] fields = parser.ReadFields(); foreach (string field in fields) { Console.WriteLine(field); } } }</code>
輸出:
<code>2 1016 7/31/2008 14:22 Geoff Dalgas 6/5/2011 22:21 http://stackoverflow.com Corvallis, OR 7679 351 81 b437f461b3fd27387c5d8ab47a293d35 34</code>
注意:
使用TextFieldParser
時,需要在「新增參考.NET」標籤中新增Microsoft.VisualBasic
的參考。 程式碼也使用了using
語句來確保TextFieldParser
被正確關閉。
以上是如何在C#中使用嵌入式逗號正確拆分CSV列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!