Вопрос № 78999: Доброго времени суток: есть такая задача, удалить первую строку из файла, удалить в конце файла символ перевода строки и добавить в конец две строки. С горем пополам и с помощью коллег по изучению Perl'а удалось написать такой скрипт для обработки од...
Вопрос № 78.999
Доброго времени суток: есть такая задача, удалить первую строку из файла, удалить в конце файла символ перевода строки и добавить в конец две строки. С горем пополам и с помощью коллег по изучению Perl'а удалось написать такой скрипт для обработки одного файла:
my $line_1 = "
Первая строка для добавления
";
my $line_2 = "Вторая строка для добавления
";
# --------------
my $file = $ARGV[0];
open $f, "<", "$file";
my @text = ();
# Считываю файл в массив удаляю символ переход строки
while ($line=<$f>) {
chop $line;
$line .="
";
@text = (@text, $line)
}
close $f;
# Удаляю первую строку
splice(@text, 0, 1);
# Добавляю две строки
text = (@text, $line_1, $line_2);
open $f, ">", "$file";
truncate $f, 0;
print $f @text;
close $f;
но файлов многовато для обработки этим скриптом, как сделать для обработки группы файлов ? Файлы имеют расширение .txt размер 11-12 кбайт.
Отправлен: 19.03.2007, 23:21
Вопрос задал: Grekalov (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: dianacode
Доброе время суток, Grekalov
код::
my $openfold = ''; # ваш каталог, где ищем
# читаем список ваших txt файлов
opendir ET, $openfold;
my @listed = grep {!/^.+$/ and /.txt$/i and !(-d "$openfold/$_") and (-s "$openfold/$_")>=10240 } readdir ET;
closedir ET;
# synopsis для описанного выше
# and (-s "$openfold/$_")>=10240 - проверяем размер файла, можете убрать, если не нужно
# and !(-d "$openfold/$_") - "это не каталог ?"
# !/^.+$/ - это не каталог верхнего уровня
for(@listed){
my $file_str = $_; # в переменной $file_str в каждый момент цикла у вас сейчас лежит имя одного из ваших текстовых файлов
#........
#........
# а тут можете вставить ваш вышепредложенный код на обработку файла
}
с уважением, удачи
--------- There is more than one way to do it.
Ответ отправила: dianacode (статус: Студент)
Ответ отправлен: 20.03.2007, 08:11