Sebastian: Position des Dateizeigers

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

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