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
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.