In C#, how can I create a TextReader object from a string (without writing to disk)
Solution 1
Use System.IO.StringReader :
using(TextReader sr = new StringReader(yourstring))
{
DoSomethingWithATextReader(sr);
}
Solution 2
Use the StringReader
class, which inherits TextReader
.
Solution 3
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();
}
Solution 4
You want a StringReader
var val = "test string";
var textReader = new StringReader(val);
Solution 5
Simply use the StringReader class. It inherits from TextReader.
Hairgami_Master
Updated on June 30, 2020Comments
-
Hairgami_Master almost 4 years
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!
-
svick over 12 years
TextReader
is not an interface, it's an abstract class. -
Hairgami_Master over 12 yearsThanks 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 over 12 yearsMy CSV is fname,lname,email john,doe,[email protected]
-
Jon Hanna over 12 yearsThat (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.
-
Hairgami_Master over 12 yearsThanks 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..??
-
Jon Hanna over 12 yearsI 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 :(