URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 2269
[ Назад ]

Исходное сообщение
"Помогите с регулярным выражением!"

Отправлено Леха , 21-Апр-04 14:09 
Считыаю из директории файлы; надо из их названий вытащить, за какое они число.
$file1 = sbb_ostdepdat_##_##.txt (# - цифра; соответственно сначала день, потом месяц. буквенная часть у всех одинаковая).
Пытаюсь теперь эти самые цифирки выловить и форматнуть в дату с помощью
    $file1 = ~s?(\d{2})_(\d{2})?$1/$2?gi;
Получаю $file1 = 4294967295 (одинаковое для всех файлов)
Должно быть $file1 = "19/04"

Вместо "/" пытался вставлять точку "\." - аналогичный результат

А в чём фокус?

Заранее спасибо


Содержание

Сообщения в этом обсуждении
"Помогите с регулярным выражением!"
Отправлено konst , 21-Апр-04 17:12 
>Считыаю из директории файлы; надо из их названий вытащить, за какое они
>число.
>$file1 = sbb_ostdepdat_##_##.txt (# - цифра; соответственно сначала день, потом месяц. буквенная
>часть у всех одинаковая).
>Пытаюсь теперь эти самые цифирки выловить и форматнуть в дату с помощью
>
> $file1 = ~s?(\d{2})_(\d{2})?$1/$2?gi;
>Получаю $file1 = 4294967295 (одинаковое для всех файлов)
>Должно быть $file1 = "19/04"
>
>Вместо "/" пытался вставлять точку "\." - аналогичный результат
>
>А в чём фокус?
>
>Заранее спасибо
надо подробнее скрипт выкладывать...
$file1 = 'xxxx_15_04.txt';
$file1 =~ s/^.+(\d{2})_(\d{2})\.txt$/$1\/$2\/;
#$file1 = '15/04';


"Помогите с регулярным выражением!"
Отправлено Леха , 21-Апр-04 17:22 
>надо подробнее скрипт выкладывать...
#!c:/perl/bin/perl

chdir('c:/WordRep/');
opendir(DIR, 'c:/WordRep/Deposits_Analiz');
@tmp = readdir(DIR);
foreach $fl (@tmp)
    {
    if ($fl=~/ostdepdat_\d/gi) #тут я особо не напрягаюсь, ибо других файлов почти нету...
        {
        @filez = (@filez, $fl);
        }
    }
>$file1 = 'xxxx_15_04.txt';
>$file1 =~ s/^.+(\d{2})_(\d{2})\.txt$/$1\/$2\/;
>#$file1 = '15/04';
У меня было - $file1 = ~s?(\d{2})_(\d{2})?$1/$2?gi; в чём разница? Я же забабахал g - так что можно не париться и вбивать всю строку... И не лишний ли у тебя "\"?
За ответ спасибо - только вот меня интересовало, что у меня нетак (типа на будущее)... В конце-концов просто substr два раза забабахнул =)))


"Помогите с регулярным выражением!"
Отправлено konst , 21-Апр-04 19:33 
>>надо подробнее скрипт выкладывать...
>#!c:/perl/bin/perl
>
>chdir('c:/WordRep/');
>opendir(DIR, 'c:/WordRep/Deposits_Analiz');
>@tmp = readdir(DIR);
>foreach $fl (@tmp)
> {
> if ($fl=~/ostdepdat_\d/gi) #тут я особо не напрягаюсь, ибо других файлов почти
>нету...
>  {
   unshift (@filez, $fl);
   $fl=~s/^.+(\d{2})_(\d{2})\.txt$/$1\/$2/;
   unshift (@file2,$fl);
>  }
> }
В массиве file2 будут \d\d/\d\d :)

>>$file1 = 'xxxx_15_04.txt';
>>$file1 =~ s/^.+(\d{2})_(\d{2})\.txt$/$1\/$2\/;
>>#$file1 = '15/04';
>У меня было - $file1 = ~s?(\d{2})_(\d{2})?$1/$2?gi; в чём разница? Я же
>забабахал g - так что можно не париться и вбивать всю
>строку...
1.'g' - здесь не нужен (это только для повторяющихся элементов)
'xxxx_15_04.txt' ==> s/(\d{2})_(\d{2})/$1\/$2/g ====> xxxx_15/04.txt

И не лишний ли у тебя "\"?
лишний. надо $1\/$2/;
ты не выдал где ты производишь замену...

>За ответ спасибо - только вот меня интересовало, что у меня нетак
>(типа на будущее)... В конце-концов просто substr два раза забабахнул =)))
>