LINUX.ORG.RU

Perl, парсинг файла

 


0

1

Есть файл

user: 99
size: 901618151
esl                        273210725            3252               0
svs                         30707115            2207           63530
janney                      28937779            3507         1249588
olesya                      26088160            2105               0
witt                        24273195            3798          237260
eugkov                      20500875            1337          159036
marcoss                     20250303            6504         1245964
zxc                         19990749            1727           31153
garry_chem                  19061381            4572         1188675
vitamin                     18510483            2460          168697
md                          17767229            3388           71179
lutik                       15587275            3574          319252
svetik                      15406382            1946          627922
как в Perl прочитать файл и начиная с 3 строки занести в массив

open($FF, "<", "file");
  while (<FF>) {
    ($user,$size,$hit)=split;
  }  
  close FF;

проканает?

use $. (точка как часть переменной)

anonymous
()

Но, тут скорее подойдет сопоставление по образцу. Или заводите грамматику, или, что проще, если совпало с регулярным выражением: буковки пробелы цыфры цифры цыфры, то попалось.

anonymous
()
Ответ на: комментарий от helios

Только ТС учти, тут от объема файла зависит, так полностью считается в память. В случае while (<>) дергается интератор, что более квайно.

anonymous
()
use Data::Dumper;
my @values;
open my $fh, '<', $file || die «$file: $!\n»;
<$fh> for (1..2);
while (<$fh>) {
push @values, [ split ];
# ну, или
my ($user,$size,$hit) = split;
... # дальнейшая обработка
}
close $fh;
print Dumper \@values;



В чём вопрос-то?

AITap ★★★★★
()
#!/usr/bin/env perl

use strict;
use warnings;
use autodie;

my @data;
my $file = './f.txt';

open my $f, '<', $file;
while (my $str = <$f>) {
  push @data, $str if $str =~ /^[\w]+\s+[0-9]+\s+[0-9]+\s+[0-9]+\s*?$/;
}
close $f;
skam
()
open$f,shift and do{$.>2 and ($user,$size,$hit) = split and print "$user,$size,$hit\n" while<$f>}
Olegymous ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.