C # 'da, bir dizeden (diske yazmadan) nasıl TextReader nesnesi oluşturabilirim


126

Yapıştırılan bazı metni bir web sayfasına ayrıştırmak için Hızlı CSV Okuyucu kullanıyorum . Hızlı CSV okuyucu bir TextReader nesnesi gerektirir ve sahip olduğum tek şey bir dizedir. Bir dizeyi anında bir TextReader nesnesine dönüştürmenin en iyi yolu nedir?

Teşekkürler!

Güncelleme - Örnek kod - Orijinal örnekte, yeni bir StreamReader "data.csv" adlı bir dosyayı arıyor. TextBox_StartData.Text aracılığıyla sağlamayı umuyorum.

Aşağıdaki bu kodu kullanmak derlemez.

        TextReader sr = new StringReader(TextBox_StartData.Text);
        using (CsvReader csv = new CsvReader(new StreamReader(sr), true))
        {
            DetailsView1.DataSource = csv;
            DetailsView1.DataBind();
        }

new StreamReader(sr)Bazı geçersiz argümanlar vardır söylüyor. Herhangi bir fikir?

Alternatif bir yaklaşım olarak şunu denedim:

        TextReader sr = new StreamReader(TextBox_StartData.Text);
        using (CsvReader csv = new CsvReader(sr, true))
        {
            DetailsView1.DataSource = csv;
            DetailsView1.DataBind();
        }

ancak Illegal characters in path Error.TextBox_StartData.Text'ten bir string örneği alıyorum:

Fname\tLname\tEmail\nClaude\tCuriel\tClaude.Curiel@email.com\nAntoinette\tCalixte\tAntoinette.Calixte@email.com\nCathey\tPeden\tCathey.Peden@email.com\n

Bu doğru yaklaşım ise herhangi bir fikriniz var mı? Yardımın için tekrar teşekkürler!

Yanıtlar:



9

StringReaderDevralan sınıfı kullanın TextReader.


3
TextReaderbir arayüz değil, soyut bir sınıf.
svick


4

StringReader olan bir TextReader( StreamReaderderelerden de, ama için okuyor). Öyleyse, ilk örneğinizi alıp sadece ondan bir oluşturmaya CsvReaderçalışmak yerine onu oluşturmak için kullanmak StreamReader, şunu verir:

TextReader sr = new StringReader(TextBox_StartData.Text);
using(CsvReader csv = new CsvReader(sr, true))
{
  DetailsView1.DataSource = csv;
  DetailsView1.DataBind();
}

Teşekkürler Jon ... Sanırım Hızlı CSV Çerçevesinde bir hata var. Şuna benzeyen bir sonuç alıyorum:! screencast.com/t/5wZRrjDMO ...
Hairgami_Master

Benim CSV'm fname, lname, email john, doe, jd @ email.com
Hairgami_Master 20'11

1
Bu ( yine de screencast.com/t/5wZRrjDMO ile bağlantı kurduğunuzu görmek için kaynağı görüntüledikten sonra ) bir dizi dizi üretiyorsunuz (her satır için bir tane) ve bunları oluşturmaya çalışıyorsunuz gibi görünüyor. "System.String []" metni tekrarlandı. Bu bana bir CSV ayrıştırıcısının makul bir sonucu gibi geliyor, iyi işlenmemiş. Bunu bir ızgara görünümüne çıkarmayı deneyin ve ne olduğunu görün.
Jon Hanna 2011

Teşekkürler Jon- Aslında, bir GridView kullanıyorum, birkaçını denedim, ancak verilerin düzgün bir şekilde döndürüldüğünü tahmin ediyorum, bu sadece doğru Veri Görüntüleme Kontrolünü seçme meselesi .. ??
Hairgami_Master

1
Kontrolleri yoğun şekilde kullanmama eğilimindeyim, bu yüzden eksik olduğum bir şey olabilir. Çıktı, mantıklı olan bir dizi dizi dizisi (her satır için bir dizi, her hücre için bir dize) gibi görünüyor. Korkarım bunun ötesinde neden işe yaramadığından emin değilim :(
Jon Hanna 20'11


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.