LINUX.ORG.RU

детализация разговоров - разбор на перле


0

0

помогите разобраться как вытащить из отчетика детализации разговоров в формате html с помощью перла. "Дата" "Время" "Номер" "Зона ПС" "Зона ВТК" "Услуга" "Длит. мин:ceк" "Стоимость у.е." код выглядит следующим образом и повторяется на каждый звонок, смс или выход в инет:

<tr> <td style="text-align:left;">01.01.2006</td> <td style="text-align:left;"> 1:53:27</td> <td style="text-align:right;">7913xxxxxx</td> <td style="text-align:right;"></td> <td style="text-align:right;"></td> <td style="text-align:right;">Телеф.</td> <td style="text-align:left;"></td> <td style="text-align:right;">0:17</td> <td style="text-align:right;">0.0000</td> </tr>

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

anonymous

Это не лучший способ, зато проще в данном случае.
Пусть в $html - весь HTML-отчёт. 

$html =~ s/<td .*?>//g;
$html =~ s/<\/td>//g;
$html =~ s/<tr>//g;
@lines = split "<\/tr>", $html;
foreach(@lines)
{
  my(
    $X_date,
    $X_time,
    $X_zoneP,
    $X_zoneV,
    $X_service, $X_time, $X_total) = split(/[ \t]+/, $_);
#
#   тут что-то делаешь с $X_-переменными 
#
}

Вот.

Spectrum
()
Ответ на: комментарий от Spectrum

my( $X_date, $X_time, $X_zoneP, $X_zoneV, $X_service, $X_time, $X_total) = split(/[ \t]+/, $_);

этот способ не срабатывает, если одно из полей пусто. А в отчете почти всегда два поля пусты

anonymous
()
Ответ на: комментарий от anonymous

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

$html =~ s/[ \t]*<td .*?>//g;
$html =~ s/<\/td>[ \t]*//g;
$html =~ s/[ \t]*<tr>//g;
@lines = split "<\/tr>[ \t]*", $html; 

Spectrum
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.