Di C #, bagaimana saya bisa membuat objek TextReader dari string (tanpa menulis ke disk)


126

Saya menggunakan A Fast CSV Reader untuk mengurai beberapa teks yang ditempelkan ke dalam halaman web. Pembaca CSV Cepat membutuhkan objek TextReader, dan yang saya miliki hanyalah string. Apa cara terbaik untuk mengubah string menjadi objek TextReader dengan cepat?

Terima kasih!

Perbarui- Kode sampel- Dalam sampel asli, StreamReader baru sedang mencari file bernama "data.csv". Saya berharap untuk memasoknya melalui TextBox_StartData.Text.

Menggunakan kode di bawah ini tidak dapat dikompilasi.

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

Itu new StreamReader(sr)memberi tahu saya bahwa ada beberapa argumen yang tidak valid. Ada ide?

Sebagai pendekatan alternatif, saya telah mencoba ini:

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

tapi saya mendapatkan Illegal characters in path Error.Berikut ini contoh string dari TextBox_StartData.Text:

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

Adakah ide jika ini pendekatan yang tepat? Sekali lagi terima kasih atas bantuan Anda!

Jawaban:



9

Gunakan StringReaderkelas, yang mewarisi TextReader.


3
TextReaderbukan antarmuka, ini kelas abstrak.
svick


4

StringReader adalah sebuah TextReader( StreamReaderterlalu, tapi untuk membaca dari stream). Jadi, mengambil contoh pertama Anda dan hanya menggunakannya untuk membuat CsvReaderdaripada mencoba membuat StreamReaderdari itu pertama memberikan:

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

Terima kasih Jon ... Saya pikir ada bug dengan Fast CSV Framework. Saya mendapatkan hasil yang terlihat seperti ini:! screencast.com/t/5wZRrjDMO ...
Hairgami_Master

CSV saya adalah fname, lname, email john, doe, jd @ email.com
Hairgami_Master

1
Itu (setelah saya melihat-sumber untuk melihat bahwa Anda menautkan ke screencast.com/t/5wZRrjDMO ) sepertinya Anda menghasilkan serangkaian array string (satu untuk setiap baris), dan mencoba membuatnya, yang menghasilkan teks "System.String []" diulang. Bagi saya ini terdengar seperti hasil yang wajar dari parser CSV, tidak ditangani dengan baik. Cobalah mengeluarkannya ke tampilan kisi dan lihat apa yang terjadi.
Jon Hanna

Terima kasih Jon- Sebenarnya, saya menggunakan GridView, saya sudah mencoba beberapa di antaranya, tapi saya rasa datanya dikembalikan dengan benar, ini hanya masalah memilih Kontrol Tampilan Data yang benar .. ??
Hairgami_Master

1
Saya cenderung tidak terlalu banyak menggunakan kontrol, jadi mungkin ada sesuatu yang saya lewatkan. Keluarannya tampaknya berupa rangkaian array string (satu array untuk setiap baris, satu string untuk setiap sel), yang masuk akal. Tidak yakin mengapa tidak bekerja lebih dari itu, saya takut :(
Jon Hanna


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.