MichaelR: + Datei open/seek/read/write ??

Hallo,

ich hab' da ein kleines Problem:

  1. ich will eine Textdatei mit perl öffnen, Daten reinschreiben, und wieder schließen. Das geht prima mit:

open (ID, ">$db_id_file_name_franz1") or &cgierr("error [...]");
if ($db_use_flock) {flock(ID, 2)  or &cgierr("fehler [....]");}
print ID ("bla");
close ID;
}

  1. jetzt soll aber diese Datei vorher geöffnet werden, ihr Inhalt* ausgelesen werden, in eine Variable zwischen gespeichert werden, die Datei wieder geschlossen werden; der Wert der Variable soll dann in dem unter 1) genannten Schreibprozess in die gleiche Datei wieder geschrieben werden.

* Diese Variable (Inhalt der Datei) ist irgendeine Zahl zwischen 1 und X. Also z. B. 1, 5, 19, 35 etc.

Um diesen Inhalt zu lesen dachte ich mir:

read the current file value

$CurrNum = 0;
open (ID, ">$db_id_file_name_franz1") or &cgierr("error [...]");
seek (ID, 0, 0);
read (ID, $CurrNum, 1);
close ID;

Die so gelesene Variable $CurrNum soll dann um eins erhöht werden:

$CurrNum = $CurrNum+1;

  1. Allerdings gibt's da 'n Problem:

a) da ich nicht weiß ob der Dateiinhalt ein- oder zweistellig (oder dreistellig) ist, kann ich die Länge bei read() nicht fest vorgeben.

b) Es scheint so - auch wenn ich als Länge 1 verwende - dass nichts aus der Datei gelesen wird, weil immer der initialisierte Wert von $CurrNum im Schreibprozess in die Dateigeschrieben wird.

Kann mir da bitte jemand helfen ?

Danke

Michale

  1. Hi,

    $CurrNum = 0;
    open (ID, ">$db_id_file_name_franz1") or &cgierr("error [...]");

    ^ du öffnest die Datei zum Schreiben...

    seek (ID, 0, 0);
    read (ID, $CurrNum, 1);

    ^ du liest genau 1 byte...

    close ID;

    Ich täts so machen:

    open(ID, "<$db_id_file_name_franz1") or cgierr(...);
    $CurrNum = <ID>;
    close ID;

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    1. Hi Andreas,

      $CurrNum = 0;
      open (ID, ">$db_id_file_name_franz1") or &cgierr("error [...]");
                    ^ du öffnest die Datei zum Schreiben...
      seek (ID, 0, 0);
      read (ID, $CurrNum, 1);
                             ^ du liest genau 1 byte...
      close ID;

      Ich täts so machen:

      open(ID, "<$db_id_file_name_franz1") or cgierr(...);
      $CurrNum = <ID>;
      close ID;

      Mensch super !!!!

      Auf das wäre ich nie gekommen, herzlichen Dank !

      cu
      Michael