C # için CSV ayrıştırıcı / okuyucu? [kapalı]


89

Bazı liberal lisanslar altında CSV ayrıştırıcısının iyi ve ücretsiz bir uygulaması var mı? Java için SuperCSV'nin bazı muadili , belki bir bağlantı noktası?



5
Microsoft.VisualBasic.FileIO.TextFieldParser kullanarak;


1
Yapıcı değil mi? SO yöneticileri çok çılgın. Bu ÇOK yararlı bir sorudur.
richard

Yanıtlar:


70

24
FileHelpers (en azından CSV için), "kaynaktaki (dosya) kayıtla eşleşen bir sınıf tanımlamanızı", "bir Kayıt Eşleme Sınıfı bildirmeniz gerekir" vb. Gerektirir ve bu çok da sıcak değildir. Kaç sütun bekleyeceğimi önceden bilmeden CSV'yi bir Veri Tablosuna dönüştürmek istiyorum.
Konrad Morawski

53

CodeProject'te güzel bir uygulama var :

145 alan ve 50.000 kayıt içeren 45 MB'lik bir CSV dosyasıyla, dünya numaralarına daha fazla bilgi vermek için, okuyucu yaklaşık 30 MB / sn işlem yapıyordu. Sonuç olarak, 1.5 saniye sürdü! Makine özellikleri P4 3.0 GHz, 1024 MB idi.


(+ 1'imi geri alarak): lumenworks Fast CSV okuyucusunu 53Mb'lik bir dosyada kırdım. Görünüşe göre satır önbelleğe alma 43.000 satırdan sonra başarısız oldu ve arabelleği karıştırdı. Denedim Microsoft.VisualBasic.FileIO.TextFieldParseve hile yaptı.
Kodlamaya Gitti

11

DataTable'a bir CSV dosyası yükleyebilirsiniz.

Basit kod -

static DataTable CsvToDataTable(string strFileName)
{
    DataTable dataTable = new DataTable("DataTable Name");

    using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Directory.GetCurrentDirectory() + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\""))
    {
        conn.Open();
        string strQuery = "SELECT * FROM [" + strFileName + "]";
        OleDbDataAdapter adapter = 
            new System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
        adapter.Fill(dataTable);
    }
    return dataTable;
}

Projenizi x86 işlemciye derlediğinizden emin olun. X64 için çalışmaz.


1
Yerleşik ODBC veya OLEDB kitaplıklarında kalmak istediğimden bu benim için oldukça iyi çalıştı. Btw, aşağıdakilerin hem OLEDB hem de ODBC için ek kod örnekleri vardır: csvreader.com/csv_benchmarks.php
Meringros

5
Bu 64 bit üzerinde çalışmıyor, ne yazık ki.
DenNukem


7

filehelpers deneyin Şaşırtıcı derecede iyi çalışın. Her gün 100 MB'lık bir dosyayı ayrıştırmak için kullanıyorum.



3

CommonLibrary.NET'in bir parçası olan CSV Parser'ı kullanmaya başladım .

.NET 3.5 kullanır, kolay bir API'ye ve yinelemeler için uygun aşırı yüklemelere / yöntemlere ve lamda'lara sahiptir.

Bunun için yukarıdaki gibi herhangi bir kıyaslamam yok, ama bunun güzel yanı, Java Commons'a benzer bir kitaplığın yalnızca bir bileşeni olması. Bu yüzden, diğer şeylerin yanı sıra bir Komut satırı ayrıştırıcısı, Depo uygulaması da elde ediyorum.

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.