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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пакет Date::Manip, определение формата даты по русски 
V
    Опции темы
HeR0vn1k
Дата 19.10.2007, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.
Пользуюсь пакетом Date::Manip. Ни как не могу распарсить русский формат дат.

Если использовать такой вариант "today"  или "11 december 2006" :
Код

use Date::Manip qw(Date_Init ParseDate UnixDate);
&Date_Init("TZ=EST", "DateFormat=non-US");

my $today = "today";
my $date = ParseDate($today);
print $date;
или
Код

my $today = "11 december 2006";
my $date = ParseDate($today);
print $date;
то парсер всё определяет, а если руский вариант "сегодня" или "11 декабря 2006" :
Код

use Date::Manip qw(Date_Init ParseDate UnixDate);
&Date_Init("TZ= GMT", "DateFormat=RU");
# или такой вариант
&Date_Init('TZ= ZP5', 'Language=Russian', 'DateFormat=non-US');

my $today = "сегодня";
my $date = ParseDate($today);
print $date;
или
Код

my $today = "11 декабря 2006";
my $date = ParseDate($today);
print $date;
так не получается. Выдает undef.

Что именно нужно прописать в Date_Init, чтоб парсер с русской строки определял даты?
PM MAIL   Вверх
nitr
Дата 19.10.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

Date_Init("Language=Russian","DateFormat=non-US");

ну если Russian не срабатывает (и верить докам), то
Цитата

NOTE: Some date forms do not work as well in languages other than English, but this is not because Date::Manip is incapable of doing so (almost nothing in this module is language dependent). It is simply that I do not have the correct translation available for some words. If there is a date form that works in English but does not work in a language you need, let me know and if you can provide me the translation, I will fix Date::Manip.





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


Новичок



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

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



нет, не в этом проблема. Русский язык поддерживается (примерно) с версии 5.42! Псоледняя на сегодня Version5.45. Пока ковырялся нашел причину. Все данные передаются на Linux сервер, а там русского нет и поэтому названия "сегодня", "вчера" и пр. написаны в другой кодировке. 
Вот исходники пакета Date::Manip:
Код

sub Date_Init_Russian {
  print "DEBUG: Date_Init_Russian\n"  if ($Curr{"Debug"} =~ /trace/);
  my($d)=@_;
  my(%h)=();
  &Char_8Bit(\%h);
  my($a) =$h{"a:"};
#...
$$d{"years"}   =["\xc7","\xc7\xc4","\xc7\xcf\xc4","\xcc\xc5\xd4",
                   "\xcc\xc5\xd4","\xc7\xcf\xc4\xc1"];
  $$d{"months"}  =["\xcd\xc5\xd3","\xcd\xc5\xd3\xd1\xc3",
                   "\xcd\xc5\xd3\xd1\xc3\xc5\xd7"];
  $$d{"weeks"}   =["\xce\xc5\xc4\xc5\xcc\xd1","\xce\xc5\xc4\xc5\xcc\xd8",
                   "\xce\xc5\xc4\xc5\xcc\xc9","\xce\xc5\xc4\xc5\xcc\xc0"];
#...

Теперь буду писать конвектор с русского на нужную кодировку.

Это сообщение отредактировал(а) HeR0vn1k - 19.10.2007, 14:01
PM MAIL   Вверх
nitr
Дата 19.10.2007, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



HeR0vn1k, зачем? smile
здесь только недавно решалась такая же "проблема"
см. http://forum.vingrad.ru/index.php?showtopi...t&p=1286468



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


Новичок



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

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



всё сделал через пакет конвертации. Две строки и заработало.
перевел с windows-1251 в KOI8-R и RU строки стали такого вида: \xce\xc5\xc4\xc5\xcc\xd1.

Вот перевод пакета Manip русского формата^
Код

{
    ‘next’ => [
        ‘следующий’
    ],
    ‘sepss’ => ‘[:.с]’,
    ‘day_name’ => [
        [
            ‘понедельник’,
            ‘вторник’,
            ‘среда’,
            ‘четверг’,
            ‘пятница’,
            ‘суббота’,
            ‘воскресенье’
        ]
    ],
    ‘on’ => [
        ‘в’
    ],
    ‘day_char’ => [
        [
            ‘пн’,
            ‘вт’,
            ‘ср’,
            ‘чт’,
            ‘пт’,
            ‘сб’,
            ‘вс’
        ]
    ],
    ‘month_name’ => [
        [
            ‘января’,
            ‘февраля’,
            ‘марта’,
            ‘апреля’,
            ‘мая’,
            ‘июня’,
            ‘июля’,
            ‘августа’,
            ‘сентября’,
            ‘октября’,
            ‘ноября’,
            ‘декабря’
        ],
        [
            ‘январь’,
            ‘февраль’,
            ‘март’,
            ‘апрель’,
            ‘май’,
            ‘июнь’,
            ‘июль’,
            ‘август’,
            ‘сентябрь’,
            ‘октябрь’,
            ‘ноябрь’,
            ‘декабрь’
        ]
    ],
    ‘years’ => [
        ‘г’,
        ‘гд’,
        ‘год’,
        ‘лет’,
        ‘лет’,
        ‘года’
    ],
    ‘future’ => [
        ‘вперед на’
    ],
    ‘business’ => [
        ‘рабочих’
    ],
    ‘past’ => [
        ‘назад на ’
    ],
    ‘month_abb’ => [
        [
            ‘янв’,
            ‘фев’,
            ‘мрт’,
            ‘апр’,
            ‘май’,
            ‘июн’,
            ‘июл’,
            ‘авг’,
            ‘снт’,
            ‘окт’,
            ‘нояб’,
            ‘дек’
        ],
        [
            ‘’,
            ‘фвр’,
            ‘’,
            ‘',
            ’мая’,
            ‘’,
            ‘',
            ’',
            ‘сен’,
            ‘окт’,
            ‘ноя’,
            ‘’
        ]
    ],
    ‘num_suff’ => [
        [
            ‘1 ’,
            ‘2 ’,
            ‘3 ’,
            ‘4 ’,
            ‘5 ’,
            ‘6 ’,
            ‘7 ’,
            ‘8 ’,
            ‘9 ’,
            ‘10 ’,
            ‘11 ’,
            ‘12 ’,
            ‘13 ’,
            ‘14 ’,
            ‘15 ’,
            ‘16 ’,
            ‘17 ’,
            ‘18 ’,
            ‘19 ’,
            ‘20 ’,
            ‘21 ’,
            ‘22 ’,
            ‘23 ’,
            ‘24 ’,
            ‘25 ’,
            ‘26 ’,
            ‘27 ’,
            ‘28 ’,
            ‘29 ’,
            ‘30 ’,
            ‘31 ’
        ]
    ],
    ‘hours’ => [
        ‘ч’,
        ‘ч.’,
        ‘чс’,
        ‘чсв’,
        ‘час’,
        ‘часов’,
        ‘часа’
    ],
    ‘each’ => [
        ‘каждый’
    ],
    ‘minutes’ => [
        ‘мн’,
        ‘мин’,
        ‘минута’,
        ‘минут’
    ],
    ‘sepms’ => ‘[:м]’,
    ‘replace’ => [],
    ‘pm’ => [
        ‘пп’,
        ‘ПП’,
        ‘П.П.’,
        ‘дня’,
        ‘вечера’,
        ‘после полудня’,
        ‘по полудню’
    ],
    ‘sephm’ => ‘[:ч]’,
    ‘num_word’ => [
        [
            ‘первый’,
            ‘второй’,
            ‘третий’,
            ‘четвертый’,
            ‘пятый’,
            ‘шестой’,
            ‘седьмой’,
            ‘восьмой’,
            ‘девятый’,
            ‘десятый’,
            ‘одиннадцатый’,
            ‘двенадчатый’,
            ‘тренадцатый’,
            ‘четырнадцатый’,
            ‘пятнадцатый’,
            ‘шестнадцатый’,
            ‘семьнадцатый’,
            ‘восемьнадцатый’,
            ‘девятнадцатый’,
            ‘двадцатый’,
            ‘двадцать первый’,
            ‘двадцать второй’,
            ‘двадцать третий’,
            ‘двадцать четвертый’,
            ‘двадцать пятый’,
            ‘двадцать шестой’,
            ‘двадцать седьмой’,
            ‘двадцать восьмой’,
            ‘двадцать девятый’,
            ‘тридцатый’,
            ‘тридцать первый’
        ],
        [
            ‘первое’,
            ‘второе’,
            ‘третье’,
            ‘четвертое’,
            ‘пятое’,
            ‘шестое’,
            ‘седьмое’,
            ‘восьмое’,
            ‘девятое’,
            ‘десятое’,
            ‘одиннадцатое’,
            ‘двенадцатое’,
            ‘тренадцатое’,
            ‘четырнадцатое’,
            ‘пятнадцатое’,
            ‘шестнадцатое’,
            ‘семьнадцатое’,
            ‘восемьнадцатое’,
            ‘девятнадцатое’,
            ‘двадцатое’,
            ‘двадцать первое’,
            ‘двадцать второе’,
            ‘двадцать третье’,
            ‘двадцать четвертое’,
            ‘двадцать пятое’,
            ‘двадцать шестое’,
            ‘двадцать седьмое’,
            ‘двадцать восьмое’,
            ‘двадцать девятое’,
            ‘тридцатое’,
            ‘тридцать первое’
        ],
        [
            ‘первого’,
            ‘второго’,
            ‘третьего’,
            ‘четвертого’,
            ‘пятого’,
            ‘шестого’,
            ‘седьмого’,
            ‘восьмого’,
            ‘девятого’,
            ‘десятого’,
            ‘одиннадцатого’,
            ‘двенадцатого’,
            ‘тренадцатого’,
            ‘четырнадцатого’,
            ‘пятнадцатого’,
            ‘шестнадцатого’,
            ‘семьнадцатого’,
            ‘восемьнадцатого’,
            ‘девятнадцатого’,
            ‘двадцатого’,
            ‘двадцать первого’,
            ‘двадцать второе’,
            ‘двадцать третьего’,
            ‘двадцать четвертого’,
            ‘двадцать пятого’,
            ‘двадцать шестого’,
            ‘двадцать седьмого’,
            ‘двадцать восьмого’,
            ‘двадцать девятого’,
            ‘тридцатого’,
            ‘тридцать первого’
        ]
    ],
    ‘months’ => [
        ‘мес’,
        ‘месяц’,
        ‘месяцев’
    ],
    ‘day_abb’ => [
        [
            ‘пнд’,
            ‘втр’,
            ‘срд’,
            ‘чтв’,
            ‘птн’,
            ‘суб’,
            ‘вск’
        ],
        [
            ‘пон’,
            ‘вто’,
            ‘срe’,
            ‘чет’,
            ‘пят’,
            ‘суб’,
            ‘воск’
        ]
    ],
    ‘of’ => [
        ‘ ’
    ],
    ‘later’ => [
        ‘позже’
    ],
    ‘seconds’ => [
        ‘с’,
        ‘сек’,
        ‘секунда’,
        ‘секунд’
    ],
    ‘am’ => [
        ‘дп’,
        ‘П’,
        ‘.П.’,
        ‘ночи’,
        ‘утра’,
        ‘до полудня’
    ],
    ‘at’ => [
        ‘в’
    ],
    ‘offset’ => [
        ‘позавчера’,
        ‘-0:0:0:2:0:0:0’,
        ‘вчера’,
        ‘-0:0:0:1:0:0:0’,
        ‘завтра’,
        ‘+0:0:0:1:0:0:0’,
        ‘послезавтра’,
        ‘+0:0:0:2:0:0:0’
    ],
    ‘prev’ => [
        ‘предыдущий’
    ],
    ‘approx’ => [
        ‘примерно’
    ],
    ‘last’ => [
        ‘последний’
    ],
    ‘exact’ => [
        ‘точно’
    ],
    ‘days’ => [
        ‘д’,
        ‘день’,
        ‘дней’,
        ‘дня’
    ],
    ‘today’ => [
        ‘сегодня’
    ],
    ‘now’ => [
        ‘сейчас’
    ],
    ‘times’ => [
        ‘полдень’,
        ‘12:00:00’,
        ‘полночь’,
        ‘00:00:00’
    ],
    ‘weeks’ => [
        ‘неделя’,
        ‘недель’,
        ‘недели’,
        ‘неделю’
    ]
};

но как почитал в Инете, по английски этот пакет понимает больше. В русском хоть возможность вариантов написания хорошо реализована, но всё равно есть промахи.

Это сообщение отредактировал(а) HeR0vn1k - 19.10.2007, 22:30
PM MAIL   Вверх
HeR0vn1k
  Дата 22.10.2007, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Описание пакета Date::Manip (Eng ver.)^

Список поддержки языков^
English      (default)
French       (5.02)
Swedish      (5.05)
German       (5.31)
Dutch        (5.32)     aka Nederlands
Polish       (5.32)
Spanish      (5.33)
Portuguese   (5.34)
Romanian     (5.35)
Italian      (5.35)
Russian      (5.41)
Turkish      (5.41)
Danish       (5.41)

Это сообщение отредактировал(а) HeR0vn1k - 22.10.2007, 09:22
PM MAIL   Вверх
nitr
Дата 22.10.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Так в цитате и сказано - если есть проблемы с работой в др. языках - пишите, исправит


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


Новичок



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

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



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


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

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


 




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


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

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