lines
9 отговора
441 прегледа
lines
Po-kratuk nachin?
#!/usr/bin/perl -n
print "$.: $_";
END { print "\n\n$. lines in total in file '$ARGV'\n\n" }
#!/usr/bin/perl -n
print "$.: $_";
END { print "\n\n$. lines in total in file '$ARGV'\n\n" }
Re: lines
8.2.1 Problem
You need to compute the number of lines in a file.
8.2.2 Solution
Many systems have a wc program to count lines in a file:
$count = `wc -l < $file`;
die "wc failed: $?" if $?;
chomp($count);
You could also open the file and read line-by-line until the end, counting lines as you go:
open(FILE, "<", $file) or die "can't open $file: $!";
$count++ while <FILE>;
# $count now holds the number of lines read
Here's the fastest solution, assuming your line terminator really is "\n":
$count += tr/\n/\n/ while sysread(FILE, $_, 2 ** 20);
You need to compute the number of lines in a file.
8.2.2 Solution
Many systems have a wc program to count lines in a file:
$count = `wc -l < $file`;
die "wc failed: $?" if $?;
chomp($count);
You could also open the file and read line-by-line until the end, counting lines as you go:
open(FILE, "<", $file) or die "can't open $file: $!";
$count++ while <FILE>;
# $count now holds the number of lines read
Here's the fastest solution, assuming your line terminator really is "\n":
$count += tr/\n/\n/ while sysread(FILE, $_, 2 ** 20);
Re: lines
nqmah predvid da citirame "Perl Cookbook" - povecheto (prepolagam) ot nas q znaqt naizust - kolkoto i dobra da e tazi kniga.
imah predvid da se izpolzva "pure" Perl kod i to po nai-lakonichniq nachin.
10x anyway
imah predvid da se izpolzva "pure" Perl kod i to po nai-lakonichniq nachin.
10x anyway
Re: lines
mi to toya red
print "$.: $_";
ne e nuzen taka che kvo po lakonicno ot tova iskash
print "$.: $_";
ne e nuzen taka che kvo po lakonicno ot tova iskash
Re: lines
@file = <STDIN>;
$lines = scalar(@file);
Естествено, има недостатъци :-) Но, понякога лаконичните неща не са практични :-)
RTFM!
--sdg
$lines = scalar(@file);
Естествено, има недостатъци :-) Но, понякога лаконичните неща не са практични :-)
RTFM!
--sdg
Re: lines
blagodariq za otg., no ne si li mnogo raztochitelen ?
@file = <STDIN>;
$lines = scalar(@file); #?
kogato iskam da kaza:
$lines = "@file";
@file = <STDIN>;
$lines = scalar(@file); #?
kogato iskam da kaza:
$lines = "@file";
Re: lines
Ти какво искаш да направиш в крайна сметка: да изведеш съдържанието на стандартния вход на стандартния изход, или да му преброиш редовете, или и двете? И с "чист" perl ли трябва да стане това?
Разточителността ми в примера от предния ми коментар е в това, че целия файл се изчита в паметта. Иначе:
while (<STDIN>) { print; };
print "\nNumber of lines: $.\n";
Ако ти трябва само броя редове, тогава махни print командата от цикъла:
while (<STDIN>) {; };
print "\nNumber of lines: $.\n";
Това, което си писал ($lines = "@file";) ще ти събере в една scalar променлива съдържанието (повтарям, съдържанието) на целия файл, защото двойните кавички ще интерпретират масива в list, а не в scalar контекст. Ако това е, което искаш да постигнеш (целия стандартен вход в една scalar променлива), тогава:
$content = "";
while (<STDIN>) { $content .= $_; }
RTFM!
--sdg
Разточителността ми в примера от предния ми коментар е в това, че целия файл се изчита в паметта. Иначе:
while (<STDIN>) { print; };
print "\nNumber of lines: $.\n";
Ако ти трябва само броя редове, тогава махни print командата от цикъла:
while (<STDIN>) {; };
print "\nNumber of lines: $.\n";
Това, което си писал ($lines = "@file";) ще ти събере в една scalar променлива съдържанието (повтарям, съдържанието) на целия файл, защото двойните кавички ще интерпретират масива в list, а не в scalar контекст. Ако това е, което искаш да постигнеш (целия стандартен вход в една scalar променлива), тогава:
$content = "";
while (<STDIN>) { $content .= $_; }
RTFM!
--sdg
Re: lines
qvno ne si prochel 1-viq mi ?s (koito suduza otgovori na tvoite ?si; drugoto e qsno za vseki, koito znae shto e skalar i list, i kontekst). kakto i da e - lekciqta stava