Стратегии обработки файла с несколькими фиксированными форматами

Этот вопросне Специфичный для Perl (хотяunpack функция, скорее всего, войдет в мою реализацию).

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

Вот пример (комментарий к RHS):

                                       # | Format | Level | Comment
                                       # +--------+-------+---------
**DEVICE 109523.69142                  #        1       1   file-specific
  .981    561A                         #        2       1
10/MAY/2010    24.15.30,13.45.03       #        3       2   group of records
05:03:01   AB23X  15.67   101325.72    #        4       3   part of single record
*           14  31.30474 13        0   #        5       3   part of single record
05:03:15   CR22X  16.72   101325.42    #        4       3   new record
*           14  29.16264 11        0   #        5       3
06:23:51   AW41X  15.67    101323.9    #        4       3
*           14  31.26493219        0   #        5       3
11/MAY/2010    24.07.13,13.44.63       #        3       2   group of new records
15:57:14   AB23X  15.67   101327.23    #        4       3   part of single record
*           14  31.30474 13        0   #        5       3   part of single record
15:59:59   CR22X  16.72   101331.88    #        4       3   new record
*           14  29.16264 11        0   #        5

Логика у меня на данный момент хрупкая:

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

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

Ответы на вопрос(6)

Ваш ответ на вопрос