Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > hasuhands |
Автор: asmlover 7.8.2005, 17:36 |
Помогите. Нужен небольшой скрипт, который открывает файл (лучше - сканирует директорию). находит там файлы заданного расширения и делает следующее: удаляет пустые строчки до тех пока не встретит первую непустую строку.. Если коротко: нужно удалить из множества файлов пустые строки в начале файла. Помогите, если кто знает как написать. Сам в перле и регеспах не силен. |
Автор: Ivan Kolesnikov 8.8.2005, 06:44 | ||||
Необходимо уточнить каким образом делать поиск: искать только в этой директории или и во вложеных тоже. Если только в этой, то тогда вывести список файлов можно следующим скриптом:
Данный пример взят из документации к perl ![]() Наибольший интерес вызывает строчка №4. Функция readdir(DIR) в списковом контексте (а здесь именно такой) возвращает массив всех элементов директории, а функция grep добавляет в массив @files только те элементы которые являются текстовыми файлами, а также их имя удовлетворяет критерию $mask (это регулярное выражение). Если что непонятно пиши будем разбираться. В случае поиска во вложенных директориях лучше использовать модуль File::Find. Теперь вторая часть скрипта, имеется файл, необходимо удалить пустые строчки сверху:
Открываем файл на чтение, считываем от туда все строчки, если уже была считана хотя бы одна или строчка не пустая, после этого можно закрыть файл, открыть его для записи и записать туда полученный массив. Этот скрипт будет не эфективным если файлы большого размера (много будет занимать массив), я бы писал сразу во временный файл вместо массива, а после этого переименовать файл. Попробуй сделать сам, если что поможем ![]() Связать два скрипта я думаю не составит труда. |
Автор: asmlover 19.8.2005, 02:10 |
Спасибо разобрался |
Автор: Гость_Asmlover 29.8.2005, 03:30 |
А может быть кто-нить делал рекурсивный обходи директории с поиском файла по маске? Я тут эксперементирую с регеспами, но ничего толкового в виду отсутствия опыта не выходит.. |
Автор: Ivan Kolesnikov 29.8.2005, 12:49 |
посмотри File::Find |
Автор: chaos 29.8.2005, 13:47 | ||||
ничего сложного, вот не большой алгоритмик
ченибудь в таком духе Добавлено @ 13:53 не спорю можно лутше ![]() PS это экспромпт во время перекура ![]() |
Автор: korob2001 29.8.2005, 15:13 |
Так же советую почитать статью "Удаление ветви дерева каталогов", в FAQ или вот здесь: http://forum.vingrad.ru/index.php?showtopic=43492 Там описаны методы прохода по всем вложенным каталогам как с помощью модуля File::Find, так и вручную. |
Автор: Guest 29.8.2005, 23:02 |
Спасибо. А не подскажите условие, чтобы обрабатывались только файлы, не ищеющие расширения? |
Автор: korob2001 30.8.2005, 00:00 |
Не понял вопроса, если можно, чуть подробнее. |
Автор: chaos 30.8.2005, 06:13 |
в никс системах вообще нет понятия расширения |
Автор: Guest 30.8.2005, 09:21 |
Ну, скажем есть файлы *.cpp - их трогать не надо А makefile - нужно. |
Автор: korob2001 30.8.2005, 09:50 | ||
|
Автор: sharq 30.8.2005, 10:26 | ||
В код надо добавить одну строку:
![]() |