Philipp Hasenfratz: Position des Dateizeigers

Beitrag lesen

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/>.