Як в C # я можу створити об'єкт TextReader з рядка (без запису на диск)


126

Я використовую швидкий читач 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\tClaude.Curiel@email.com\nAntoinette\tCalixte\tAntoinette.Calixte@email.com\nCathey\tPeden\tCathey.Peden@email.com\n

Будь-які ідеї, якщо це правильний підхід? Ще раз дякую за вашу допомогу!

Відповіді:



9

Використовуйте StringReaderклас, який успадковується TextReader.


3
TextReaderце не інтерфейс, це абстрактний клас.
svick


4

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

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

Дякую, Джон ... Я думаю, що у програмі Fast CSV Framework є помилка. Я отримую результат, який виглядає приблизно так:! screencast.com/t/5wZRrjDMO ...
Hairgami_Master

Мій CSV - ім'я, ім'я, електронна пошта john, doe, jd @
email.com

1
Це (після того, як я переглядаю-джерело, щоб побачити, що ви все-таки посилаєтесь на screencast.com/t/5wZRrjDMO ), схоже, ви створюєте ряд масивів рядків (по одному для кожного рядка) та намагаєтесь їх надати, в результаті чого текст "System.String []" повторюється. Мені це здається розумним результатом аналізатора CSV, який не обробляється добре. Спробуйте вивести його на сітку та побачити, що відбувається.
Джон Ханна

Дякую, Джон. Насправді, я використовую GridView, я спробував пару з них, але я здогадуюсь, що дані повертаються належним чином, це просто питання правильного контролю відображення даних .. ??
Hairgami_Master

1
Я, як правило, не використовую великі елементи керування, тому там я можу щось бракувати. Здається, що висновок представляє собою ряд масивів рядків (один масив для кожного рядка, один рядок для кожної комірки), що має сенс. Не впевнений, чому це не працює понад те, що я боюся :(
Джон Ханна


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.