Является ли класс StreamReader в C # лучшим выбором для чтения моих данных? - PullRequest
1 голос
/ 29 марта 2011

Мне нужно прочитать в текстовом файле, который может варьироваться от 8 КБ до 5 МБ.Этот файл состоит из одной строки текста.Нет возврата каретки или конца строк.Затем мне нужно разбить его на отдельные части.Эти части ограничены по размеру.Например, первый кусок информации состоит из 240 символов.В этих 240 символах первые 30 являются полем имени.Следующие 35 адресов, и так далее.Разбирая в стороне, является ли класс StreamReader лучшим выбором для чтения его в память?

Ответы [ 2 ]

5 голосов
/ 29 марта 2011

Посмотрите класс TextFieldParser, хотя в пространстве имен Microsoft.VisualBasic.FileIO его можно легко использовать с C #.

Описание класса в MSDN:

Предоставляет методы и свойства для разбора структурированных текстовых файлов.

Примером использования может быть:

using(var tfp = new TextFieldParser("path to text file"))
{
    tfp.TextFieldType = FieldType.FixedWidth;
    tfp.FieldWidths = new int[] {5, 10, 11, -1};
}
0 голосов
/ 29 марта 2011

Я бы очень рекомендовал использовать StreamReader вместо чтения всего текста в строку из соображений эффективности кучи. У меня было много проблем со строками более 2 Мб без особых усилий (на 32-битном .NET).

Вам нужно дальнейшее руководство? Мне кажется, вы можете искать помощь в лечении потока. Обычно программисты имеют больший опыт работы со строками и, следовательно, предпочитают строгие решения.

Если вы добавите еще некоторые подробности о структуре данных, я могу вам немного помочь. Пока только один общий указатель:

Все парсеры и лексеры общего назначения используют потоковую модель ввода. например Посмотрите на Coco / C # для простого в использовании генератора парсеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...