Ответ 1
Используйте System.IO.StringReader:
using(TextReader sr = new StringReader(yourstring))
{
DoSomethingWithATextReader(sr);
}
Я использую Быстрый CSV-ридер для разбора вложенного текста на веб-страницу. Для быстрого чтения CSV требуется объект TextReader, и все, что у меня есть, это строка. Каков наилучший способ преобразования строки в объект TextReader на лету?
Спасибо!
Обновление- Пример кода. В исходном примере новый StreamReader ищет файл с именем "data.csv". Я надеюсь предоставить его через TextBox_StartData.Text.
Использование этого кода ниже не компилируется.
TextReader sr = new StringReader(TextBox_StartData.Text);
using (CsvReader csv = new CsvReader(new StreamReader(sr), true))
{
DetailsView1.DataSource = csv;
DetailsView1.DataBind();
}
new StreamReader(sr)
говорит мне, что у него есть некоторые недопустимые аргументы. Любые идеи?
Как альтернативный подход, я пробовал это:
TextReader sr = new StreamReader(TextBox_StartData.Text);
using (CsvReader csv = new CsvReader(sr, true))
{
DetailsView1.DataSource = csv;
DetailsView1.DataBind();
}
но я получаю Illegal characters in path Error.
Здесь образец строки из TextBox_StartData.Text:
Fname\tLname\tEmail\nClaude\tCuriel\[email protected]\nAntoinette\tCalixte\[email protected]\nCathey\tPeden\[email protected]\n
Любые идеи, если это правильный подход? Еще раз спасибо за вашу помощь!
Используйте System.IO.StringReader:
using(TextReader sr = new StringReader(yourstring))
{
DoSomethingWithATextReader(sr);
}
Используйте класс StringReader
, который реализует TextReader
.
StringReader
- это TextReader
(StreamReader
тоже, но для чтения из потоков). Поэтому, беря ваш первый пример и просто используя его для построения CsvReader
вместо того, чтобы пытаться построить из него StreamReader
, он сначала дает:
TextReader sr = new StringReader(TextBox_StartData.Text);
using(CsvReader csv = new CsvReader(sr, true))
{
DetailsView1.DataSource = csv;
DetailsView1.DataBind();
}
Вы хотите StringReader
var val = "test string";
var textReader = new StringReader(val);
Просто используйте класс StringReader. Он наследуется от TextReader.
Если вы посмотрите документацию для TextReader
, вы увидите два наследующих класса. И один из них StringReader
, который, кажется, делает именно то, что вы хотите.