Как прочитать два объекта из одного текстового файла с помощью файловых помощников или другой библиотеки в С#

Текстовый файл содержит строки заказа и сведений о заказе. Первая строка в шапке заказа. После этого идет переменное количество строк детализации. После детализации идет пустая строка, за которой следует следующий заказ и т. д. Для строки заказа первым полем является номер заказа. Для строки сведений первое поле всегда равно 1.

128502 02.01.2012 20120 02.01.2012
1   Wine    0   1300
1   Meat    5,8333  5,83

128503 02.01.2012 20123 02.01.2012  
1   Wine    20  130
1   Meat    1,33    283,23
1   Cow 2,333   333,23

....

Этот файл необходимо прочитать в список сущностей:

class Order {
  public string Number; // order number from first field, primary key 
  public string Date;
  ... other fields  
}


class OrderDetails {
  public string Number; // order number from previous line , foreign key to Order
  public string ProductName;
  ... other fields  
}

(Вместо этого в числовом столбце пользовательского целочисленного идентификатора также можно использовать для отношения)

Как прочитать такой файл в С# ASP.NET MVC2 с помощью библиотеки FileHelpers или другим способом?

Обновить

образец

http://www.filehelpers.com/example_multirecords.html

со ссылкой на

Несколько структур CSV с FileHelpers

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


person Andrus    schedule 30.06.2012    source источник
comment
Что вы пробовали?   -  person millimoose    schedule 30.06.2012


Ответы (1)


Ну, вы могли бы использовать грубую силу за один раз. Читать в целом файл Разделить на пустое вроде. Создайте Заказ из первой строки каждого разделения. Создайте детали из остальных.

Если файлы огромны, вы можете прочитать каждую пустую строку, а затем обработать, как указано выше.

Еще одно решение, которое может иметь некоторые преимущества.

Пропустите файл через процесс, который редактирует строку сведений и добавляет номер заказа из строки реального заказа. Затем другой, который разделяет порядок и детали на два отдельных файла. Затем обрабатывайте заказы, а затем детали, не беспокоясь обо всех этих мелочах и двух структурах.

Четвертое решение: хорошенько избить того, кто придумал этот формат, чтобы побудить его сделать это правильно...

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

person Tony Hopkinson    schedule 30.06.2012