Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > Просьба помочь с RW


Автор: noobperl 20.5.2013, 14:40
Просьба помочь.
Если то, что я прошу, стоит денег/вознаграждения/гонорара - не вопрос, в личку.

Имеем в интернете страничку, которую генерирует веб-сервер. Там, на странице, голый текст, без кода.
Странички мои личные, чтоб визуально было понятно - укажу её ниже.
Событие "+" (онлайн) имеем: http://h-mem.ru/index1.htm
Событие "-" (оффлайн) имеем: http://h-mem.ru/index2.htm
для примера указал два разных файла, на самом деле данные генерируются в одну постоянную страницу, скажем index.htm

Независимо от события нужно из текста этих страниц обязательно вытащить (скажем на отдельную html страницу) и расположить упорядоченно:
Ф.И.О.: Василий Пупкин
гор.: Москва
р-н: Бутово
возр.: 25

В будущем хотелось бы данные (в виде переменных) сохранять в текстовый файл или в БД mysql, без разницы. Это уже другой этап.

Автор: alezzz 20.5.2013, 16:19
Вы бы сильно упростили себе жизнь, если бы пары имя=значение отделялись чем-то кроме пробела, а то в "Василий Пупкин активность" нужно догадаться что является названием параметра, а что его значением, как в "казнить нельзя помиловать".

В общем виде это выглядит так:
Код

use strict;

my $text = 'имя=Василий Пупкин активность=on-line город=Москва район=Бутово возраст=25';
$text =~ s/\s([^ =]+=)/\n$1/g;
my @array = split(/\n/, $text);
my %state;
foreach (@array){
    my ($name, $value) = split(/=/);
    $state{$name} = $value;
}

use Data::Dumper;
print Dumper %state;


Можно сразу в БД закидывать.

Автор: noobperl 20.5.2013, 17:31
alezzz
Спасибо, попробую реализовать ваш пример.
А по поводу упрощения жизни - дело в том, что текст не я генерирую, а сторонний чужой сервер, на которй я близко не могу повлиять.
Я просто при вел пример как бы...
В мыслях было использовать слово "активность" как "светофор красный"... Если слова "активность" нету в цепочке поиска, то следущее слово "город" также срабатывает как светофор. Всё что до "светофора" - будет входить в "имя". Как то так... Но как это реализовать через RW - не знаю.

Автор: DProf 23.5.2013, 19:21
Код

my ( $name, $act, $town, $region, $age);
my $text = 'имя=Василий Пупкин активность=on-line город=Москва район=Бутово возраст=25';

if    (
        $text =~ m/
            ^имя=        (?<name>.+)\s*
            активность=    (?<act>.+)\s*
            город=        (?<town>.+)\s*
            район=        (?<region>.+)\s*
            возраст=    (?<age>.+)\s*$
            /x
    )
{
    ( $name, $act, $town, $region, $age) = ( $+{name},$+{act},$+{town},$+{region},$+{age} );
}


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id519a0c106ccc192260000002#findElement_E7045_519e41fb6ccc198520005fce_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)