Offsetadessen der Dateizeilen einlesen
Sebastian Nagel
- perl
Hi Leute, ich hab ein Problem mit einem meiner Scripts.
Ich versuche mittels dieses Codes die Offsetnummern der Zeilen einer Datei einzulesen:
open(DATAIN, "<../guest.data");
@Daten = <DATAIN>;
$hexoffset[0] = tell(DATAIN);
while(<DATAIN>)
{
$i++;
$hexoffset[$i] = tell(DATAIN);
}
close(DATAIN);
Das Problem ist nur, dass danach der Array nichts enthält (bzw. nur die Zelle Nr. 0 hat danach einen zugewiesenen Wert)
Der Beispiel-Code von Self-HTML klappt auch nicht - der Server bringt wiedermal den vielsagenden Fehler: a Error ocurred....
Hier noch mal kurz der Beispielcode, damit ihr nicht zu lange suchen müßt:
#!/usr/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
my $Datei = "/usr/info/readme.txt";
my @Zeilenanfaenge = "";
open(DATEI, "<$Datei") || die "$Datei: $!";
$Zeilenanfaenge[0] = tell(DATEI);
my $i = 0;
while(<DATEI>) {
$i++;
$Zeilenanfaenge[$i] = tell(DATEI);
}
close(DATEI);
$i = 1;
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Testausgabe</title></head><body>\n";
foreach (@Zeilenanfaenge) {
print "Zeile $i beginnt in der Datei bei Offset $_<br>\n";
$i++;
}
print "</body></html>\n";
Hallo Sebastian,
Zunächst mal: du hast 'use strict;' vergessen. Entsprechend hast du auch die ganzen my
vergessen.
open(DATAIN, "<../guest.data");
@Daten = <DATAIN>;
Hier ist der Datei-Zeiger bereits am Ende der Datei angekommen. Deshalb...
$hexoffset[0] = tell(DATAIN);
while(<DATAIN>)
{
$i++;
$hexoffset[$i] = tell(DATAIN);
}
close(DATAIN);
Wird die Schleife auch nie durchlaufen. Besser so:
open DATAIN, '<', '../guest.data' or die $!;
my @offsets = (0);
while(<DATAIN>) {
push @offsets,tell(DATAIN);
}
close DATAIN;
@offsets enthält dann die Datei-Adressen der Zeilen. Brauchst du gleichzeitig auch noch
alle Zeilen der Datei, musst du sie halt per push() in einen zweiten Array packen oder so.
Grüße,
CK