web-dev-qa-db-fra.com

En C #, comment puis-je créer un objet TextReader à partir d'une chaîne (sans écrire sur le disque)

J'utilise A Fast CSV Reader pour analyser du texte collé dans une page Web. Le lecteur Fast CSV nécessite un objet TextReader, et tout ce que j'ai est une chaîne. Quel est le meilleur moyen de convertir une chaîne en un objet TextReader à la volée?

Merci!

Update - Sample code- Dans l'exemple d'origine, un nouveau StreamReader recherche un fichier appelé "data.csv". J'espère pouvoir le fournir via TextBox_StartData.Text.

L'utilisation de ce code ci-dessous ne compile pas.

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

La new StreamReader(sr) me dit qu'elle a des arguments non valides. Des idées?

Comme approche alternative, j'ai essayé ceci:

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

mais j'obtiens un Illegal characters in path Error. Voici un exemple de la chaîne de TextBox_StartData.Text:

Fname\tLname\tEmail\nClaude\tCuriel\[email protected]\nAntoinette\tCalixte\[email protected]\nCathey\tPeden\[email protected]\n

Des idées si c'est la bonne approche? Merci encore pour votre aide!

112
Hairgami_Master

Utilisez System.IO.StringReader :

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

Utilisez la classe StringReader qui hérite de TextReader.

7
Ilia G

StringReaderest a TextReader (StreamReader l'est aussi, mais pour lire des flux). Donc, en prenant votre premier exemple et en l'utilisant simplement pour construire le CsvReader plutôt que d'essayer de construire un StreamReader à partir de celui-ci, vous obtiendrez d'abord:

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

Vous voulez un StringReader

var val = "test string";
var textReader = new StringReader(val);
4
scottm

Utilisez simplement la classe StringReader . Il hérite de TextReader.

2
Ucodia

Si vous regardez la documentation de TextReader , vous verrez deux classes hériter. Et l’un d’eux est StringReader , qui semble faire exactement ce que vous voulez.

1
svick