Rails'te CSV İşlemleri – Roo ve SmarterCSV GEM'leri

Roo GEM

CSV, XLS ve ODS’yi başarıyla okuyor, ancak tüm yaptığı bundan ibaret – başka bir özelliği yok.

Roo GEM (CSV Load)

Roo GEM (CSV Read Örneği)

SmarterCSV GEM

Smarter_CSV sadece CSV ile çalışıyor ancak özellik bakımından çok daha üstün.

SmarterCSV (CSV Read)

process redis’ten tanıdık. Bu betik tamda istenilen şekilde hash döndürür:

Burada göründüğü üzere smarter_csv bir takım normalizasyon işlemleride yapıyor. Örneğin “TC Kimlik No” başlığını downcase ve snakecase yaparak tc_kimlik_no şekline sokmuş ancak “Öğrenci No” için aynısını başarılı yapamamış “Öğrenci_no” gibi birşey ortaya çıkmış. Bu durum key_mapping yaparken önemli.

SmarterCSV (Key Mapping)

:Öğrenci_no yüzünden çalışmayacağını düşündüğüm betik sorunsuz çalışıyor ve şunu döndürüyor:

SmarterCSV (Chunk Size)

Bu parametre her bir dizide bulunacak value:key ikilisinin sayısını belirtiyor ve sonuçları buna göre döndürüyor.

SmarterCSV (Chunk Processing ve Virtual Attributes)

CSV dosyamızı bizim belirlediğimiz miktarda yığınlara (chunk) bölerek işletebiliriz.

CSV Dosyamız=>

Betik =>

Yanıt =>

SmarterCSV (Single Chunk Processing)

Aynı CSV’yi parçalara bölmeden direk tek parça olarak işletmek için;

Yanıt olarak bu döner =>

SmarterCSV (Modellere Yazmak – Toplu)

Import dosyası =>

Deneme amacıyla ilgili işlemleri Participation modelinin index controller’ına ekledim.

Bu action’dan beklenen, Participations sayfası her ziyaret edildiğinde beklenen şey CSV’nin işlenmesiydi. Sayfayı ziyaret ettiğimde kayıtlar eklenmedi, çünkü modelde bir takım validasyonlar buna engel oluyordu.

Bu kısıtlamamdan dolayı CSV işlenmesine rağmen kayıtlar işlenmedi — ancak ve ancak request arka planda asılı kalmış bekliyordu. Bir süre sonra sistemde zaten olan kayıtları temizledim ve CSV’den gelen kayıtlar tıkır tıkır veritabanına yazıldı.

Yani özetle herhangi bir sebeple process tamamlanamazsa iptal olmuyor ve askıda kalıyor, şartlar uygunlaşıncada işlem kaldığı yerden devam ediyordu. Bu hem iyi, hemde tehlikeli bir durum!

SmarterCSV (Modellere Yazmak – Parça Parça)

Aynı işlemi chunk’lar halinde parça parça veritabanına yazmak için şöyle yapılabilir =>

SmarterCSV (Modellere Yazmak – Resque ile)

Henüz bunu denemedim fakat dökümantasyona göre bu şekilde olması gerekiyor =>

BOM’lu CSV’lerde Unicode

Windows’ta aksi belirtilmediği sürece tüm dosyala BOM’lu yazılıyor. BOM’lu CSV dosyalarında unicode problem çıkarttığı için şöyle bir şey kullanılmalıymış:

Leave a Reply