In C#, how can I create a TextReader object from a string (without writing to disk)

110.2k views Asked by At

I'm using A Fast CSV Reader to parse some pasted text into a webpage. The Fast CSV reader requires a TextReader object, and all I have is a string. What's the best way to convert a string into a TextReader object on the fly?

Thanks!

Update- Sample code- In the original sample, a new StreamReader is looking for a file called "data.csv". I'm hoping to supply it via TextBox_StartData.Text.

Using this code below doesn't compile.

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

The new StreamReader(sr) tells me it has some invalid arguments. Any ideas?

As an alternate approach, I've tried this:

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

but I get an Illegal characters in path Error. Here's a sample of the string from TextBox_StartData.Text:

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

Any ideas if this the right approach? Thanks again for your help!

6

There are 6 answers

0
Steve B On BEST ANSWER

Use System.IO.StringReader :

using(TextReader sr = new StringReader(yourstring))
{
    DoSomethingWithATextReader(sr);
}
5
Jon Hanna On

StringReader is a TextReader (StreamReader is too, but for reading from streams). So taking your first example and just using it to construct the CsvReader rather than trying to construct a StreamReader from it first gives:

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

Use the StringReader class, which inherits TextReader.

0
scottm On

You want a StringReader

var val = "test string";
var textReader = new StringReader(val);
0
Ucodia On

Simply use the StringReader class. It inherits from TextReader.

0
svick On

If you look at the documentation for TextReader, you will see two inheriting classes. And one of them is StringReader, which seems to do exactly what you want.