2010-01-21 17 views
6

ile dinamik olarak bir CSV dosyası oluşturun FileHelpers, çalışma zamanına kadar düzeni bilmediğinizde bir CSV dosyasını bir DataTable'da okuyabilmenizi sağlayan "RunTime Records" adlı bir özelliği destekler.FileHelpers

Çalışma zamanında bir CSV dosyası oluşturmak için FileHelpers kullanmak mümkün mü?

Bazı kullanıcı girdilerine bağlı olarak, oluşturulması gereken CSV dosyasının yalnızca çalışma zamanında bilinebilecek farklı alanları olacaktır. FileHelper motoru için gereken türünü okuma bölümünde açıklandığı gibi oluşturabilirim, ancak verilerimin hangi formatta yazılacağına karar veremiyorum.

var engine = new FileHelpers.FileHelperEngine(GenerateCsvType()); 

engine.WriteStream(context.Response.Output, dontKnow); 

DÜZENLEME

Alternatif herkes çalışma zamanı kadar onun alanlarını bilmeden bir CSV dosyası oluşturabilirsiniz iyi bir CSV kütüphane önerebilirsiniz? Örneğin, bir DataTable'dan bir CSV dosyası oluşturun.

CsvEngine.DataTableToCsv(dt, filename); 

Eğer yardımcı olur bana bilinen edelim:

cevap

6

Aslında kütüphane sadece çalışma zamanı kayıtları okumak ama yazma purpouses için böyle DataTableToCsv yöntemi kullanabilirsiniz şimdi sağlar.

+0

Fantastik :) Bu harika bir çözüm, ancak bunun yerine bir akışa yazmanın herhangi bir yolu var mı? Bu bir anlaşma kırıcı değil, ama bazı adımları kurtaracaktı. Her iki şekilde de, teşekkürler! –

+0

Şu an değil ama bana kütüphanenin bir sonraki sürümünde aktif olarak çalıştığımız bir e-posta gönderiyoruz ve akışları yazmak için yöntemin aşırı yüklenmiş bir sürümünü eklemek çok kolay olacaktır :) – MarcosMeli

+0

@Marcos: bir sonraki versiyon destekleyecek genel listeleri ('List ') FileEngine'den dönüş türü (sadece diziler yerine) olarak mı? :-) –

1

Bunun eski bir soru olduğunu biliyorum, ancak kendimle aynı sorunu yaşadım ve çözüm aramaya zaman ayırdım, bu yüzden bulgularımı paylaşmaya karar verdim.

Tanımı oluşturmak için FileHelpers RunTime Records kullanıyorsanız yansımayı kullanarak aynı tanımı kullanabilirsiniz.

Eğer aşağıdaki gibi değerleri doldurmak için FileHelpers yarattığı aynı türünü kullanabilirsiniz Şimdi bir tanım

 DelimitedClassBuilder cb = new DelimitedClassBuilder("Customers", ","); 
     cb.AddField("StringField", "string"); 

     Type t = cb.CreateRecordClass(); 
     FileHelperEngine engine = new FileHelperEngine(t); 

oluşturmak Örneğin

: dosya veya dize için yazmak sonra

 object customClass = Activator.CreateInstance(t); 
     System.Reflection.FieldInfo field = customClass.GetType().GetField("StringField", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); 
     if (field != null) 
     { 
      field.SetValue(customClass, "StringValue"); 
     } 

Ve: