/ Parsovanie súboru csv a preskočenie prvých 3000 riadkov - algoritmus, perl, parsovanie, csv

Parsovanie súboru csv a preskočenie prvých 3000 riadkov - algoritmus, perl, parsovanie, csv

Urobil som túto funkciu na úpravu svojho súboru csv:

    sub convert
{
# open the output/input file
my $file = $firstname."_lastname_".$age.".csv";
$file =~ /(.+/)(.+.csv)/;
my $file_simple = $2;
open my $in, "<", $file or die "can not read the file: $file $!";
open my $out, ">", $outPut."_lastname.csv" or die "can not open the o file:  $!";

$_ = <$in>;

# first line
print $out "X,Y,Z,Wn";
while( <$in> )
{
if(/(-?d+),(-?d+),(-?d+),(-?d+),(-?d+)/)
{
my $tmp = ($4.$5);
print $out $2.$sep.$3.$sep.$4.$sep.($5/10)."n";
}
else
{print $out "Error: ".$_;}
}
close $out;
}

Chcel by som preskočiť prvých 3000 riadkov a nemám tušenie, že to urobím, je to môj prvýkrát pomocou perl.

Ďakujem.

odpovede:

1 pre odpoveď č. 1

Keďže chcete preskočiť prvých 3000 riadkov, len použite next if v súčinnosti s premenná aktuálneho čísla linky $.:

use strict; use warnings;

my $skip_lines = 3001;

open(my $fh, "<", "data.dat") or die $!;
while (<$fh>) {
next if $. < $skip_lines;
//process the file
}
close($fh);

od tej doby $. kontroluje aktuálne číslo linky, tento program jednoducho hovorí, že perl začne na 3001. línii, účinne preskočí 3000 riadkov. Podľa želania.

$. Aktuálne číslo riadku pre posledný prístup k súboru. každý filehandle v Perl počíta počet riadkov, ktoré boli čítané ono. (V závislosti od hodnoty $ /, predstavu Perlu o tom, čo predstavuje a line sa nemusí zhodovať s vaším.) Keď je riadok čítaný z filehandle (cez readline () alebo <>), alebo keď príkaz () alebo seek () je vyvolaný, $. sa stane aliasom počítadla riadkov pre daný súborový riadok. Môžeš nastavte počítadlo priradením k $. , ale to v skutočnosti nebude presuňte ukazovateľ hľadania. Lokalizácia $. nebude lokalizovať filehandle 's počet riadkov, namiesto toho bude lokalizovať Perl' s pojem ktoré filehandle $. je momentálne alias. $. sa resetuje, keď je filehandle je uzavretá, ale nie pri otvorení otvoreného súborového riadku bez zásahu blízko (). Ďalšie podrobnosti nájdete v téme I / O Operators v perlop. Keďže <> nikdy nekonkretizuje explicitne, zvýšia sa čísla liniek naprieč ARGV súbormi (ale pozri príklady v eof). Môžete tiež použiť HANDLE-> input_line_number (EXPR) pre prístup k počítadlu liniek pre daný filehandle bez toho, aby ste sa museli starať o to, ktorú rukoväť ste naposledy prístupná. Mnemonické: veľa programov používa "." znamená aktuálnu linku číslo.

Referenčné číslo:

http://perldoc.perl.org/perlvar.html