#!/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/</; # и заменяем знаки <
if(($val eq "Дата Время")&&$lockheader){ # игнорируем повторный заголовок
$srstate="$nextstate";
$i = $strtoskipafter+1;
$lockCR=1;
}
elsif ($val eq "Длит.") # грёбаный Oracle Developer, надо вставлять столбец
{ print CSF "\"\";\"$val\";"; }
else # просто выводим
{ print CSF "\"$val\";"; };
$lockCR=0;
}
elsif((m/ $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);