
Разделы сайта: |
Связь: |
Если вы используете Perl, то, скорее всего, у вас стоит интерпретатор Perl - программа, позволяющая запускать скрипты, написанные на Perl на простой рабочей станции (я использую ActivePerl от ActiveState - activestate.com).
Конечно, первоочередная функция интерпретатора - отладка скриптов и поиск ошибок. Но гибкость Perl пожно использовать и в быту. Рассмотрим несколько примеров:
ПРИМЕР 1.
У вас стоит программа, позволяющая докачивать файлы при разрыве соединения (например, ReGet, GoZilla или GetRight), и вам нужно скачать 500 файлов с именами от file1.zip до file500.zip. Вместо того, чтобы вручную добавлять каждый URL или кликать по ссылкам, можно воспользоваться возможностью "качалок" открывать списки файлов для скачивания.
Для примера возьмем GetRight. Формат списка (*.grx) для нее выглядит так:
URL: http://www.server.com/dir/file1.zip
File: C:\My Downloaded Files\file1.zip
URL: http://www.server.com/dir/file2.zip
File: C:\My Downloaded Files\file2.zip
...
Как видно, для каждого файла указывается его URL, то есть адрес, откуда его нужно качать, и путь, куда его следует сохранить. Сразу приведу исходник генератора списка файлов:
# Открываем файл списка
open(GRX,">list.grx");
# Цикл для 500 файлов
for ($i=1;$i<=500;$i++)
{
# Пишем адрес исходного файла
print GRX "URL: http://www.server.com/dir/file$i.zip\n";
# Пишем адрес файла на локальной машине
print GRX "File: C:\My Downloaded Files\file$i.zip\n\n";
}
# Закрываем файл
close GRX;
В результате получаем список из 500 файлов. Все что надо - открыть его в GetRight (File->Import Download List).
Единственный подводный камень, что может вас подстерегать - числа не в порядке 1,2,3,..11,12,13,..500, а в виде 001,002,003,...011,012,013,..500. Хотя эту проблему решить легко:
# Вставить этот код в тело цикла
# Просто вводим новую переменную
$j=$i;
# для числа меньше 10 добавим в начале два ноля
if($i<10)
{
$j="00$i";
}
# для числа от 10 до 99 добавим в начале один ноль
if((10<=$i)&&($i<100))
{
$j="0$i";
}
# дальше идет запись в файл как в первом примере,
# но с использованием $j вместо $i
Таким образом, вы можете сгенерировать любой список, даже для файлов в нескольких пронумерованных каталогах и т.д. Здорово облегчает жизнь, а, главное, код недолго писать.
ПРИМЕР 2.
Допустим, опять тот же GetRight. В нем есть опция, при включении которой программа сохраняет все свои действия (добавление нового файла на скачку, продолжение скачивания, остановка скачивания, завершение скачивания и т.д.) в файл (ведение лога). Лично мне он нужен для того, чтобы не забыть полезные URL'ы (не буду же я сам их записывать), откуда я качал файлы. Log выглядит примерно так:
...
2001/06/12-19:31:36: File: D:\music\file1.mp3 = ftp://ftp.server1.com/pub/file1.mp3
2001/06/12-19:32:19: File: D:\music\file2.mp3 = ftp://ftp.server1.com/pub/file2.mp3
2001/06/12-19:37:11: (Re)Started download: ftp://ftp.server1.com/pub/file1.mp3
2001/06/12-19:38:05: (Re)Started download: ftp://ftp.server1.com/pub/file2.mp3
2001/06/13-22:11:37: (Re)Started download: ftp://ftp.server1.com/pub/file2.mp3
2001/06/13-22:11:38: (Re)Started download: ftp://ftp.server1.com/pub/file1.mp3
2001/06/13-23:57:24: Finished downloading: ftp://ftp.server1.com/pub/file1.mp3
2001/06/14-18:31:49: (Re)Started download: ftp://ftp.server1.com/pub/file2.mp3
2001/06/13-21:59:24: Finished downloading: ftp://ftp.server1.com/pub/file2.mp3
...
При моей задаче (не забыть) меня интересуют только строки File:, откуда я точно знаю что, когда, и куда сохранил. Остальные строки в моем случае только раздувают файл и мешают поиску, следовательно их надо удалить. И Perl с его Regular Expressions прекрасно для этого сгодится.
Вот простой скрипт:
# Открываем лог для чтения и построчни читаем его в массив
open(LOG,"
В итоге в файле download log.log останутся только строки, содержащие File:, а весь "мусор" удалится.
Вот и все. Надеюсь, я подкинул вам несколько идей. Ведь на самом деле Perl подно приспособить практически везде. В его задачи кроме создания однородных списков и чистки логов может входить сортировка, статистика, поиск и замена информации и многое другое.
|