Diberikan
2,1016,7 / 31/2008 14:22, Geoff Dalgas, 6/5/2011 22:21, http://stackoverflow.com , "Corvallis, OR", 7679.351,81, b437f461b3fd27387c5d8ab47a293d35,34
Cara menggunakan C # untuk membagi informasi di atas menjadi string sebagai berikut:
2
1016
7/31/2008 14:22
Geoff Dalgas
6/5/2011 22:21
http://stackoverflow.com
Corvallis, OR
7679
351
81
b437f461b3fd27387c5d8ab47a293d35
34
Seperti yang Anda lihat salah satu kolom berisi, <= (Corvallis, OR)
// update // Berdasarkan C # Regex Split - koma di luar tanda kutip
string[] result = Regex.Split(samplestring, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
Jawaban:
Gunakan
Microsoft.VisualBasic.FileIO.TextFieldParser
kelas. Ini akan menangani penguraian file yang dipisahkan,TextReader
atau diStream
mana beberapa bidang diapit tanda kutip dan beberapa tidak.Sebagai contoh:
Ini akan menghasilkan keluaran berikut:
Lihat Microsoft.VisualBasic.FileIO.TextFieldParser untuk informasi selengkapnya.
Anda perlu menambahkan referensi ke
Microsoft.VisualBasic
dalam tab Add References .NET.sumber
Ini sudah sangat terlambat tetapi ini bisa membantu seseorang. Kita bisa menggunakan RegEx seperti di bawah ini.
sumber
,
\" df ",Anda dapat membagi semua koma yang memiliki jumlah kutipan genap mengikuti mereka.
Anda juga ingin melihat di
specf
format CSV tentang menangani koma.Tautan Berguna:
C# Regex Split - commas outside quotes
sumber
Saya melihat bahwa jika Anda menempelkan teks dipisahkan csv di Excel dan melakukan "Teks ke Kolom", Anda diminta untuk "pengualifikasi teks". Ini secara default menggunakan tanda kutip ganda sehingga memperlakukan teks dalam tanda kutip ganda sebagai literal. Saya membayangkan bahwa Excel mengimplementasikan ini dengan pergi satu karakter pada satu waktu, jika bertemu dengan "kualifikasi teks", itu terus berlanjut ke "kualifikasi" berikutnya. Anda mungkin dapat mengimplementasikannya sendiri dengan for loop dan boolean untuk menunjukkan jika Anda berada di dalam teks literal.
sumber
Gunakan perpustakaan seperti LumenWorks untuk melakukan pembacaan CSV Anda. Ini akan menangani bidang dengan tanda kutip di dalamnya dan kemungkinan akan secara keseluruhan lebih kuat daripada solusi khusus Anda karena telah ada untuk waktu yang lama.
sumber
Merupakan masalah yang sulit untuk mengurai file .csv jika file .csv dapat berupa string yang dipisahkan koma, string yang dikutip dipisahkan koma, atau kombinasi yang kacau dari keduanya. Solusi yang saya dapatkan memungkinkan untuk salah satu dari tiga kemungkinan.
Saya membuat metode, ParseCsvRow () yang mengembalikan array dari string csv. Saya pertama kali berurusan dengan tanda kutip ganda dalam string dengan memisahkan string pada tanda kutip ganda menjadi sebuah array yang disebut quotesArray. File .csv string yang diberi tanda kutip hanya valid jika terdapat jumlah tanda kutip ganda yang genap. Tanda kutip ganda dalam nilai kolom harus diganti dengan sepasang tanda kutip ganda (Ini adalah pendekatan Excel). Selama file .csv memenuhi persyaratan ini, Anda dapat mengharapkan koma pembatas muncul hanya di luar pasangan tanda kutip ganda. Koma di dalam pasangan tanda kutip ganda adalah bagian dari nilai kolom dan harus diabaikan saat memisahkan .csv menjadi sebuah larik.
Metode saya akan menguji koma di luar pasangan kutipan ganda dengan hanya melihat indeks genap dari quotesArray. Ini juga menghapus tanda kutip ganda dari awal dan akhir nilai kolom.
Satu kelemahan dari pendekatan saya adalah cara saya mengganti sementara koma pembatas dengan karakter unicode yang tidak jelas. Karakter ini harus sangat tidak jelas, sehingga tidak akan pernah muncul di file .csv Anda. Anda mungkin ingin menangani lebih banyak hal ini.
sumber
Saya memiliki masalah dengan CSV yang berisi bidang dengan karakter kutipan di dalamnya, jadi dengan menggunakan TextFieldParser, saya menemukan yang berikut:
StreamReader masih digunakan untuk membaca CSV baris demi baris, sebagai berikut:
sumber
Dengan Cinchoo ETL - pustaka sumber terbuka, ia dapat secara otomatis menangani nilai kolom yang berisi pemisah.
Keluaran:
Untuk informasi lebih lanjut, silakan kunjungi artikel codeproject.
Semoga membantu.
sumber