В C #, как я могу создать объект TextReader из строки (без записи на диск) - PullRequest
111 голосов
/ 20 октября 2011

Я использую Быстрый CSV Reader для анализа вставленного текста на веб-странице.Fast CSV Reader требует объект 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\tClaude.Curiel@email.com\nAntoinette\tCalixte\tAntoinette.Calixte@email.com\nCathey\tPeden\tCathey.Peden@email.com\n

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

Ответы [ 6 ]

211 голосов
/ 20 октября 2011

Использование System.IO.StringReader :

using(TextReader sr = new StringReader(yourstring))
{
    DoSomethingWithATextReader(sr);
}
7 голосов
/ 20 октября 2011

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

4 голосов
/ 20 октября 2011

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

TextReader sr = new StringReader(TextBox_StartData.Text);
using(CsvReader csv = new CsvReader(sr, true))
{
  DetailsView1.DataSource = csv;
  DetailsView1.DataBind();
}
4 голосов
/ 20 октября 2011

Вы хотите StringReader

var val = "test string";
var textReader = new StringReader(val);
2 голосов
/ 20 октября 2011

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

1 голос
/ 20 октября 2011

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

...