![]() |
|
Модераторы: ginnie, korob2001 |
![]()
|
|
| alyam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
Простите, что может быть вопросы нубские задаю. Помогите программку составить. Сам книжку по перлу не открывал лет 10. забыл все.
Задача такая: в выбранной директории (вместе с поддиректориями) изменить 2 строчку во всех файлах, кроме файлов, начинающихся с 89. С изменением строчки все ОК. Не могу составить регулярное выражение для выборки нужных конкретных файлов Структура файлов примерно такая: C:/111/DAT_1107.230/001.07 C:/111/DAT_1107.230/001.08 C:/111/DAT_1107.230/001.11 C:/111/DAT_1107.230/002.01 C:/111/DAT_1107.230/002.02 C:/111/DAT_1107.230/002.03 C:/111/DAT_1108.230/012.10 C:/111/DAT_1108.230/012.11 C:/111/DAT_1108.230/89.01 C:/111/DAT_1108.230/89.11 #!/usr/bin/perl -w sub replace_line { my ($file) = @_; open(FILE,"<$file") or die "Can't open $file: $!"; @content = <FILE>; close(FILE); return if 2>@content; substr($content[1],-4,0)="89"; open(FILE,">$file") or die "Can't open for write $file: $!"; print FILE @content; close(FILE); } sub scan_dir # процедура рекурсивного сканирования папки { my ($dir) = @_; my @list; for my $file (glob($dir.'/*')) { if ($file=~ /0\d{2}\.\d{2}$/) { push @list, $file; next} # добавляем в массив 1 элемент if (-d $file) # если файл является папкой { pop @list, $file; my @sub = scan_dir($file); push @list, @sub; } } return @list; } # имя папки для сканирования по умолчанию (. = текущая папка) my $dir='C:/111'; # вызов процедуры сканирования содержимого папки @list = scan_dir($dir); foreach $i (@list) { replace_line($i) } Это сообщение отредактировал(а) alyam - 14.9.2011, 10:02 |
|||
|
||||
| Jimy |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 4.7.2010 Репутация: нет Всего: 3 |
|
|||
|
||||
| alyam |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
нифига так не работает. потому что $file='C:/111/DAT_1107.230/89.07' оно не начинается с 89! |
||||
|
|||||
| Jimy |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 4.7.2010 Репутация: нет Всего: 3 |
Прошу прощения, не внимательно посмотрел код. Привык работать с файлами через readdir который возвращает только имя файла.
Ну тогда как-то так:
|
|||
|
||||
| alyam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
а если усложнить задачу и переименовывать файлы, которые не начинаются с 89. В общем нужно в название файла вначале добавить 89.
|
|||
|
||||
| Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: нет Всего: 5 |
а не хотите File::Find использовать?
сразу получите и путь к папке и имя файла отдельно. проверять и оперировать проще:
|
|||
|
||||
| mishin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 1.11.2007 Репутация: нет Всего: нет |
не надо File::Find; использовать
только
Это сообщение отредактировал(а) mishin - 18.11.2011, 19:33 |
|||
|
||||
![]()
|
| Правила форума "Perl: Системное программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |