Pisah lajur CSV yang mengandungi koma terbenam dalam C#
Fail CSV biasanya menggunakan koma untuk memisahkan lajur. Walau bagaimanapun, sesetengah lajur sendiri mungkin mengandungi koma, yang boleh mencipta cabaran apabila memisahkan data CSV kepada rentetan yang berbeza.
Soalan:
Diberikan baris 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>
Bagaimanakah saya boleh membahagikan baris ini kepada tatasusunan rentetan, memastikan bahawa teks "Corvallis, OR" kekal dalam satu medan?
Penyelesaian:
Ungkapan biasa yang disediakan hanya berfungsi pada data CSV dengan semua koma berada di luar atau dalam petikan. Untuk menyelesaikan masalah ini, pertimbangkan untuk menggunakan kelas Microsoft.VisualBasic.FileIO
dalam ruang nama TextFieldParser
. Kelas ini direka bentuk untuk mengendalikan fail terhad di mana sesetengah medan disertakan dalam petikan dan yang lain tidak.
Kod:
<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>
Output:
<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>
Nota:
Apabila menggunakan TextFieldParser
, anda perlu menambah rujukan kepada Microsoft.VisualBasic
dalam tab "Tambah Rujukan.NET". Kod ini juga menggunakan pernyataan using
untuk memastikan TextFieldParser
ditutup dengan betul.
Atas ialah kandungan terperinci Bagaimana cara memecah lajur CSV dengan koma tertanam di C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!