Position des Dateizeigers
Sebastian
- perl
Hi Leute, hatte schon mal so eine Frage gestellt: und eine Antwort bekommen:
Hi Leutz, hab ein Prob mit Perl:
ich möchte wie folgt die Position des Zeigers in Perl auslesen:
my @pos;
@pos = tell(DATEI);
Datei wurde vorher geöffnet und enthält Inhalt.
Bloß, in @pos stehen dann keine Werte.
Wie kann ich die Hexoffset-Positionen am effektivsten auslesen?
danke für eure Antworten
Die Antwort hab ich erhalten:
Halihallo Sebastian
ich möchte wie folgt die Position des Zeigers in Perl auslesen:
@pos = tell(DATEI);
tell gibt einen Skalar zurÃck, kein Array.
Ändere dies also in:
$pos = tell(DATEI);
Datei wurde vorher geöffnet und enthält Inhalt.
Wie wurde sie geöffnet? - Code?
Bloß, in @pos stehen dann keine Werte.
tell gibt nur einen Wert zurück.
Wie kann ich die Hexoffset-Positionen am effektivsten auslesen?
Hexoffset-Positionen?
Viele Grüsse
Philipp
Also zu den Fragen:
ich hab es danz normal mit open() geöffnet:
open(DATAIN, "<../guest.data");
@Daten = <DATAIN>;
@hexoffset = tell(DATAIN);
meiner Meinung nach werden doch eine Reihe von Skalaren fon tell(DATIN) ausgegeben.
Diese sollten nacheinander in @hexoffset geschrieben werden - tun sie aber nicht
Wer kann mir weiter helfen
Halihallo Sebastian
Hi Leute, hatte schon mal so eine Frage gestellt: und eine Antwort bekommen:
Der Verweis auf http://forum.de.selfhtml.org/archiv/2003/10/60345/ hätte dem
Full-Quote auch genüge getan ;)
open(DATAIN, "<../guest.data");
@Daten = <DATAIN>;
@hexoffset = tell(DATAIN);
Wie schon im anderen Posting von mir: tell gibt einen _Skalar_ aus, kein Array. Ändere
dies in $pos = tell(DATAIN);
perldoc -f tell gibt Auskunft:
<cite>
tell FILEHANDLE
tell Returns the current position *in bytes* for FILEHANDLE, or -1 on
error. FILEHANDLE may be an expression whose value gives the
name of the actual filehandle. If FILEHANDLE is omitted, assumes
the file last read.
Note the *in bytes*: even if the filehandle has been set to
operate on characters (for example by using the ":utf8" open
layer), tell() will return byte offsets, not character offsets
(because that would render seek() and tell() rather slow).
</cite>
meiner Meinung nach werden doch eine Reihe von Skalaren fon tell(DATIN) ausgegeben.
NEIN! - Zum dritten mal :-)
Diese sollten nacheinander in @hexoffset geschrieben werden - tun sie aber nicht
Du scheinst hier etwas misszuverstehen. tell gibt dir die _aktuelle Postition_ der Datei
zurück. Du hast jedoch bereits alle Daten der Datei eingelesen und somit ist die aktuelle
Position das _Ende der Datei_ (eof). Was willst du denn tun? - Die Positionen der
einzelnen Zeilen auslesen?
open( F, '<../guest.data' );
while (<F>) {
print tell(F)."\n";
# do something with $_ (the current line)
}
close(F);
dieses Beispiel gibt dir die Position der Linienenden (nach der Newline) aus. Die
einzelnen Zeilen kannst du über $_ (enthält die aktuelle Zeile) weiterverarbeiten.
BTW: Dateien werden zeilenweise ausgelesen (wie im Beispiel), alles andere ist unnötiger
Speicherverbrauch.
Viele Grüsse
Philipp