Автор Тема: Поиск файлов в каталоге по "маске"  (Прочитано 5493 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн webser

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.webser.ru
СУТЬ ::: Есть каталог с графическими файлами, названными по правилам $id1-$id2-$id3-[какой-то номер от 1 до ...].gif

Переменные $id1, $id2, $id3 известны до осуществления поиска и равны 0005, 33 и 1 соответственно. Пробовал

$dirname = $path."projects/off/";   # указание файла на сервере
opendir (DIR, $dirname);
@tmp_listfile = grep{"$id1-$id2-$id3-*.gif"} readdir(DIR);
closedir (DIR);

Получил

. | .. | 0005-33-1-1.gif | 0005-33-1-2.gif | 0075-60-1-1.gif | 0075-60-1-2.gif | 0076-35-1-1.gif | 0076-35-1-2.gif | 0195-35-1-1.gif | 0195-35-1-2.gif | 0195-35-1-3.gif | 0298-33-1-1.gif | 0298-34-1-1.gif | 0500-36-1-1.gif | 0502-36-1-1.gif | 0503-31-1-1.gif | 0503-31-1-2.gif | 0503-31-1-3.gif | 0504-33-1-1.gif | 0505-34-1-1.gif | 0506-34-1-1.gif | 0507-35-1-1.gif | 0507-35-1-2.gif | 0507-35-1-3.gif | 0508-34-1-1.gif | 0509-33-1-1.gif | 0510-33-1-1.gif | 0510-33-1-2.gif | 0510-33-2-1.gif | 0510-33-2-2.gif | 0511-33-1-1.gif | 0512-34-1-1.gif | 0512-34-1-2.gif | 0512-34-1-3.gif |

Как мне в grep учесть мои переменные, что-бы искал только нужные? и как можно избавиться от уровней вложенности в массиве  @tmp_listfile - . и ..

Может можно еще как найти? Проще и легче?....

Заранее благодарен..

P.S.
Сделал так -
@files = glob("$dirname$id1-$id2-$id3-*.gif");
print ">>files :::   ",@files;

Все ищет как надо, только с путями к файлам :
>>files ::: V:/localhost/www/projects/off/0005-33-1-1.gifV:/localhost/www/projects/off/0005-33-1-2.gif
Это решается путем выделения имени файла  из всего пути :
for ($i=0;$i<@files;$i++){   
$files[$i] =~ s!^.*/!!;
}
print ">>files2 :::   ",@files;

Получаем нужное   >>files2 ::: 0005-33-1-1.gif0005-33-1-2.gif

НО НАВЕРНЯКА ЕСТЬ ПУТЬ ПРОЩЕ И ЛЕГЧЕ - ПОДСКАЖИТЕ, ПЛИЗ
« Последнее редактирование: 17 Марта 2008, 02:24:15 от webser »

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Поиск файлов в каталоге по "маске"
« Ответ #1 : 17 Марта 2008, 18:46:32 »
while (glob("$dirname$id1-$id2-$id3-*.gif")) {
  s/^.*\\///;
  print "$_";
}
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Поиск файлов в каталоге по "маске"
« Ответ #2 : 17 Марта 2008, 23:20:27 »
chdir($dirname);
while (glob ("$id1-$id2-$id3-*.gif")) {
  print "$_ ";
}
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн webser

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.webser.ru
Поиск файлов в каталоге по "маске"
« Ответ #3 : 18 Марта 2008, 08:39:02 »
ДОПОЛНИТЕЛЬНО :::

как одним махом раскидать имя файла, например 0504-33-1-1.gif, на 4 переменные со значениями 0504, 33, 1  и 1?

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Поиск файлов в каталоге по "маске"
« Ответ #4 : 18 Марта 2008, 09:31:10 »
split "[.-]"

perldoc -f split

Оффлайн webser

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.webser.ru
Поиск файлов в каталоге по "маске"
« Ответ #5 : 18 Марта 2008, 14:49:55 »
Извини за глупый вопрос : а где надо набрать эту строку perldoc -f split ?

Оффлайн webser

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.webser.ru
Поиск файлов в каталоге по "маске"
« Ответ #6 : 18 Марта 2008, 14:51:42 »
Я смотрю через броузер прямое обращение к файлу описания (у меня file:///C:/Perl/html/index.html).

А где надо вводить perldoc -f split ?

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Поиск файлов в каталоге по "маске"
« Ответ #7 : 18 Марта 2008, 15:42:55 »
в терминале.

Оффлайн webser

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.webser.ru
Поиск файлов в каталоге по "маске"
« Ответ #8 : 18 Марта 2008, 15:56:34 »
Thanks... Разобрался..
Сделал

@tmp_line = split (/[.-]/, $listfile[$i]); с последующей подстановкой нужных $tmp_line[0] и т.д.

И с командной строкой разобрался... Тупил, однако..

 

Sitemap 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