В минувший четверг возникла неординарная задачка — слить семь файлов неизвестного формата в один. Проблема была в том, что нашими «финиками» в некой сбербанковской программе были подготовлены семь списков военнослужащих (со всеми реквизитами необходимыми для перевода денег), которые будут получать повышенную ЗП. Сбербанк эти семь списков принимать отказался, сказали, что нужно объединить их в один большой список. В силу ублюдочности софтины и большого количества записей (почти тысяча рыл) наши «финЫ» слегка подняпряглись. Вручную этим заниматься желающих не нашлось. Поэтому было принято решение подключить элиту Российских Вооруженных Сил — Отдел Автоматизации Штаба МВО в моем лице. При постановке задачи «финики» клялись и божились что все хранится в foxproшных базах и вроде как все очень просто должно получиться. Ага. Щас. Если бы все лежало в человеческих базах данных (да-да, после этой задачи я стал считать foxpro человеческой СУБД), то проблем не возникло бы. Чего сложного подцепить файл с базой через ODBC или Access и мацать его как заблагорассудится. Однако я ошибался. Я жестоко ошибался.

    Разминка началась с установки и обзора интерфейса программы. Софтина при инсталляции наивно пыталась пробраться на диск c:/ , не зная, по видимому, что я стараюсь все «бешеные» программы держать подальше от системного диска. Поэтому установил не по дефолтному пути c:/reestredit а на в f:/work/reestredit После установки состоялся первый запуск и осмотр ГУЯ. Интерфейс состоял из пяти кнопок, по нажатию на которые вылезали диалоговые окна различной степени ущербности. Больше всего понравилась кнопка подготовки реестров к отправке. При нажатии на оную выскакивал диалог бодро сообщающий о том, что все файлы для отправки помещены в папку c:/reestredit/не отправлять. Ещё раз повторю — файлы для отправки помещены в папку «не отправлять». Плюс автор этого сучьего набора байтов наивно полагал, что программа будет всегда запускаться с диска c:/ Дурачок. Однако симптоматично. Именно после всех этих глупостей мне было откровение — яростного совокупления в процессе выполнения задачи не избежать.

    Следующее открытие выбило меня из колеи на пол часа как минимум, даже пошел кофе налил себе. Оказывается что все данные хранятся в файлах с каким-то дегенеративным самопальным форматом. Коллизия была в том что в папке с программой лежало несколько dllшек для работы с foxpro. Открывшаяся правда заставила меня прослезиться — foxproшная база в программе действительно использовалась. Но использовалась она исключительно для хранения НАСТРОЕК программы! Вот она сила человеческого интеллекта! Вот она мощь банковского софта, чью фундаментальную ущербность никто не сможет превзойти.

    Теперь всем уже стало очевидно, что придется «хексить» файлы с данными. Именно это занятие стало источником нечеловеческого количества эмоций. Структура была феерична — в заголовке хранилось куча инфы. Например, дата последнего обращения к файлу. Автор по-ходу был не в курсе, что эта информация хранится в файловой системе. В конце файла, после всех записей стояла ТОЧКА, символизирующая конец файла. Про EOF автор, видимо, так же не был осведомлен. В хранении целочисленных данных была полная разножопица — то они хранились в виде четырех байт, то в виде строки, в которой цифры были выровнены либо по левому краю либо по правому. В общем полный ахтунг.

    К счастью вся история закончилась благополучно — за семь объединенных файлов «финЫ» расплатились бутылкой водки и обещали выделить денег на новое оборудование.

Добавить комментарий


Защитный код
Обновить