Announcement

Collapse
No announcement yet.

Textdatei mit blockread/write lesen und schreiben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Textdatei mit blockread/write lesen und schreiben

    Hallo,

    habe gerade festgestellt, dass bei uns die programmeinstellungen in einer Textdatei gespeichert werden, welche mit blockread,blockwrite gelesen oder geschrieben wird.
    habe sowas noch nie gemacht!
    wie liest man d bestimmte werte aus bzw. wie schreibt man sie wieder an der richtigen stelle rein?

    Gruß

    Markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus,

    BlockRead und -Write kommt mir komisch vor, Text-Dateien liest/schreibt man eigentlich mit ReadLn/WriteLn:

    <PRE>
    procedure ReadTextfile(AFilename:string);
    var
    F : TextFile;
    s : string;
    begin
    AssignFile(F, AFileName);
    Reset(F); // Datei zum Lesen öffnen
    while not EoF(F) do begin
    ReadLn(F, s);
    // tu was mit dem gelesenen String s
    end;
    CloseFile(F);
    end;
    </PRE>

    Zum Schreiben nimm Rewrite statt Reset und WriteLn statt ReadLn. Wenn Du nur ein paar Bytes der Textdatei ändern willst, musst Du m.E. trotzdem die ganze Datei einlesen, die Änderungen vornehmen und dann zurückschreiben.

    Viel einfacher und "Delphi-gemäßer" liest und schreibst Du aber eine Text-Datei mit Hilfe einer Stringliste:

    <PRE>
    procedure ModifyTextFile(AFileName:string; s:string);
    var
    L : TStringList;
    begin
    L := TStringList.Create;
    try
    L.LoadFromFile(AFileName);
    L[10] := s;
    // als Beispiel, die Zeile mit dem Index 10
    // durch den String s ersetzen
    L.SaveToFile(AFileName);
    finally
    L.Free;
    end;
    end;
    </PRE&gt

    Comment


    • #3
      Hallo Markus,

      >Viel einfacher und "Delphi-gemäßer" liest und schreibst Du aber eine Text-Datei mit Hilfe einer Stringliste

      dem kann ich mich nur anschließen. (Auf der anderen Seite wissen wir leider nicht wie genau die datei aufgebaut ist, welches format sie besitzt daher kann man nur mutmaßen)

      Eine sinnvolle und wohlmöglich leistungsstärkere Alternative wären win 3.xx Inifiles.

      <pre>
      uses ...,inifiles;
      .
      .
      .
      var
      IniF : TIniFile;
      sTemp : String;
      begin
      IniF := TIniFile.Create('C:\x.ini');
      if IniF.ValueExists('Test','TestValue') Then
      sTemp := IniF.ReadString('Test','TestValue','')
      IniF.Free;
      End;

      Dateiinhalt von x.ini:
      ;Kommentare sind mit Semikolon auch möglich.
      [Test]
      TestValue=Test String
      <pre>
      (Diesen Code habe ich nicht wirklich getestet, sollte aber so funktionieren)
      (Schreiben ist ähnlich simpel)

      Das ganze ist natürlich wesentlich besser und ausführlicher in der Delphi Hilfe erklärt.

      mfg
      P

      Comment


      • #4
        Hallo Markus,
        Blockread und Blockwrite eignet sich speziell zum Laden Speichern von Strings mit fixer Stringlänge. (Wie ein Hexeditor)
        Hier ist es egal welche Zeichen im String enthalten sind.
        Die gesamte ASCII-Tabelle (0-255) wird akzeptiert.

        Beim Lesen oder Schreiben muss eine Satzlänge und die Satzposition angegeben werden.

        Habe dir ein kleine Beispiel zusammengestellt.

        mgf
        Oswal

        Comment

        Working...
        X