Apakah ada cara default / resmi / disarankan untuk mem-parsing file CSV di C #? Saya tidak ingin menggulung parser saya sendiri.
Juga, saya telah melihat contoh orang yang menggunakan ODBC / OLE DB untuk membaca CSV melalui driver Teks, dan banyak orang tidak menyarankan ini karena "kekurangannya." Apa kekurangannya ini?
Idealnya, saya mencari cara di mana saya bisa membaca CSV dengan nama kolom, menggunakan catatan pertama sebagai nama header / field. Beberapa jawaban yang diberikan sudah benar tetapi pada dasarnya berfungsi untuk membatalkan deserialisasi file ke dalam kelas.
Pengurai CSV sekarang menjadi bagian dari .NET Framework.
Tambahkan referensi ke Microsoft.VisualBasic.dll (berfungsi dengan baik dalam C #, jangan pedulikan namanya)
Dokumen ada di sini - Kelas TextFieldParser
PS Jika Anda memerlukan eksportir CSV , coba CsvExport (sebutkan: Saya salah satu kontributor)
sumber
TextFieldParser.ReadLine()
. Lihat dokumen TextFieldParserCsvHelper (perpustakaan yang saya kelola ) akan membaca file CSV menjadi objek khusus.
Terkadang Anda tidak memiliki objek yang ingin Anda baca. Dalam hal ini, Anda bisa menggunakan pemetaan fasih karena Anda tidak bisa meletakkan atribut di kelas.
EDIT:
CsvReader sekarang membutuhkan CultureInfo untuk diteruskan ke dalam konstuktor ( https://github.com/JoshClose/CsvHelper/issues/1441 ).
Contoh:
sumber
Dalam aplikasi bisnis, saya menggunakan proyek Open Source di codeproject.com , CSVReader .
Ini bekerja dengan baik, dan memiliki kinerja yang baik. Ada beberapa pembandingan pada tautan yang saya berikan.
Contoh sederhana, disalin dari halaman proyek:
Seperti yang Anda lihat, ini sangat mudah untuk dikerjakan.
sumber
Saya tahu ini agak terlambat tetapi baru saja menemukan perpustakaan
Microsoft.VisualBasic.FileIO
yang memilikiTextFieldParser
kelas untuk memproses file csv.sumber
Jika Anda hanya perlu membaca file csv maka saya merekomendasikan perpustakaan ini: Pembaca CSV Cepat
Jika Anda juga perlu membuat file csv maka gunakan yang ini: FileHelpers
Keduanya gratis dan opensource.
sumber
Ini adalah kelas pembantu yang sering saya gunakan, kalau-kalau ada yang kembali ke utas ini (saya ingin membagikannya).
Saya menggunakan ini untuk kesederhanaan porting ke proyek yang siap digunakan:
Dan gunakan seperti:
[Pembantu csv yang diperbarui: bug diperbaiki di mana karakter baris baru terakhir membuat baris baru]
sumber
Solusi ini menggunakan perakitan Microsoft.VisualBasic resmi untuk mengurai CSV.
Keuntungan:
Kode:
sumber
Saya telah menulis TinyCsvParser untuk .NET, yang merupakan salah satu parser .NET tercepat di sekitar dan sangat dapat dikonfigurasi untuk mem-parsing hampir semua format CSV.
Ini dirilis di bawah Lisensi MIT:
Anda dapat menggunakan NuGet untuk menginstalnya. Jalankan perintah berikut di Package Manager Console .
Pemakaian
Bayangkan kita memiliki daftar Orang dalam file CSV
persons.csv
dengan nama depan, nama belakang, dan tanggal lahir mereka.Model domain yang sesuai di sistem kami mungkin terlihat seperti ini.
Saat menggunakan TinyCsvParser Anda harus menentukan pemetaan antara kolom dalam data CSV dan properti dalam model domain Anda.
Dan kemudian kita bisa menggunakan pemetaan untuk mem-parsing data CSV dengan a
CsvParser
.Panduan pengguna
Panduan Pengguna lengkap tersedia di:
sumber
Berikut ini adalah implementasi KISS saya ...
sumber
Beberapa waktu yang lalu saya menulis kelas sederhana untuk CSV baca / tulis berdasarkan
Microsoft.VisualBasic
perpustakaan. Menggunakan kelas sederhana ini Anda akan dapat bekerja dengan CSV seperti dengan array 2 dimensi. Anda dapat menemukan kelas saya dengan tautan berikut: https://github.com/ukushu/DataExporterContoh penggunaan sederhana:
Untuk membaca tajuk saja yang Anda butuhkan hanyalah membaca
csv.Rows[0]
sel :)sumber
Solusi file sumber tunggal untuk kebutuhan penguraian langsung, bermanfaat. Berurusan dengan semua kasus tepi yang jahat. Seperti normalisasi baris baru dan penanganan baris baru dalam string literal yang dikutip. Sama-sama!
Jika file CSV Anda memiliki tajuk, Anda cukup membacakan nama kolom (dan menghitung indeks kolom) dari baris pertama. Sederhana seperti itu.
Perhatikan bahwa
Dump
ini adalah metode LINQPad, Anda mungkin ingin menghapusnya jika Anda tidak menggunakan LINQPad.sumber
Satu lagi dalam daftar ini, Cinchoo ETL - pustaka sumber terbuka untuk membaca dan menulis banyak format file (CSV, file flat, Xml, JSON dll)
Contoh di bawah ini menunjukkan cara membaca file CSV dengan cepat (Tidak perlu objek POCO)
Contoh di bawah ini menunjukkan cara membaca file CSV menggunakan objek POCO
Silakan periksa artikel di CodeProject tentang cara menggunakannya.
sumber
Berdasarkan posting unlimit pada Bagaimana cara membagi CSV menggunakan fungsi C # split () dengan benar? :
CATATAN: ini tidak menangani koma kabur / bersarang, dll., Dan karenanya hanya cocok untuk daftar CSV sederhana tertentu.
sumber
Kode ini membaca csv ke DataTable:
sumber
Jika ada yang ingin potongan, mereka dapat menceburkan diri ke dalam kode mereka tanpa harus mengikat pustaka atau mengunduh paket. Ini adalah versi yang saya tulis:
sumber
Berikut ini adalah solusi singkat dan sederhana.
sumber