Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные выражения, Regexp::Common и UTF-16 
:(
    Опции темы
Даниил
Дата 18.7.2006, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.7.2006

Репутация: нет
Всего: нет



Вопрос в следующем:

Вот есть некий фрагмент кода
==
use Regexp::Common qw[Email::Address];
  use Email::Address;
  ...
  ...
  my $text = read_textfile($fullpath);

   ###ищем e-mail'ы   в файле
   my (@found) = ($text=~ m/($RE{Email}{Address})/g);
   my (@addrs) = map $_->address,
                      Email::Address->parse("@found");

  ##ищем числа в файле
  my (@d) = ($text =~m/(\d+)/g);
  
###Функция считывания из файла
sub read_textfile
{
  my $filename = $_[0];
  my $str = '';
  my @arr;

  if (open(TEXT_FILE, $filename))
  {
     @arr = <TEXT_FILE>;
     close(TEXT_FILE);
  }
  else
  {
     print "error reading $filename : $! <BR>";
  }
  return join('',@arr);

}

==

Всё работает хорошо, если мы имеем обычный ANSI-файл. 

А если файл записан в UTF-16, то ничего не работает. Вопрос - что нужно, чтобы регулярные выражения и Regexp::Common работали и в UTF-16?


Документацию по работе с Unicode в Perl читал, но не очень понял, как же быть именно с моим случаем.
PM MAIL   Вверх
nitr
Дата 18.7.2006, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



можно perldoc Encode отличный модуль ;) (имхо самый практичный)
можно также читать юникод через файлов. манипулятор:
Код

open TEXTFILE, "<:encoding(UTF-16)", $filename; #чтение

и совет по поводу метода чтения файла, который ты использовал... поиск на форуме поможет найти "лучший" вариант ;) 


--------------------
PM   Вверх
Даниил
Дата 18.7.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.7.2006

Репутация: нет
Всего: нет



nitr, 
В случае, когда я пишу
open TEXTFILE, "<:encoding(UTF-16)", $filename; 

у меня из файла вообще ничего не считывается.
 
PM MAIL   Вверх
nitr
Дата 18.7.2006, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



ну во-первых используем подсветку (благо отлично реализована на форуме)
я же изначально сказал, можно так же использовать модуль, для этого в командной строке выполнить:
perldoc Encode

а так... 
...
Код

...
use Encode qw(encode);
my $text = read_textfile($fullpath);
$text = encode('your_codename', $text);

а точно текст UTF-16 smile , может UTF-8, да и в какую кодировку тебе. Покажи кусочек файла в аски утф-16 smile

поиск на форуме, тут очень много уже обсуждали, а так читайте perldoc Encode 

Это сообщение отредактировал(а) nitr - 18.7.2006, 19:31


--------------------
PM   Вверх
Даниил
Дата 21.7.2006, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.7.2006

Репутация: нет
Всего: нет



nitr, 
поиском на форуме искал. Про регулярные выражения и UTF-16 не нашёл.
Да, точно UTF-16, а не UTF8. На каждый символ под два байта, в т.ч. и латинские.
perldoc Encode прочитал. Опять-таки, как применить к регулярным выражениям - не нашёл. 
PM MAIL   Вверх
nitr
Дата 23.7.2006, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



пока не пойму что и для чего... в регулярках зачем применять... работай с текстом, а потом кодируй и декодируй ;)
my $text = read_textfile($fullpath);
после этой строки обрабатывай переменную $text 


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.