![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
asmlover |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 7.8.2005 Репутация: нет Всего: нет |
Помогите. Нужен небольшой скрипт, который открывает файл (лучше - сканирует директорию). находит там файлы заданного расширения и делает следующее:
удаляет пустые строчки до тех пока не встретит первую непустую строку.. Если коротко: нужно удалить из множества файлов пустые строки в начале файла. Помогите, если кто знает как написать. Сам в перле и регеспах не силен. |
|||
|
||||
Ivan Kolesnikov |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 9.3.2005 Где: г. Новокузнецк Репутация: 3 Всего: 6 |
Необходимо уточнить каким образом делать поиск: искать только в этой директории или и во вложеных тоже.
Если только в этой, то тогда вывести список файлов можно следующим скриптом:
Данный пример взят из документации к perl ![]() Наибольший интерес вызывает строчка №4. Функция readdir(DIR) в списковом контексте (а здесь именно такой) возвращает массив всех элементов директории, а функция grep добавляет в массив @files только те элементы которые являются текстовыми файлами, а также их имя удовлетворяет критерию $mask (это регулярное выражение). Если что непонятно пиши будем разбираться. В случае поиска во вложенных директориях лучше использовать модуль File::Find. Теперь вторая часть скрипта, имеется файл, необходимо удалить пустые строчки сверху:
Открываем файл на чтение, считываем от туда все строчки, если уже была считана хотя бы одна или строчка не пустая, после этого можно закрыть файл, открыть его для записи и записать туда полученный массив. Этот скрипт будет не эфективным если файлы большого размера (много будет занимать массив), я бы писал сразу во временный файл вместо массива, а после этого переименовать файл. Попробуй сделать сам, если что поможем ![]() Связать два скрипта я думаю не составит труда. Это сообщение отредактировал(а) Ivan Kolesnikov - 8.8.2005, 06:48 --------------------
|
||||
|
|||||
asmlover |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 7.8.2005 Репутация: нет Всего: нет |
Спасибо разобрался
|
|||
|
||||
Гость_Asmlover |
|
|||
Unregistered |
А может быть кто-нить делал рекурсивный обходи директории с поиском файла по маске? Я тут эксперементирую с регеспами, но ничего толкового в виду отсутствия опыта не выходит..
|
|||
|
||||
Ivan Kolesnikov |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 9.3.2005 Где: г. Новокузнецк Репутация: 3 Всего: 6 |
посмотри File::Find
Это сообщение отредактировал(а) Ivan Kolesnikov - 29.8.2005, 12:49 --------------------
|
|||
|
||||
chaos |
|
||||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
ничего сложного, вот не большой алгоритмик
ченибудь в таком духе Добавлено @ 13:53 не спорю можно лутше ![]() PS это экспромпт во время перекура ![]() Это сообщение отредактировал(а) chaos - 29.8.2005, 13:47 |
||||
|
|||||
korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Так же советую почитать статью "Удаление ветви дерева каталогов", в FAQ или вот здесь:
http://forum.vingrad.ru/index.php?showtopic=43492 Там описаны методы прохода по всем вложенным каталогам как с помощью модуля File::Find, так и вручную. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
Guest |
|
|||
Unregistered |
Спасибо.
А не подскажите условие, чтобы обрабатывались только файлы, не ищеющие расширения? |
|||
|
||||
korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Не понял вопроса, если можно, чуть подробнее.
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
в никс системах вообще нет понятия расширения
|
|||
|
||||
Guest |
|
|||
Unregistered |
Ну, скажем есть файлы *.cpp - их трогать не надо
А makefile - нужно. |
|||
|
||||
korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 23 Всего: 28 |
В код надо добавить одну строку:
![]() Это сообщение отредактировал(а) sharq - 30.8.2005, 10:33 -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |