In C #, come posso creare un oggetto TextReader da una stringa (senza scrivere su disco)


126

Sto usando un lettore CSV veloce per analizzare del testo incollato in una pagina web. Il lettore Fast CSV richiede un oggetto TextReader e tutto ciò che ho è una stringa. Qual è il modo migliore per convertire una stringa in un oggetto TextReader al volo?

Grazie!

Aggiornamento- Codice di esempio- Nell'esempio originale, un nuovo StreamReader sta cercando un file denominato "data.csv". Spero di fornirlo tramite TextBox_StartData.Text.

L'uso di questo codice di seguito non viene compilato.

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

Il new StreamReader(sr)mi dice che ha alcuni argomenti non validi. Qualche idea?

Come approccio alternativo, ho provato questo:

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

ma ottengo un Illegal characters in path Error.Ecco un esempio della stringa da 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

Qualche idea se questo è l'approccio giusto? Grazie ancora per il vostro aiuto!

Risposte:



9

Usa la StringReaderclasse, che eredita TextReader.


3
TextReadernon è un'interfaccia, è una classe astratta.
svick


4

StringReader è un TextReader( StreamReaderè troppo, ma per leggere da stream). Quindi, prendendo il tuo primo esempio e usandolo solo per costruire il CsvReaderpiuttosto che provare a costruire prima un StreamReaderda esso, si ottiene:

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

Grazie Jon ... Penso che ci sia un bug con Fast CSV Framework. Sto ottenendo un risultato simile a questo:! screencast.com/t/5wZRrjDMO ...
Hairgami_Master

Il mio CSV è fname, lname, email john, doe, jd @ email.com
Hairgami_Master,

1
Che (dopo aver visualizzato il codice sorgente per vedere che ti stai collegando comunque a screencast.com/t/5wZRrjDMO ) sembra che tu stia producendo una serie di array di stringhe (uno per ogni riga) e provi a renderli, il che si traduce in il testo "System.String []" ripetuto. Questo mi sembra un risultato ragionevole di un parser CSV, non gestito bene. Prova a riprodurlo in una visualizzazione a griglia e guarda cosa succede.
Jon Hanna

Grazie Jon- In realtà, sto usando GridView, ne ho provati un paio, ma immagino che i dati vengano restituiti correttamente, è solo questione di scegliere il giusto controllo di visualizzazione dei dati .. ??
Hairgami_Master

1
Tendo a non fare un uso pesante dei controlli, quindi potrebbe esserci qualcosa che mi manca. L'output sembra essere una serie di array di stringhe (un array per ogni riga, una stringa per ogni cella), il che ha senso. Non sono sicuro del motivo per cui non funzioni oltre a questo, temo :(
Jon Hanna


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.