#!/usr/bin/perl # Преобразует "Детализированный отчет по балансу" от МТС (HTML e-Mail) в CSV формат # М.Ю.З., 30.08.2003, 7.09.2003 # Программа берёт 2 параметра: имя HTML-файла (вх.) и имя CSV-файла (вых.) # HTML файл должен быть предварительно преобразован в кодировку ОС # Пропуск i строк в HTML-таблице sub SkipHTMLRows($$){ local ($message, $nextstate) = @_; if (m/(.*)<\/font>/) { $val=$1; $val=~s/ //; # удаляем HTML - пробелы $val=~s/</ $ofname") or die "не смогла открыть файл $ofname: $!"; $srstate="NOTFOUND"; @in=; $lc=0; $lockCR=1; # предотвращение появления пустых строк $lockheader=0; # предотвращение повторного вывода заголовка # Просматриваем HTML-отчёт foreach (@in){ last if m/(.*)Итого:(.*)\n/; # завершать будем по Итого: $lc++; if ($srstate eq "NOTFOUND"){ # Извлекаем начало таблицы if (m/(.*)Состоявшиеся разговоры:(.*)\n/) { print "$lc: найден заголовок состоявшихся разговоров\n"; $srstate="HDRFOUND"; $i = 5; }; } # пропускаем 4 строки HTML-таблицы и читаем 5-ю elsif($srstate eq "HDRFOUND"){ SkipHTMLRows("найден заголовок таблички", "NEXTTHCELL"); } # очередной столбец первой строки elsif($srstate eq "NEXTTHCELL"){ InputHTMLRow("SEARCHBEGSIMPLEROW", 3); } # пропускаем ещё 2 строки elsif($srstate eq "SEARCHBEGSIMPLEROW"){ SkipHTMLRows("найден(ы) разговор(ы)", "NEXTSIMPLECELL"); } # очередной столбец очередной строки elsif($srstate eq "NEXTSIMPLECELL"){ InputHTMLRow("NEXTSIMPLECELL", 0); } }; # конец входного файла # if($srstate ne "NEXTSIMPLECELL"){ die "$lc: неожиданный конец файла"; }; close(HTF); close(CSF);