Autor Beitrag
Mentor86
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: Di 04.05.04 16:19 
Ich habe ein File und will einen Wrt eingeben können, der dann an die erste Stelle des Files geschrieben wird. Alle anderen Werte rücken dann auf.
Meine Prozedur funktioniert noch nicht so richtig, ich kann aber keinen Fehler finden. Vielleicht könnt ihr mir helfen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TFFile_Uebung.BErste_StelleClick(Sender: TObject);
var f,g: file of integer;
    zahl: integer;
begin
  AssignFile(f,'Daten.dat');
  AssignFile(g,'Daten.dat');
  Rewrite(f);
  Reset(f);
  Reset(g);
  zahl:=StrToInt(EErste_Stelle.text);
  write(f,zahl);
  while not eof(g) do
  begin
    read(g,zahl);
    write(f,zahl);
  end;
  truncate(f);
  CloseFile(f);
  CloseFile(g);
  BLaden.click;
end;

_________________
Man kann Probleme nicht mit Denkweisen lösen, die zu ihnen geführt haben.
Michael Stenzel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 133


D3 Prof, D7 PE
BeitragVerfasst: So 09.05.04 23:21 
Hi Mentor86.

Wenn Du einen Wert am anfang der Datei Schreiben willst ist es ein Risenaufwand, da alle Daten umkopiert werden müßen.

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:
procedure TFFile_Uebung.BErste_StelleClick(Sender: TObject); 
var g: file of integer;
    zahl, Dateilaenge,i,zw : integer;
begin
  AssignFile(g,'Daten.dat');
  zahl:=StrToInt(Form1.EErste_Stelle.text);

  If not(FileExists('Daten.dat')) then
    ReWrite(g)
  else
    ReSet(g);

  Dateilaenge := Filesize(g);  // Dateigröße ermitteln
  if Dateilaenge = 0 then
   Write(g,Zahl)              // Ersten Eintrag schreiben
  else begin
    For  i := Dateilaenge downto 1 do begin
      Seek(g,i-1);            // Position Vor Dateiende Setzen
      Read(g,zw);            // Integer lesen
      write(g,zw);            // Integer Schreiben
    end;
    Seek(g,0);                // Erste Position 
    Write(g,Zahl);           // Integer Schreiben
  end;
 CloseFile(g);
 BLaden.click; 
end;


Wenn es nicht nur eine Übung ist, kannst Du Dir ja mal Überlegen, die Integer am Ende Anzufügen, und beim Lesen die Dateiposition zu berechnen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
...
  Position := Dateilaenge - Sollpos;
  Seek(g,Position);
...


mfg
Michael
Michael Stenzel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 133


D3 Prof, D7 PE
BeitragVerfasst: So 09.05.04 23:21 
Oh, Sorry, Habe den Beitrag doppelt versendet! :oops:

mfg
Michael