Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Perl, не могу найти как исправить

44K
02 июня 2009 года
worsvch
14 / / 29.04.2009
Код:
#!/perl -w

use strict;
use Encode qw(from_to);

system('cls');

my @str;
my $x = 0;
my @tags = ("Surname","Name","Age");
my @klassf = ("Фамилия","Имя","Возраст");

sub parseStr {
    my $klsf = shift(@_);
    my $match = shift(@_);
    my $var = shift(@_);
    if ($str[$x] =~ m/<$var>(\W+)<\/$var>/) {    
       from_to($klsf,"cp1251","cp866");
       print "$klsf: $match\n";
    }
    elsif ($str[$x] =~ m/<$var>(\d+)<\/$var>/) {    
       from_to($klsf,"cp1251","cp866");
       print "$klsf: $match\n";
    }        
}

open XML, "< test.xml" or die "can't find file test.xml";
 while (<XML>) {
       push @str, $_;
       from_to($str[$x],"cp1251","cp866");    
       for (my $y = 0;$y <= 2;$y++) {
           parseStr($klassf[$y],$1,$tags[$y]);
       }
       $x++;      
 }
close XML;


Результат выходит такой:

Use of uninitialized value $match in concatenation (.) or string at c:\...\test.pl line 19, <XML> line 3.
Фамилия:
Use of uninitialized value $match in concatenation (.) or string at c:\...\test.pl line 19, <XML> line 4.
Имя:
Use of uninitialized value $match in concatenation (.) or string at c:\...\test.pl line 23, <XML> line 5.
Возраст:

А вот xml:
 
Код:
<?xml version="1.0" encoding="windows-1251"?>
<root>
 <Surname>Иванов</Surname>
 <Name>Иван</Name>
 <Age>23</Age>
</root>

Все файлы тестовые но скоро придется делать скрипт для настоящих, поэтому и прошу вас помочь разобраться
92
02 июня 2009 года
Тень Пса
2.2K / / 19.10.2006
возьми модуль для XML парсинга, или прям вот надо самому?

XML::Simple, XML::Parser, ......


эмммм.... и $1 у тебя относительно какого regexp'а получается, подумай над этим моментом...
я бы вместо match как раз и поставил $1, а параметр match убрал бы вообще...

и еще, зачем два условия... проверка на ТОЛЬКО буквы и ТОЛЬКО цифры... валидация? или может лучше использовать (.*?) ?
44K
02 июня 2009 года
worsvch
14 / / 29.04.2009
Цитата: Тень Пса
возьми модуль для XML парсинга, или прям вот надо самому?

XML::Simple, XML::Parser, ......


эмммм.... и $1 у тебя относительно какого regexp'а получается, подумай над этим моментом...
я бы вместо match как раз и поставил $1, а параметр match убрал бы вообще...

и еще, зачем два условия... проверка на ТОЛЬКО буквы и ТОЛЬКО цифры... валидация? или может лучше использовать (.*?) ?



Ага, спасибо, попробую Ваши варианты. А насчет валидации: просто с regexp пока не до конца разобрался :)

92
03 июня 2009 года
Тень Пса
2.2K / / 19.10.2006
только еще подумай всё же над моментом про $1 и почему у тебя ничего не получилось... а не просто возьми и сделай что я говорю. это только моё мнение и я могу ошибаться ) как никак не проверяю, да и писал почти в полночь ;)

ЗЫ: на твоем месте, я бы так легко не доверился ;)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог