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


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



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?


new StreamReader(sr)



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:


Illegal characters in path Error.


FnametLnametEmailnClaudetCurieltClaude.Curiel@email.comnAntoinettetCalixtetAntoinette.Calixte@email.comnCatheytPedentCathey.Peden@email.comn



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




6 Answers
6



Use System.IO.StringReader :


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



Use the StringReader class, which inherits TextReader.


StringReader


TextReader





TextReader is not an interface, it's an abstract class.
– svick
Oct 20 '11 at 14:57


TextReader





@svick seems like an irrelevant detail, but corrected.
– Ilia G
Oct 20 '11 at 14:59



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:


StringReader


TextReader


StreamReader


CsvReader


StreamReader


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





Thanks Jon... I think there's a bug with the Fast CSV Framework. I'm getting a result that looks like this: !screencast.com/t/5wZRrjDMO...
– Hairgami_Master
Oct 20 '11 at 16:17






My CSV is fname,lname,email john,doe,jd@email.com
– Hairgami_Master
Oct 20 '11 at 16:21






That (after I view-source to see that you are linking to screencast.com/t/5wZRrjDMO anyway) looks like you are producing a series of arrays of strings (one for each line), and trying to render them, which results in the text "System.String" repeated. This sounds to me like a reasonable result from a CSV parser, not handled well. Try outputting it to a grid-view and see what happens.
– Jon Hanna
Oct 20 '11 at 16:24





Thanks Jon- Actually, I am using a GridView, I've tried a couple of them, but I'm guessing the data is being returned properly, it's just a matter of choosing the right Data Display Control..??
– Hairgami_Master
Oct 20 '11 at 16:27






I tend not to make heavy use of controls, so there may be something there I'm missing. The output seems to be a series of arrays of strings (one array for each row, one string for each cell), which makes sense. Not sure why it's not working beyond that I'm afraid :(
– Jon Hanna
Oct 20 '11 at 16:30



You want a StringReader


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



Simply use the StringReader class. It inherits from TextReader.



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.


TextReader


StringReader






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Comments

Popular posts from this blog

paramiko-expect timeout is happening after executing the command

Opening a url is failing in Swift

Export result set on Dbeaver to CSV