Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Фунцкция с регул. выраж.


Автор: les 4.5.2008, 23:40
Здравствуйте.
Попал в сутуацию  для меня тупиковую. Вот гляньте плиз.
Код

#!/usr/bin/perl -w

use XML::RSS;

sub get_news
{
    my $title = $_[0];
    my $file_name  = $_[1];
    open (FILE,'<',$file_name);
    my $text_news;
    while (<FILE>)
             {
                 $text_news.=$_;
             }
    close FILE;
      if ($text_news =~ m/($title)/sm)
        {
        return $1."\n";
        }
        else {return "ненайдено\n";}
}

my $rss = new XML::RSS (version => '2.0',encoding=>'Windows-1251');
$rss->parsefile('lenta2.rss');
$y = "Привет дядя Паше";
my $x = ($rss->{'items'}[0]->{'title'});
print "X = $x\n";
if ($x eq "Привет дядя Паше") {print "ok1\n";} else {print "косяк \n";}
print get_news ($x,'Readme.txt'); #содержание файла  "я сказал Привет дядя Паше, и все услышали"
print get_news ("Привет дядя Паше",'Readme.txt');
print get_news ($y,'Readme.txt');

open IN,'<R.txt';  #содержание файла "Привет дядя Паше"
$z = <IN>;
if ($z eq "Привет дядя Паше") {print "okey\n";}
print get_news ($z,'Readme.txt');


и выдает

Код

X = Привет дядя Паше
косяк 
ненайдено
Привет дядя Паше
Привет дядя Паше
okey
Привет дядя Паше


уже не знаю... хоть на потолок лезь....Уже просто сижу туплю...Почему $x нормально не интерпритируется?

Автор: les 5.5.2008, 01:15
Почемк выползает так - разобрался... $x в utf8
но при
Код

$x=Encode::encode('cp1251', Encode::decode('utf8', $x));

выдает 
Код

Cannot decode string with wide characters at C:/Perl/lib/Encode.pm line 162.


Хотя если взять.. и сохранить $x и потом прочесть из файоа то все по волшебству кодируется...
Помогите плиз, у меня вся инфа в таком формате парситься из rss.....

Автор: les 5.5.2008, 01:51
Я что совсем заблудиося....
использую модуль XML::RSS для парсинга. Как я понял ,все данные исходящие "из" него в utf8, работаю по виндами.... 
Подскажите, мож этот модуль некорректоно работает с UTF8.

Код

"Милан" помешал "Интеру" досрочно стать чемпионом Италии
Спорт
http://lenta.ru/news/2008/05/04/soccer/
Миланский "Интер" упустил шанс досрочно выиграть чемпионат Италии по футболу, уступив в матче 36-го тура "Милану" (1:2). За два тура до конца первенства отрыв "Интера" от идущей на втором месте "Ромы" сократился до трех очков, но миланский клуб сохраняет хорошие шансы на то, чтобы защитить титул чемпиона Италии.
Миланский "Интер" ÑƒÐ¿ÑƒÑÑ‚ил шанс досрочно выиграть чемпионат Италии по футболу, уступив в матче 36-го тура "Милану" (1:2). За два тура до конца первенства отрыв "Интера" Ð¾Ñ‚ идущей на втором месте "Ромы" ÑÐ¾ÐºÑ€Ð°Ñ‚ился до трех очков, но миланский клуб сохраняет хорошие шансы на то, чтобы защитить титул чемпиона Италии.  Ð’ матче с "Интером" "Милан" Ð²Ð»Ð°Ð´ÐµÐ» заметным преимуществом на протяжении большей части встречи, и в начале второго тайма номинальные хозяева поля забÐчемпионов.
Sun, 04 May 2008 18:54:40 +0400


вот такое получается - все что читабельно, это сохранение прямо из парсера в хеш и потом в файл, крякозабры - ручками выдернуты с сайтика из под 1251 и перекодированые перед сохранением в utf8

Автор: Bulat 5.5.2008, 09:19
Цитата(les @  5.5.2008,  01:51 Найти цитируемый пост)
ручками выдернуты с сайтика из под 1251 и перекодированые перед сохранением в utf8

Как и с помощью чего выдераешь, перекодируешь??

Автор: les 5.5.2008, 13:43
видираю регэкспами и перекодирую Encode::encode('utf8', Encode::decode('cp1251', $_))

Автор: Bulat 5.5.2008, 19:32
Цитата(les @  5.5.2008,  13:43 Найти цитируемый пост)
Encode::encode('utf8', Encode::decode('cp1251', $_)) 

Хм, таким образом никогда не перекодировал

вообще помогало более простое
Код

use Encode qw(from_to);
...
from_to($str, $src, $dst);


в твоем случае $src = 'cp1251', а $dst = 'utf8' smile

Автор: les 5.5.2008, 21:26
Было решено "послать" этот парсер... его универсальность это конечно очень хоршо, но под конкретный пример его слишком "много", регулярными получилось в РАЗЫ быстрее и понятнее.

Автор: tolkien 6.5.2008, 20:38
Молоток ). Я давно уже послал HTML парсер туда же.

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