Универсальный парсер для разбора ряда записей в Java - PullRequest
0 голосов
/ 31 марта 2012

У меня есть ряд записей, который имеет несколько столбцов. Разные столбцы могут содержать значения разных типов, таких как Long, String, Date и т. Д., Но один столбец будет иметь все значения одного типа. Я пытаюсь написать какой-то универсальный парсер, который может справиться с этим. Например, если я получу другой набор записей, я смогу настроить свой анализатор.

Input1

1, Jitendra, 2011-02-12
2, Xyz, 2011-02-13

Input2

XYZ, 34.00, 1
ABC, 56.00, 3

Примерно так.

Class Parser {
  int columnNo;
  String columnName;
  <Something here to identify data type of column> dataType;
}

Class ParsedRecord{
  String name;
  <Datatype> value;
}

Этот подход кажется осуществимым? Есть предложения?

Спасибо

Ответы [ 4 ]

1 голос
/ 31 марта 2012

Существуют фреймворки, которые позволяют вам сконфигурировать структуру записи в один XML-файл конфигурации и будут анализировать файлы для вас.Вы можете использовать:

Ваш вопрос связан с: Преобразованием плоского файла в объекты Java

0 голосов
/ 31 марта 2012

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

Ваши данные, как вы пояснили, будут одинаковыми по всем строкам (например, вы ожидаете ровно два типа String, один тип int и одинтип Date).Однако, если значения в файле могут отображаться в другом порядке, у вас будут искаженные данные, и файлу не следует доверять по номиналу.Лучше было бы гарантировать целостность данных, поскольку два String в любом порядке весьма неоднозначны (это имя? Адрес?).

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

0 голосов
/ 31 марта 2012

Ваш бин, очевидно, будет содержать Object для значения столбца. Но вы можете добавить Parser, который будет считывать данные из записи и конвертировать в объект соответствующего типа. Например, у вас будет IntegerParser, LongParser, DateParser и т. Д. Затем создайте общий анализатор, собрав правильный список анализаторов столбцов:

<bean id="myparser>
   <constructor-arg columns>
       <list>
          <value ref="DateParser"/>
          <value ref="IntegerPaser"/>
          ....
       </list>
   </constructor-arg>
 </bean>
0 голосов
/ 31 марта 2012

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

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