Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » perl script.pl *.c

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

mark74

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет.
 
Пишу скрипт-конвертер логов под Windows. Надо чтобы он обрабатывал параметры командной строки на подобие утилиты cat:

Код:
$ cat *.txt *.log

выведет все строки всех подходящих файлов одной непрерывной портянкой.
 
Без подстановочных знаков, когда параметры - имена файлов, всё просто. В этом случае скрипт аналогичный по функционалу cat может выглядеть так:

Код:
while (<>) {
  # тут обработка строк, в нашем случае:
  print;
}
 

вызов:

Код:
$ perl cat.pl raz.txt dva.txt tri.log

если при вызове указать подстановочный знак (*.txt) то произойдёт ошибка:
Can't open *.txt: Invalid argument at cat.pl line 1.
 
и это логично, судя по документации:

Код:
while (<>) {
 
соответствует
 
while ($ARGV = shift) {
  open(ARGV, $ARGV);
  while (<ARGV>) {
 
 

 
Наверняка это уже миллион раз решено. Где-нибудь в дистрибутиве перла возможно есть best practise. Народ, подскажите какой-нибудь хороший способ, если кто знает.
 
 
PS эта проблема похоже только под Windows

Всего записей: 480 | Зарегистр. 25-01-2009 | Отправлено: 14:37 18-08-2015 | Исправлено: mark74, 19:26 18-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mark74
можно так, к примеру

Код:
while ($ARGV = shift) {  
  my @files = glob $ARGV;
  for (0..$#files) {
    open(ARGV, $files[$_]);  
    while (<ARGV>) {  
       print;
   }
    print "\n";
    close(ARGV);
  }
}  

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 20:33 18-08-2015
mark74

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Работает. Спасибо!
 
интересно,
Код:
perl -pe';' *.txt

- та же проблема под WinXP

Всего записей: 480 | Зарегистр. 25-01-2009 | Отправлено: 14:13 20-08-2015 | Исправлено: mark74, 16:55 20-08-2015
mark74

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вариант более простой для переноса существующего скрипта под винду

Код:
my @argfiles;
push @argfiles, glob $ARGV while $ARGV = shift;
@ARGV = @argfiles;
while (<>) {
  print;
}
 

проверено под XP.
 
важно чтобы аргументам *.c что-нибудь соответствовало, иначе glob возвращает []
и <> переключается на чтение строк из STDIN

Всего записей: 480 | Зарегистр. 25-01-2009 | Отправлено: 18:57 21-08-2015 | Исправлено: mark74, 18:57 21-08-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » perl script.pl *.c


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru