CSV Enumerable
Kontrollü ayırıcıyla ayrılmış veriyi satır satır türlenmiş nesnelere eşleyen; başlık/özellik eşlemesini bir kez yapan ve .gz girdiyi GZipStream üzerinden açan C# akış tabanlı yardımcı yazılımı.
IEnumerable<T> kullanmak tek başına bir veri işleme hattını verimli yapmıyor; tekrar eden satır yolunda neyin yeniden hesaplandığı daha önemli. Bu küçük C# projesini geliştirirken model özelliklerini başlangıçta bulacak biçimde tasarladım. Dosyanın başlık satırı geldiğinde sütun indisi ile PropertyInfo arasındaki eşleme bir kez kuruluyor. Sonraki satırlar isim araması yapmak yerine bu konumsal haritayı kullanıyor.
.gz dosyalar önce diske açılmıyor; GZipStream üzerinden doğrudan okunuyor. Böylece veri kümesi büyüdükçe tüm kayıtları tutan bir List<T> oluşmuyor. Yine de bu yaklaşımı “bellek ayırmasız” diye nitelemiyorum: satır ayrıştırması ve yansıma tabanlı atama maliyetleri var.
Daha önemlisi kapsam sınırı açık. Bu sürüm her CSV lehçesini çözmeye çalışan RFC 4180 uyumlu genel ayrıştırıcı değildir; tırnak içindeki ayırıcı, kaçışlanmış tırnak ve çok satırlı alan gerektiren veriler için tam özellikli ayrıştırıcı tercih edilmelidir. Benzer şema-önhazırlama fikrinin veritabanı sorgu sonuçlarına uygulanmış hali DbDataReader Akış Tabanlı Serileştirme projesidir.
Açıklayıcı yazı: Enumerable CSV İşleme Algoritması