Лучший метод С# для доступа к содержимому текстового файла

Я начинаю переходить от VB6 к C#. Хотя я опытный программист (40+ лет), часто мне помогает знание новых конструкций, а не старательный перевод построчно. Наша компания получает заказы текстовым файлом, состоящим из списка строк.

XXX=param1;param2
YYY=param1;param2

В VB6 я создал очень сложный класс строк для поиска, извлечения, обновления, добавления, удаления и вставки этих строк.

Предлагает ли С# уже существующую конструкцию или мне нужно будет написать свою собственную. Конструкция Dictionary выглядит хорошо, но меня беспокоит количество значений, а также то, есть ли способ импортировать файл за один раз, не читая его построчно.


person David Boccabella    schedule 24.06.2018    source источник
comment
Файл.ReadLines(). Затем разделите каждую строку на символ ‘;’   -  person maccettura    schedule 24.06.2018
comment
@maccettura я удалил свой комментарий   -  person Anirudha Gupta    schedule 24.06.2018
comment
@Ajay2707 прочитал мои мысли об использовании List‹T›. Со списком у вас есть встроенные методы для выполнения дальнейших действий с содержимым.   -  person nocturns2    schedule 24.06.2018
comment
Насколько велик ваш входной текстовый файл? Очень большие файлы, которые вы, вероятно, захотите читать построчно, чтобы не использовать много памяти. Я программирую уже 40 лет, и в парсинге текстовых файлов ничего особо не изменилось. Некоторые люди используют Regex, поскольку он эффективен и не обрабатывает входные данные, которые имеют множество разных форматов. Иногда я использую Regex для разбора одной строки на отдельные параметры.   -  person jdweng    schedule 24.06.2018


Ответы (2)


Нет, C# не предлагает такого рода вещей, вам нужно будет написать свой собственный анализатор файлов (вероятно, подобный тому, который у вас уже есть в VB6).

Я не думаю, что словарь поможет вам здесь (если только я не понял структуру вашего файла), словари предназначены для пар ключ-значение (так что это 2 значения на запись), но у вас, похоже, есть простые параметры (это означает, что ваши записи не выглядят как пары ключ-значение).

Вам было бы намного проще просто создать 1-2 класса для разбора, используя в основном:

  • File.ReadAllLines для чтения текстовых файлов и получения массива строк.
  • line.Split(';'), чтобы получить параметры каждой строки (при условии, что вы для каждой строки).
person Haytam    schedule 24.06.2018
comment
Большое спасибо за информацию. Максимум 300 строк, так что я думаю, что он вернулся к построчному переводу :) - person David Boccabella; 25.06.2018

Вы не упоминаете версию С#, @jonskeet упоминает в этом ответить о File.ReadLines,

Если вы используете .NET 4, просто используйте File.ReadLines, который сделает все за вас. Я подозреваю, что он почти такой же, как и ваш, за исключением того, что он также может использовать FileOptions.SequentialScan и буфер большего размера (128 кажется очень маленьким).

Основываясь на приведенном выше ответе, я ищу возможность преобразовать результат файла в список, и я получил answer, поэтому после преобразования вы также используете linq.

List<string> allLinesText = File.ReadAllLines(fileName).ToList()
person Ajay2707    schedule 24.06.2018
comment
Зачем использовать ReadLines(), а затем сразу вызывать ToList()? Либо выполните некоторую обработку результирующего IEnumerable из ReadLines(), либо просто вызовите File.ReadAllLines(). Есть разница (IEnumerable Vs List) - person maccettura; 24.06.2018
comment
.ToList преобразует результат массива в список, см. результат @Rama во вторых ссылках. - person Ajay2707; 24.06.2018
comment
Я ошибался. ReadAllLines() возвращает массив. Тем не менее странно не использовать ReadAllLines(), если вы не выполняете никакой обработки в IEnumerable. - person maccettura; 24.06.2018