Autor Beitrag
Stoffel1984
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: Fr 10.10.03 09:49 
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.


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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:

_________________
mfg.
mâximôv
Stoffel1984 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 219

Win NT, Win 2000
D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 10.10.03 12:09 
KA...vielleicht so (nix getestet):

ausblenden 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;

_________________
mfg.
mâximôv