URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2766
[ Назад ]

Исходное сообщение
"считывание избранных строк и запись в файл в Perl"

Отправлено Purple , 08-Апр-04 07:36 
как в перле считать строки из файла c 3-8 11-16 19-24 и записать их в другой файл?


Содержание

Сообщения в этом обсуждении
"считывание избранных строк и запись в файл в Perl"
Отправлено alchie , 08-Апр-04 07:41 
>как в перле считать строки из файла c 3-8 11-16 19-24 и
>записать их в другой файл?

perldoc perlvar

$INPUT_LINE_NUMBER

       $NR

       $.      The current input line number for the last file handle from
               which you read (or performed a seek or tell on).  The value may
               be different from the actual physical line number in the file,
               depending on what notion of "line" is in effect--see the
               section on $/ on how to affect that.  An explicit close on a
               filehandle resets the line number.  Because "<>" never does an
               explicit close, line numbers increase across ARGV files (but
               see examples under eof()).  Localizing $. has the effect of
               also localizing Perl's notion of "the last read filehandle".
               (Mnemonic: many programs use "." to mean the current line
               number.)


"считывание избранных строк и запись в файл в Perl"
Отправлено pth , 08-Апр-04 08:30 
>как в перле считать строки из файла c 3-8 11-16 19-24 и
>записать их в другой файл?

perl -ne 'print if (3..8 or 11..16 or 19..24)' filename.txt > result.txt


"считывание избранных строк и запись в файл в Perl"
Отправлено Purple , 08-Апр-04 08:56 
>>как в перле считать строки из файла c 3-8 11-16 19-24 и
>>записать их в другой файл?
>
>perl -ne 'print if (3..8 or 11..16 or 19..24)' filename.txt > result.txt
Спасибо

А как сделать выборку строк по условию 2-х двоеточий?
info1:
180:180:180:180:180:180:180:180:
180:180:180:180:180:180:180:180:
180:180:180:180:180:180:180:180:
180:180:180:180:180:180:180:180:
180:180:180:180:180:180:180:180:
150:120:150:180:180:180:180:180:
info2:
180:180:180:180:180:180:180:180:
180:180:180:180:180:180:180:180:
180:180:180:180:180:180:180:180:
180:180:180:180:180:180:180:180:
180:180:180:180:180:180:180:180:
180:120:120:180:180:180:180:180:
info3:
180:180:180:180:180:180:180:180:
180:180:180:180:180:180:180:180:
180:180:180:180:180:180:180:180:
180:180:180:180:180:180:180:180:
180:180:180:180:180:180:180:180:
180:120:120:180:180:180:180:180:
info4:


"считывание избранных строк и запись в файл в Perl"
Отправлено Purple , 08-Апр-04 11:26 
>180:180:180:180:180:180:180:180:
>180:180:180:180:180:180:180:180:
>180:120:120:180:180:180:180:180:
>info4:
Выборку я сделал (пока) по такому дикому условию
/...:...:...:...:/;
print "$&$'";
Можно как то это записать в файл?



"считывание избранных строк и запись в файл в Perl"
Отправлено alchie , 08-Апр-04 13:17 
>>180:180:180:180:180:180:180:180:
>>180:180:180:180:180:180:180:180:
>>180:120:120:180:180:180:180:180:
>>info4:
>Выборку я сделал (пока) по такому дикому условию
>/...:...:...:...:/;

if ( @a= m/(;)/g, scalar @a>=2 )

>print "$&$'";
>Можно как то это записать в файл?

в предыдущем ответе ты можешь увидеть простейший способ:
"> result.txt"

либо
open FILE, ">file.txt";
print FILE "some text";
close FILE;


"считывание избранных строк и запись в файл в Perl"
Отправлено magadan , 08-Апр-04 16:40 
open FILE, ">file.txt";
print FILE "some text";
close FILE;

А если после этого file.txt оказывается пустой, как это объяснить, причём права на запись в него есть
  


"считывание избранных строк и запись в файл в Perl"
Отправлено alchie , 09-Апр-04 02:54 
>open FILE, ">file.txt";
>print FILE "some text";
>close FILE;
>
> А если после этого file.txt оказывается пустой, как это объяснить, причём
>права на запись в него есть
>

а если file.txt с полным путем указать?


"считывание избранных строк и запись в файл в Perl"
Отправлено magadan , 09-Апр-04 16:21 
>а если file.txt с полным путем указать?

конечно!, я и указываю полный путь, фишка в том что open и print возврвщают единицу, те функции отрабатывают правильно, более того, если в файле file.txt что то было, то после работы скрипта он пустой, те файл открыт для записи, и закрыт последней строкой скрипта как файл размером 0 байт. Вообще страннейшая ситуация, пример хрестоматийный, как Hello world! а работать отказывается


"считывание избранных строк и запись в файл в Perl"
Отправлено Purple , 14-Апр-04 13:56 
>>>180:180:180:180:180:180:180:180:
>>>180:180:180:180:180:180:180:180:
>>>180:120:120:180:180:180:180:180:
>>>info4:
>>Выборку я сделал (пока) по такому дикому условию
>>/...:...:...:...:/;
>
Немного переделал, получилось вот так:
if (/(\d\d\d[:]){8}/)
{print file "$&\n";}

"считывание избранных строк и запись в файл в Perl"
Отправлено Purple , 14-Апр-04 14:02 
>Немного переделал, получилось вот так:
>if (/(\d\d\d[:]){8}/)
>{print file "$&\n";}
Квадратные скобки можно было не ставить:)
if (/(\d\d\d:){8}/)