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!

Hairgami_Master
sumber

Jawaban:

241

Gunakan System.IO.StringReader :

using(TextReader sr = new StringReader(yourstring))
{
    DoSomethingWithATextReader(sr);
}
Steve B
sumber
9

Gunakan StringReaderkelas, yang mewarisi TextReader.

Ilia G
sumber
3
TextReaderbukan antarmuka, ini kelas abstrak.
svick
4

Anda menginginkan StringReader

var val = "test string";
var textReader = new StringReader(val);
scottm
sumber
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();
}
Jon Hanna
sumber
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
1

Jika Anda melihat dokumentasinyaTextReader , Anda akan melihat dua kelas yang mewarisi. Dan salah satunya adalah StringReader, yang tampaknya melakukan apa yang Anda inginkan.

svick.dll
sumber