Apakah ada perpustakaan pembaca / penulis CSV di C #? [Tutup]


111

Apakah ada perpustakaan pembaca / penulis CSV di C #?


68
Saya mohon untuk berbeda. Ini jelas merupakan pertanyaan yang membangun dan hasil pertama di google untuk .net csv library. Bukti, meskipun anekdot, untuk klaim saya adalah bahwa pertanyaan ini telah dilihat lebih dari 22000 kali dalam enam tahun terakhir.
shovavnik

5
benar kata - hit pertama di google
Robetto

Jawaban:


107

Coba CsvHelper . Ini mudah digunakan sebagai FastCsvReader dan juga menulis. Saya sangat senang dengan FastCsvReader di masa lalu, tetapi saya membutuhkan sesuatu yang juga menulis, dan tidak senang dengan FileHelpers.

Bacaan:

var csv = new CsvReader( stream );
var myCustomTypeList = csv.GetRecords<MyCustomType>();

Penulisan:

var csv = new CsvWriter( stream );
csv.WriteRecords( myCustomTypeList );

Pengungkapan Penuh: Saya adalah penulis perpustakaan ini.


3
Terima kasih, Josh. Saya mencobanya, dan cepat serta hemat memori. Saya pikir dokumentasinya dapat ditingkatkan sedikit untuk pengguna pertama kali, tetapi itu pasti cukup.
Sam

Apakah ada cara untuk menggunakan pustaka ini tanpa tipe khusus sehingga saya bisa mengulang melalui kisi tabel saya (khusus) dan menulis header dan kemudian meneruskan setiap bidang baris? Saya hanya mencari cara untuk mencegah kesalahan dalam file (melarikan diri dengan benar, dll).
u84six

Iya. Anda bisa menggunakan WriteField. Periksa dokumennya di
Josh Tutup

1
@ Tidak benar. Anda dapat membaca bidang individual atau bahkan hanya mendapatkan larik string untuk baris tersebut. Lihat dokumentasinya. joshclose.github.io/CsvHelper
Josh Tutup

@JoshClose Oh, senang mendengarnya, terima kasih! Saya hanya memeriksa panduan memulai di sini: joshclose.github.io/CsvHelper/… dan tidak termasuk kasus penggunaan saya. Saya seharusnya melihat lebih jauh, permintaan maaf saya. Namun, pada halaman itu dikatakan bahwa menggunakan semacam pemetaan adalah cara yang disarankan untuk digunakan CsvHelper. Mungkin itu bisa menawarkan beberapa strategi membaca alternatif di tempat itu?
Omong

21

Ada beberapa opsi, tepat di kerangka itu sendiri.

Salah satu cara termudah adalah dengan Referensi Microsoft.VisualBasic, lalu gunakan TextFieldParser . Ini adalah pembaca CSV yang berfungsi penuh dalam kerangka inti.

Alternatif bagus lainnya adalah menggunakan set data untuk membaca file CSV .


6
Saya selalu bertanya-tanya mengapa itu ada di perakitan Microsoft.VisualBasic ... Apakah MS mengira bahwa pengembang C # tidak menggunakan CSV?
Thomas Levesque

4
@ Thomas: terutama karena banyak pengembang C # merasa ngeri memikirkan menyertakan rakitan VisualBasic dalam proyek mereka

2
Ya - ada banyak "barang" bagus di sana. Saya pikir itu lebih karena VB memiliki beberapa konstruksi bahasa yang awalnya tidak benar-benar dipertimbangkan dalam kerangka kerja, tetapi mereka tidak akan pernah bisa mendapatkan pengguna VB6 tanpa menerapkannya. Namespace Perangkat dan ApplicationServices memiliki segala macam hal yang berguna.
Reed Copsey

20
@ Roboto, pengembang C # mana pun yang merasa ngeri saat mereferensikan Microsoft.VisualBasic dalam proyek mereka adalah orang yang sombong dalam bahasa yang bodoh. Lebih buruk lagi mereka tidak mengerti .NET sama sekali.
Ash

3
Permata perakitan VB lainnya adalah CopyDirectory: stackoverflow.com/questions/58744/…

17

Sebastien Lorion memiliki CSVpembaca hebat di CodeProject yang disebut A Fast CSV Reader . Mungkin salah satu yang terbaik untuk C # dan gratis.

Sejauh menulis, gunakan saja StreamWriter.

Berikut beberapa kode boilerplate untuk menulis a DataGridViewke file:

private void exportDGVToCSV(string filename)
{
    if (dataGridView1.Columns.Count != 0) 
    {    
        using (Stream stream = File.OpenWrite(filename))
        {
            stream.SetLength(0);
            using (StreamWriter writer = new StreamWriter(stream))
            {
                // loop through each row of our DataGridView
                foreach (DataGridViewRow row in dataGridView1.Rows) 
                {
                    string line = string.Join(",", row.Cells.Select(x => $"{x}"));
                    writer.WriteLine(line);
                }

                writer.Flush();
            }
        };
    }
}

2
Ini favoritku. Perpustakaan kecil yang bagus.
Alex

2
Menulis CSV itu mudah - cukup gunakan metode keluaran teks biasa, dan pisahkan dengan koma. Anda benar-benar hanya membutuhkan perpustakaan / penangan khusus untuk membaca ...
Reed Copsey

10
@Reed: tidak terlalu sepele jika Anda ingin koma dan tanda kutip lolos dengan benar. Saya bahkan tidak yakin apakah ada standarisasi untuk ini, tetapi sangat umum untuk melakukannya.
Stefan Steinegger

26
Menulis CSV sedikit lebih kompleks dari itu. Jika data yang ingin Anda ekspresikan dalam file CSV berisi koma atau baris baru, Anda perlu mengapit data dengan tanda kutip. Jika ada tanda kutip pada data yang baru diberi tanda kutip, maka Anda harus mengosongkan tanda kutip dengan tanda kutip ganda. Anda pasti bisa mengkodekan logika itu sendiri, tetapi alangkah baiknya jika perpustakaan melakukannya untuk Anda.
Tinister

4
Standarisasi adalah RFC 4180. tools.ietf.org/html/rfc4180
Josh Tutup

7

Ya - meskipun saya berasumsi Anda benar-benar menanyakan secara spesifik?

Coba FileHelpers


Ya, saya melakukannya tetapi untuk beberapa alasan aneh FileHelpers rusak secara acak. Selain itu, pustaka FileHelpers tidak dikembangkan untuk waktu yang lama.
Erik Schierboom

1
FileHelpers secara aktif dikembangkan sekarang, lihat GitHub .
xmedeko

3

Ada lusinan.

http://www.filehelpers.net/ adalah salah satu yang paling umum.

Saya harus mengatakan bahwa saya menemukan Filehelpers membatasi dalam beberapa skenario, dan sebagai gantinya menggunakan The Fast CSV Reader . Menurut pengalaman saya, jika Anda tidak mengetahui format file CSV atau mengimpor pemetaan hingga waktu proses - ini adalah pustaka yang lebih baik untuk digunakan.


Kami juga menggunakan filehelpers.
Tangurena

1
Saya telah menemukan FileHelpers menjadi gangguan untuk dikonfigurasi. FastCsvReader jauh lebih mudah digunakan.
Josh Tutup

1 untuk FastCsvReader. Kinerja Luar Biasa. Tapi itu terutama pembaca / parser. Bukan seorang penulis.
Mehdi LAMRANI
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.