Каков наилучший способ разобрать следующую запись журнала в Java? - PullRequest
0 голосов
/ 19 января 2012

Я работаю над задачей, которая будет анализировать файлы журналов.Как лучше всего проанализировать следующую строку журнала в Java?

    EMPLOYER  :   NAME      : Company          ID : 23                   TYPE     : Academy
                 FOUNDED    : 2012-01-05 11:01:18.658                    CATEGORY : College
    EMPLOYEE  :   NAME      :  John                                      TIN      : 123456
                 GENDER     :  Male                                      STATUS   : Prob
    COMMENT   : Data sent to 192.168.0.1:8088
    USER DATA : Any string.

Меня особенно интересуют ключевые слова "Работодатель" и "Сотрудник" (которые мне не нужны) и двоеточия, которые появляютсяв полях «Найден» и «Комментарий» (если я буду использовать двоеточие в качестве разделителя).

Спасибо!

1 Ответ

2 голосов
/ 19 января 2012

Нет лучшего способа для чего-то подобного.Это явно формат ad hoc без систематической мета-структуры (в отличие от XML, например ...)

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

Вы можете использовать генератор парсера, но это, вероятно, выходит за рамки ваших текущих возможностей.(В противном случае вы бы сделали это самостоятельно.)

Вместо этого я бы порекомендовал реализовать синтаксический анализатор с использованием Java Scanner класса.Проблема контекстно-зависимых разделителей может быть решена путем изменения регулярного выражения-разделителя в зависимости от того, что вы ожидаете дальше, или с помощью Scanner.nextLine(), чтобы получить остаток строки независимо от разделителей.*

Одна из проблем с такими вопросами заключается в том, что у вас нет четко определенного формата.Вместо этого вы только что показали нам простой пример.Этот пример может быть типичным , но он не касается крайних случаев.(Вы уже определили, по крайней мере, один из них.) И это также повышает вероятность того, что невозможно проанализировать записи файла журнала без встраивания «бизнес-знаний» в анализатор;Например, даты всегда будут в определенном формате, или что названия компаний никогда не будут содержать двоеточия.И если вы на самом деле не знаете, что это за правила (например, потому что они нигде не указаны должным образом), то ваш парсер будет хрупким.

...