Как в C # создать объект TextReader из строки (без записи на диск)

Я использую Fast CSV Reader для синтаксического анализа вставленного текста на веб-страницу. Для чтения Fast 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

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


person Hairgami_Master    schedule 20.10.2011    source источник


Ответы (6)


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

using(TextReader sr = new StringReader(yourstring))
{
    DoSomethingWithATextReader(sr);
}
person Steve B    schedule 20.10.2011

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

person Ilia G    schedule 20.10.2011
comment
TextReader - это не интерфейс, это абстрактный класс. - person svick; 20.10.2011

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

TextReader sr = new StringReader(TextBox_StartData.Text);
using(CsvReader csv = new CsvReader(sr, true))
{
  DetailsView1.DataSource = csv;
  DetailsView1.DataBind();
}
person Jon Hanna    schedule 20.10.2011
comment
Спасибо, Джон ... Я думаю, что в Fast CSV Framework есть ошибка. Я получаю следующий результат:! screencast.com/t/5wZRrjDMO ... - person Hairgami_Master; 20.10.2011
comment
Мой CSV - это fname, lname, email john, doe, jd @ email.com - person Hairgami_Master; 20.10.2011
comment
Это (после просмотра исходного кода, чтобы увидеть, что вы в любом случае ссылаетесь на screencast.com/t/5wZRrjDMO ) выглядит так, как будто вы создаете серию массивов строк (по одной для каждой строки) и пытаетесь их отобразить, что приводит к повторению текста System.String []. Для меня это звучит как разумный результат работы парсера CSV, который не обрабатывается должным образом. Попробуйте вывести его в сетку и посмотреть, что произойдет. - person Jon Hanna; 20.10.2011
comment
Спасибо, Джон. На самом деле я использую GridView, я пробовал пару из них, но я предполагаю, что данные возвращаются правильно, это просто вопрос выбора правильного элемента управления отображением данных .. ?? - person Hairgami_Master; 20.10.2011
comment
Я обычно не использую элементы управления, так что может быть что-то мне не хватает. Результат выглядит как серия массивов строк (по одному массиву для каждой строки, по одной строке для каждой ячейки), что имеет смысл. Не уверен, почему это не работает, я боюсь :( - person Jon Hanna; 20.10.2011

Вам нужен StringReader

var val = "test string";
var textReader = new StringReader(val);
person scottm    schedule 20.10.2011

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

person Ucodia    schedule 20.10.2011

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

person svick    schedule 20.10.2011