В С#, как я могу создать объект TextReader из строки (без записи на диск) - программирование
Подтвердить что ты не робот

В С#, как я могу создать объект TextReader из строки (без записи на диск)

Я использую Быстрый 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

Любые идеи, если это правильный подход? Еще раз спасибо за вашу помощь!

4b9b3361

Ответ 1

Используйте System.IO.StringReader:

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

Ответ 2

Используйте класс StringReader, который реализует TextReader.

Ответ 3

StringReader - это TextReader (StreamReader тоже, но для чтения из потоков). Поэтому, беря ваш первый пример и просто используя его для построения CsvReader вместо того, чтобы пытаться построить из него StreamReader, он сначала дает:

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

Ответ 4

Вы хотите StringReader

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

Ответ 5

Просто используйте класс StringReader. Он наследуется от TextReader.

Ответ 6

Если вы посмотрите документацию для TextReader, вы увидите два наследующих класса. И один из них StringReader, который, кажется, делает именно то, что вы хотите.