C # içinde herhangi bir CSV okuyucu / yazar kitaplığı var mı? [kapalı]


111

C # içinde herhangi bir CSV okuyucu / yazar kitaplığı var mı?


68
Naçizane size katılmıyorum. Bu kesinlikle yapıcı bir sorudur ve google'daki ilk sonuçtur .net csv library. İddiam için anekdot olsa da kanıt, bu sorunun son altı yılda 22.000'den fazla kez görüldüğüdür.
shovavnik

5
doğru dedi - google'da ilk vuruş
Robetto

Yanıtlar:


107

CsvHelper'ı deneyin . FastCsvReader kadar kullanımı kolaydır ve yazma da yapar. Geçmişte FastCsvReader'dan çok memnun kaldım, ancak aynı zamanda yazmayı da sağlayan bir şeye ihtiyacım vardı ve FileHelpers'tan memnun değildim.

Okuma:

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

Yazı:

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

Tam Açıklama: Bu kütüphanenin yazarıyım.


3
Teşekkürler Josh. Buna bir şans verdim ve hem hızlı hem de hafıza açısından verimliydi. İlk kez kullananlar için dokümantasyonun biraz geliştirilebileceğini düşünüyorum, ancak kesinlikle yeterliydi.
Sam

Bu kitaplığı özel bir tür olmadan kullanmanın bir yolu var mı, böylece tablo ızgaramda (özel) yineleme yapıp üstbilgiyi yazıp her satır alanını geçebilir miyim? Sadece dosyalardaki hataları önlemenin bir yolunu arıyorum (uygun şekilde kaçmak vb.).
u84six

Evet. Kullanabilirsiniz WriteField. Dokümanları buradan kontrol edin joshclose.github.io/CsvHelper
Josh Close

1
@Zimano Doğru değil. Tek tek alanları okuyabilir veya satır için sadece bir dize dizisi bile alabilirsiniz. Belgelere bakın. joshclose.github.io/CsvHelper
Josh Close

@JoshClose Oh, bunu duymak güzel, teşekkürler! Yalnızca şu adresteki başlangıç kılavuzuna baktım : joshclose.github.io/CsvHelper/… ve kullanım durumumu içermiyordu. Daha ileriye bakmalıydım, özür dilerim. Bununla birlikte, bu sayfada, bir tür eşleme kullanmanın tavsiye edilen yol olduğu yazıyor CsvHelper. Belki o noktada bazı alternatif okuma stratejileri sunabilir? Bu arada orijinal
yorumumu sildim

21

Çerçevenin kendisinde birkaç seçenek var.

En kolay yollardan biri Microsoft.VisualBasic'e başvurmak ve ardından TextFieldParser'ı kullanmaktır . Çekirdek çerçevede tamamen işlevsel bir CSV okuyucusudur.

Başka bir iyi alternatif, CSV dosyalarını okumak için veri kümelerini kullanmaktır .


6
Neden Microsoft.VisualBasic derlemesinde olduğunu hep merak etmişimdir ... MS, C # geliştiricilerinin CSV kullanmadığını mı düşündü?
Thomas Levesque

4
@Thomas: Özellikle birçok C # geliştiricisi, projelerine bir VisualBasic derlemesini dahil etme düşüncesine sıkıldığından beri

2
Evet - orada bir sürü güzel "güzellik" var. Bence daha fazlası, çünkü VB başlangıçta çerçevede gerçekten düşünülmeyen bazı dil yapılarına sahip, ancak bunları uygulamadan VB6 kullanıcılarını asla bulamazlardı. Devices and ApplicationServices ad alanları her tür yararlı şeye sahiptir.
Reed Copsey

20
@ Roboto, projelerinde Microsoft.VisualBasic'e atıfta bulunmaktan korkan herhangi bir C # geliştiricisi cahil bir züppe dildir. Daha da kötüsü .NET'i hiç anlamıyorlar.
Ash

3
Başka bir VB montaj mücevheri CopyDirectory'dir: stackoverflow.com/questions/58744/…

17

Sebastien Lorion'un CSVCodeProject'te A Fast CSV Reader adlı harika bir okuyucusu var . Muhtemelen C # için en iyilerden biri ve ücretsizdir.

Yazmaya gelince, sadece kullanın StreamWriter.

DataGridViewBir dosyaya yazmak için bazı standart kodlar :

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
Bu benim favorim. Harika küçük kütüphane.
Alex

2
CSV yazmak kolaydır - sadece normal bir metin çıktı yöntemi kullanın ve virgülle ayırın. Okumak için gerçekten yalnızca bir kitaplığa / özel işleyiciye ihtiyacınız var ...
Reed Copsey

10
@Reed: Virgül ve tırnak işaretlerinin doğru şekilde kaçmasını istiyorsanız çok da önemsiz değildir. Bunun için bir standardizasyon olup olmadığından bile emin değilim, ancak bunu yapmak çok yaygın.
Stefan Steinegger

26
CSV yazmak bundan biraz daha karmaşıktır. CSV dosyasında ifade edilmesini istediğiniz veriler virgül veya yeni satırlar içeriyorsa, verileri tırnak işaretleri arasına almanız gerekir. Yeni tırnak işaretli verilerde bir tırnak işareti varsa, tırnak işaretinden çift tırnak işaretiyle çıkmanız gerekir. Bu mantığı kesinlikle kendiniz kodlayabilirsiniz, ancak bir kütüphanenin bunu sizin için yapması iyi olur.
Tinister

4
Standartlaştırma RFC 4180'dir. Tools.ietf.org/html/rfc4180
Josh Close

7

Evet - aslında ayrıntıları sorduğunuzu varsayıyorum.

FileHelpers'ı deneyin


Yaptım ama garip bir nedenden dolayı FileHelpers rastgele bozuldu. Ayrıca, FileHelpers kitaplığı uzun süredir geliştirilmemiştir.
Erik Schierboom

1
FileHelpers şimdi aktif olarak geliştirilmektedir, GitHub'a bakın .
xmedeko

3

Düzinelerce var.

http://www.filehelpers.net/ en yaygın olanlardan biridir.

Bazı senaryolarda Filehelpers'ı kısıtlayıcı bulduğumu ve bunun yerine The Fast CSV Reader'ı kullandığımı söylemeliyim . Tecrübelerime göre, CSV dosyanızın formatını bilmiyorsanız veya çalışma zamanına kadar eşlemeyi içe aktarıyorsanız - bu, kullanılacak daha iyi kitaplıktır.


Ayrıca filehelper kullanıyoruz.
Tangurena

1
FileHelpers'ı yapılandırmak için bir sıkıntı olarak buldum. FastCsvReader'ın kullanımı çok daha kolaydı.
Josh Close

FastCsvReader için +1. Mükemmel performans. Ama esas olarak bir okuyucu / ayrıştırıcıdır. Yazar değil.
Mehdi LAMRANI
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.