среда, 25 февраля 2009 г.

Про perl, или применение на работе полученных знаний в процессе разработки сайта

На работе возникла задача - "вытащить" запросом из базы информацию о сотрудниках нашей организации. Причем вытащить из системы, разработанной подрядчиками, правда по системе есть документация. Нашел в документации обзор который показывает нужную информацию, выполнил запрос, посмотрел что получилось. Оказалось, что запрос показывал не все записи, но вот как понять, по каким полям фильтрует данные подрядчик, в документации этого нет, на "рытье" в исходниках времени нет. Попробовал открыть на портале страницу, возвращающую все доступные записи в виде таблицы. Скопировал эту таблицу в буфер обмена, отрыл Excel, нажал Paste и ... Процессор ушел в 100% загрузку, Excel минут 10 пытался вставить информацию из буфера обмена, но безрезультатно. Мне надоела ждать, "срубил" Excel. Открыл исходник страницы с этой таблицей, вырезал из него только таблицу, попробовал открыть получившийся документ в Word'е. Результат аналогичный Excel'ю. Вот незадача, но надо же понять почему на портале отображается на 10 записей больше чем в запросе. Перебирать все 1500 фамилий сотрудников в поисках несовпадений глазами весьма затруднительно. Как же выбрать из портальной страницы только фамилии, чтобы их сопоставить с найденными запросом.
Задача была решена меньше чем за 5 минут. Я написал маленький скрипт на perl, который "вырезал" из html-ой таблицы фамилии сотрудников. Еще через 5 минут, после использования функции ВПР в Excel я нашел недостающие в запросе фамилии и понял, что всего-то надо было поставить NVL(value, 0) на одно из фильтруемых полей.
Кстати, perl-овый обрабатывал html-ную таблицу размером примерно 3.5 мегабайта около 3-х секунд. Word и Excel отдыхают. Вот этот код:
require HTML::TokeParser;
my $p = HTML::TokeParser->new('c:\qqq.html');
while (my $token = $p->get_tag("a"))
{
print $p->get_trimmed_text . "\n"
if($token -> [1] -> {onclick} eq 'showEmployee(); return false;');
}
Небольшой оффтопик. Случайно набрел на блог праздного небогача, в котором наткнулся на превосходную идею тиражирования блога. Скоро появятся http://nobyru.blog.ru, http://nobyru.ya.ru, http://nobyru.livejournal.com. Ссылки на сайт Отзывы о путешествиях никогда не будут лишними.

1 комментарий:

  1. Ну вообще-то Perl и задумывался как язык для обработки текстов.

    ОтветитьУдалить