Entwickler-Ecke

Dateizugriff - Untypisierte Textdatei ändern?


Stoffel1984 - Fr 10.10.03 09:49
Titel: Untypisierte Textdatei ändern?
Hallo,

ich habe eine Textdatei die als Schnittstelel zu einem anderen Programm fungiert. In dieser Datei sind Datensätze mit einer Länge von 1001 Zeichen gespeichert. Danach beginnt ein neuer Datensatz.
Nun muss ich diese Datei verändern bzw. immer einen Datensatz nach dem anderen. Das Auslesen ist kein Problem. Ich bekomme in meinem String die ganzen 1001 Zeichen. Dann bearbeite ich den String (die Veränderung) und möchte ihn an gleicher Stelle der Datei wieder verändert abspeichern. Ich hab das Auslesen momentan mit ReadBuffer realisiert. WriteBuffer ist ist unangebracht da es die gleiche Datei sein soll die verändert wird.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
begin
  AssignFile(FromF, 'test.txt');
  Reset(FromF, 1);
  repeat
    BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
    i1:=1;
    s2:='';
    fehler:=0;
    count :=0;
    repeat
      s1:=buf[i1];
      if (s1=''then fehler:=1;
      s2:=s2+s1;
      i1:= i1+1;
    until (i1>=1001);
    if (numread <> 0)  and (fehler = 0then
    begin
      substr :=s2;  //hier ist mein String den ich an gleicher Stelle ändern und reinschreiben möchte
    until (NumRead = 0);
  CloseFile(FromF);
end;


Hat jemand ne Idee?

Danke schonmal,

Stoffel


maximus - Fr 10.10.03 10:13

Hi...bevor du liest dir die position merken und dann, nachdem lesen/manipulieren ,mit 'seek' wieder zur position zurück kehren und schreiben :wink:


Stoffel1984 - Fr 10.10.03 10:41

Hi Maximus,

kannst mir mal kurz ein Beispiel machen? Hab grade keinen Schimmer wie das gehen soll, vor allem im Bezug auf das Schreiben.

Danke


maximus - Fr 10.10.03 12:09

KA...vielleicht so (nix getestet):


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
begin 
  AssignFile(FromF, 'test.txt'); 
  Reset(FromF, 2); // <-- 2 ist wichtig read/write access 
  repeat 
    n := filePos(formF); / <-- pos merken
    BlockRead(FromF, Buf, SizeOf(Buf), NumRead); 
    i1:=1
    s2:=''
    fehler:=0
    count :=0
    repeat 
      s1:=buf[i1]; 
      if (s1=''then fehler:=1
      s2:=s2+s1; 
      i1:= i1+1
    until (i1>=1001); 
    if (numread <> 0)  and (fehler = 0then 
    begin 
      substr :=s2;  //hier ist mein String den ich an gleicher Stelle ändern und reinschreiben möchte       

      Seek(FormF, n);

      BlockWrite(FromF, substr, SizeOf(Buf), NumRead); // ??? musst halt auch noch was machen 
     // nach dem schreiben sollte der datei zeiger dann wieder auf position des nächsten datensatzes liegen

    until (NumRead = 0); 
  CloseFile(FromF); 
end;