Нужно предложение по чтению огромных XL с проверкой данных - PullRequest
2 голосов
/ 13 июня 2011

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

ниже приведен пример структуры файла:

(Header - Colume_name,Variable_type,field_size,i/p mask,required_field,validation_Text) 
(P/N,String,20,none,yes,none)           
(qty,Integer,10,none,yes,none)
(Ship_From,String,20,none,yes,none)
(Request_Date,Date,MM/DD/YY ,yes,none)  
(Status,String,10,none,yes,Failed OR Qualified)

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

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

Любые ранние ответы будут высоко оценены.

Спасибо, Ашиш Гупта

Ответы [ 4 ]

2 голосов
/ 14 июня 2011

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

Кажется, что это двухэтапный процесс: 1) Проверка и компиляция файла проверки и 2) Компиляция вывода прохода 1 и применение его к файлу Excel.

Вы можетеподходите к полевой валидации любым из нескольких способов, в зависимости от ваших навыков и склонностей.

  • Разработка кода VBA для чтения файла проверки.Затем напишите отдельный макрос для проверки каждой строки
  • Напишите синтаксический анализатор на вашем любимом языке, который читается в файле проверки.Добавьте некоторые столбцы в электронную таблицу Excel для чтения с полями, такими как имя столбца (например, Qty), тип (например, Integer), обязательно (например, true).Затем Excel или OpenOffice выделят недопустимые строки
  • Пусть lex и yacc сгенерируют Java или C ++ парсер для сканирования файла проверки и вывода BNF.Затем прочитайте другой файл lex и yacc в выходных данных предыдущего шага и проверьте файл Excel.

Вы указали POI в своем теге, так что я думаю, что вы захотитегенерировать код Java.

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

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

(Когда я читал ваш файл проверки, пришла в голову мысль: как вы отделите одну часть отдругой? Например, если вы читаете в P/N, Qty, Request_Date, Ship_From, Status, P/N, это одна часть с двумя P / N или одна полная часть и одна с несколькими необходимыми деталями?)

1 голос
/ 14 июня 2011

Моей первой мыслью было сделать так, чтобы Excel выполнил эту проверку, как, похоже, предлагает и Раджа.Встроенная функциональность и / или VBA должны быть в состоянии удовлетворить эти требования.Если вам нужно справиться с этим в Java, я бы остановился на подходе XML.

0 голосов
/ 11 июля 2011

У меня есть валидатор Excel на основе XML, созданный поверх POI.Вам просто нужно указать, какие данные вам нужно проверить в Excel, API Java выполняет проверку и возвращает сообщение об ошибке, если оно недействительно.

Например:

YИмя

Выше приведена простая проверка для простого текстового поля, она также имеет дополнительные проверки, пожалуйста, дайте мне знать, если вы заинтересованы?

0 голосов
/ 14 июня 2011

Я слышал, как друг проверял свои таблицы с помощью JBOSS DROOLS: http://www.jboss.org/drools

...