|
Тема
|
lines
|
|
Автор | vfork (Нерегистриран) |
Публикувано | 18.07.04 17:38 |
|
Po-kratuk nachin?
#!/usr/bin/perl -n
print "$.: $_";
END { print "\n\n$. lines in total in file '$ARGV'\n\n" }
| |
Тема
|
Re: lines
[re: vfork]
|
|
Автор | lines (Нерегистриран) |
Публикувано | 19.07.04 15:49 |
|
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);
| |
Тема
|
Re: lines
[re: lines]
|
|
Автор |
vfork (непознат
) |
Публикувано | 19.07.04 18:01 |
|
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
| |
|
mi to toya red
print "$.: $_";
ne e nuzen taka che kvo po lakonicno ot tova iskash
| |
Тема
|
Re: lines
[re: vfork]
|
|
Автор |
sdg (shebang addict) |
Публикувано | 23.07.04 23:55 |
|
@file = <STDIN>;
$lines = scalar(@file);
Естествено, има недостатъци :-) Но, понякога лаконичните неща не са практични :-)
RTFM!
--sdg
| |
Тема
|
Re: lines
[re: sdg]
|
|
Автор | vfork (Нерегистриран) |
Публикувано | 03.08.04 22:30 |
|
blagodariq za otg., no ne si li mnogo raztochitelen ?
@file = <STDIN>;
$lines = scalar(@file); #?
kogato iskam da kaza:
$lines = "@file";
| |
Тема
|
Re: lines
[re: vfork]
|
|
Автор |
sdg (shebang addict) |
Публикувано | 04.08.04 18:36 |
|
Ти какво искаш да направиш в крайна сметка: да изведеш съдържанието на стандартния вход на стандартния изход, или да му преброиш редовете, или и двете? И с "чист" 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
| |
Тема
|
Re: lines
[re: sdg]
|
|
Автор |
vfork (непознат
) |
Публикувано | 06.08.04 00:14 |
|
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
| |
Тема
|
Re: lines
[re: vfork]
|
|
Автор |
sdg (shebang addict) |
Публикувано | 06.08.04 13:19 |
|
О, прочетох го. Явно въпросът в него ми се е изгубил :-)
RTFM!
--sdg
| |
Тема
|
Re: lines
[re: sdg]
|
|
Автор |
vfork () |
Публикувано | 08.08.04 15:49 |
|
Zdrave da e :)
| |
|
|
|
|