The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Регулярное не ргулярит"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Perl)
Изначальное сообщение [ Отслеживать ]

"Регулярное не ргулярит"  +/
Сообщение от EXA email(ok) on 22-Ноя-10, 10:07 
Есть функция, которая немного работает со в временем в пёрле.
Вот кусок, который что-то не так как хочется


        if($DATE_FORMAT eq 'DD.MM.YYYY HH24:MI:SS') {
                if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)\:(\d+)/ ){
                        return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5 . ":" . $6;
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)/ ){
                        return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5;
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)/ ){
                         return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":00";
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
                        return $3 . "-" . $2 . "-" . $1;
                }

        };

Пихаую туда $date =22.11.2010 23:59:59, отрабатывает почему-то не певый IF, а последний
} elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
                        return $3 . "-" . $2 . "-" . $1;

Что не так в первом, не догоняю, пробовал вместо " ", ставить \s , в общем не помогло.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Регулярное не ргулярит"  +/
Сообщение от EXA email(ok) on 22-Ноя-10, 10:39 
Глупость получается, взял отдельно проверил, всё правильно первая строка отрабатывает! А в целом в софте не работает, вот где я вызываю всё

<?
#exit 0;
$service_type="ani_phone";
require "$CFG::BASE/bin/dateutils";
require "$CFG::BASE/bin/dbaccess";

$date_from_int = $date_from;
$date_till_int = $date_till;


$date_f = $date_from_int;
$date_t = $date_till_int;
$FULL_TIME_FORMAT_1 = $CFG::FULL_TIME_FORMAT.'.000';

$date_from_int=convert_date($date_from_int,"$CFG::DATE_FORMAT $CFG::FULL_TIME_FORMAT");
$date_till_int=convert_date($date_till_int,"DD.MM.YYYY HH24:MI:SS");

print "$date_t --- $date_till_int ---  "$CFG::DATE_FORMAT $CFG::FULL_TIME_FORMAT"";
........................................................................

Вот кусок
require "$CFG::BASE/bin/dateutils";

sub convert_date {
        my ($date,$DATE_FORMAT) =@_;
        if($DATE_FORMAT eq 'DD.MM.YYYY') {
                if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
                        return $3 . "-" . $2 . "-" . $1;
                }
        };

        if($DATE_FORMAT eq 'YYYY-MM-DD') {
                if($date =~ /(\d\d\d\d)\-(\d\d)\-(\d\d)/ ){
                        return $1 . "-" . $2 . "-" . $3;
                }
        };

        if($DATE_FORMAT eq 'DD.MM.YYYY HH24') {
                if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)/ ){
                        return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":00";
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
                        return $3 . "-" . $2 . "-" . $1;
                }
        };

        if($DATE_FORMAT eq 'DD.MM.YYYY HH24:MI') {
                if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)/ ){
                        return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5 ;
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)/ ){
                         return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":00";
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
                        return $3 . "-" . $2 . "-" . $1;
                }


        };

        if($DATE_FORMAT eq 'DD.MM.YYYY HH24:MI:SS') {
                if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)(\s)(\d+)\:(\d+)\:(\d+)/ ){
                        return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5 . ":" . $6;
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)/ ){
                        return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5;
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)/ ){
                         return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":00";
                } elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
                        return $3 . "-" . $2 . "-" . $1;
                }

        };

        return undef;
}


Чаго не так не врублюсь!

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Регулярное не ргулярит"  +/
Сообщение от EXA email(ok) on 22-Ноя-10, 10:52 
Бешанная лажа, как побеждать не знаю

sub convert_date {
        my ($date,$DATE_FORMAT) =@_;
        my $date = "$date";
#       my $date = "22.11.2010 23:59:59";
#       return "-".$date."-";

В общем переприсваивание не помогает, если самому руками в кавычках написать дату то всё ОК - строка нужного ифа выполняется, если вывести из неё всё что нужно то тоже ОК - типа строка даты  в точь в точь, но при передачи параметра ни разу работает нужная строка выбора!!!

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Регулярное не ргулярит"  +/
Сообщение от Aquarius (ok) on 22-Ноя-10, 13:20 
> Бешанная лажа, как побеждать не знаю
> sub convert_date {
>         my ($date,$DATE_FORMAT) =@_;
>         my $date = "$date";

а не ограничивает ли ключевое слово my область видимости $date ?

> #       my $date = "22.11.2010 23:59:59";
> #       return "-".$date."-";

а другой return есть?

> В общем переприсваивание не помогает, если самому руками в кавычках написать дату
> то всё ОК - строка нужного ифа выполняется, если вывести из
> неё всё что нужно то тоже ОК - типа строка даты
>  в точь в точь, но при передачи параметра ни разу
> работает нужная строка выбора!!!

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Регулярное не ргулярит"  +/
Сообщение от EXA email(ok) on 22-Ноя-10, 14:27 
sub convert_date {
        ($dateexa,$DATE_FORMAT) =@_;
        if($DATE_FORMAT eq 'DD.MM.YYYY HH24:MI:SS') {
                if($dateexa =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)\:(\d+)/ ){
                        return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5 . ":" . $6;
                } elsif($dateexa =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)/ ){
                        return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5;
                } elsif($dateexa =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)/ ){
                         return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":00";
                } elsif($dateexa =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
                        return $3 . "-" . $2 . "-" . $1;
                }

        };

        return undef;
}

Вот такая процедурка в двух словах. Причём я убрал my что не парилось, дал другую переенную, которой точно ни где нет.

а другой return есть? - не срабатывает какой надо
if($dateexa =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)\:(\d+)/ ){
                        return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5 . ":" . $6;

Всё так же не берёт что надо.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Регулярное не ргулярит"  +/
Сообщение от ACCA (ok) on 23-Ноя-10, 07:39 
use strict;
use warnings;

Никогда не пиши на Perl без них. Когда вставишь - не поленись и исправь все 100500 предупреждений - это серьёзные проблемы.

Убери лишние ; после if {}

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

5. "Регулярное не ргулярит"  +/
Сообщение от Etch on 22-Ноя-10, 16:48 
Обычно помогает печать содержимого переменных, попавших в функцию, и возвращаемых ею.

PS. не нужно экскейпить пробелы, двоеточия и тире.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

7. "Регулярное не ргулярит"  +/
Сообщение от EXA email(ok) on 23-Ноя-10, 08:04 
> Обычно помогает печать содержимого переменных, попавших в функцию, и возвращаемых ею.

Спасибо, решил попробовать, это перед тем, сказать, что уже в выводил в веб, но веб жрёть лишнии проблы!!! Благодаря файлику увидел между датой и временем ДВА пробела, вот оно не искало!
Спасибо за помощь.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру