Ich frage mich, warum kann ich nicht Ein Ausschnitt meines Codes in zwei Linien in Perl zu nehmen scheinen istWie zwei Zeilen aus einer Datei in Perl lesen
#!/usr/bin/perl -w
open my $fh, "<", "data.txt" or die;
$line1 = <$fh>;
$line2 = <$fh>;
print $line1."\n";
print $line2."\n";
while(1){
@rows = <$fh>;
print "$rows[$e]";
$e++;
print "$rows[$e]";
}
Dies ist die Art von Daten I haben in Data.txt
5000 5000 12497500 0
5000 5000 33258530 0
5000 13 51822 0
5000 13 130147 0
5000 28 75016 0
5000 28 181343 0
5000 5000 4999 4999
5000 5000 12580635 4999
ich habe sah sich nach möglichen Lösungen, fand ich einige interessante Leads hier http://www.perlmonks.org/?node_id=620077, vor allem diese hier
my $fh = open("file");
for =$fh->$line1,$line2 {
# do whatever with the two lines
}
und
for (;;) {
my $line1 = <$fh>;
last if not defined $line1;
my $line2 = <$fh>;
last if not defined $line2;
...
}
Könnte ich auch fragen, was for =$fh->$line1,$line2
warum gibt es a = $ und warum es nicht funktioniert oder wie funktioniert es?
Jede Hilfe wird geschätzt!
Prost
UPDATE Okay, so könnte ich etwas fehlt, aber das ist die Operation I aus den Leitungen
while(1){
print '-'x50 . "\n";
my $line1 = <$fh>;
if($line1 =~ /^\s+(\d)\s+(\d)\s+(\d)\s+(\d)\s*$/){
my $A1 = $1;
my $B1 = $2;
my $C1 = $3;
my $D1 = $4;
}
last unless defined $line1;
my $line2 = <$fh>;
if($line2 =~ /^\s+(\d)\s+(\d)\s+(\d)\s+(\d)\s*$/){
my $A2 = $1;
my $B2 = $2;
my $C2 = $3;
my $D2 = $4;
}
last unless defined $line2;
my @type = ("AL", "PL", "RL", "AA", "PA", "RA", "AB", "PB", "RB", "AR", "PR", "RR", "AS", "PS", "RS", "AV", "PV", "RV");
print("For $type[$i]\n");
print("Node : $A1\n");
print("Depth : $B1\n");
print("Nb : $C1\n");
print("Nb+s : $C1+$C2\n");
print("Nk : $A1\n");
print("Nu : $A1/6\n");
print("Average number of comparisons is $C2/(7/6*$A1)\n");
$i++;
}
print '--- END ---'."\n";
Dies basiert auf xxFelixxxx Antwort
tun wollte
Schon eine Weile her, seit ich Perl geschrieben habe, aber 'while (1) {' sieht aus wie eine Endlosschleife ohne Pause. Ich gehe davon aus, dass das beabsichtigt ist, aber nur für den Fall ... geht hoch. Wo wird '$ e' initialisiert? –
'für = $ fh -> $ line1, $ line2' verwendet' perl6', was als eine andere, aber verwandte Sprache zu 'perl' aka' perl5' betrachtet werden sollte. – xxfelixxx
Fügen Sie all Ihren Skripten 'use strict;' hinzu und beheben Sie alle Probleme, über die sie sich beschweren. Dies führt zu weniger fehlerhaftem Code. – xxfelixxx