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


я использую быстрый читатель CSV чтобы разобрать некоторые вставленные тексты на веб-странице. Для быстрого чтения CSV требуется объект TextReader, и все, что у меня есть, это строка. Каков наилучший способ преобразования строки в объект TextReader на лету?

спасибо!

обновление- Пример кода-в исходном примере новый StreamReader ищет файл с именем " data.csv". Я надеюсь поставить его через TextBox_StartData.Текст.

использование этого кода ниже не делает компилировать.

        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) говорит мне, что у него есть некоторые недопустимые аргументы. Есть идеи?

в качестве альтернативного подхода, я попытался это:

        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.Текст:

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

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

6 101

6 ответов:

использовать System.IO. StringReader :

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

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

вы хотите StringReader

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

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();
}

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

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