![]() |
AW: Versuch hinter dem Dateiende zu lesen
Bei einer typisierten Datei-Variable gibt FileSize nicht die Dateigröße, sondern die Anzahl der Records an.
Delphi-Quellcode:
(RealSizeOfFile div RecSize)
|
AW: Versuch hinter dem Dateiende zu lesen
Achso, ok. Was bewirkt Seek() bei einer typisierten Datei? Springt er an die exakte Position, die angegeben wird, oder wird das intern mit der TypenGröße mültipliziert? Falls ja, dann würde das mit der For-Schleife auch funktionieren und der Fehler läge wo anders =/
|
AW: Versuch hinter dem Dateiende zu lesen
![]() Zitat:
|
AW: Versuch hinter dem Dateiende zu lesen
Ich denke dies ist nicht ganz unproblematisch;
Delphi-Quellcode:
LÖSCHEN wir auf eine geöffnete Datei ausgeführt (übrigens ein Hoch auf globale Variablen).
procedure TForm1.Button5Click(Sender: TObject);
var key:String[25]; i:integer; h:integer; begin Assignfile(woert,'Wörterbuch.dat'); reset(woert); ..... for i := 1 to filesize(woert) do begin read(woert,Woerterbuch); if key=Woerterbuch[i].Englisch then begin ... löschen(h); exit; end else ... end; closefile(woert); end; Procedure löschen(h:integer); ... begin assignfile(woert,'Wörterbuch.dat'); reset(woert); .. closefile(woert); Wenn schon global, dann aber reset und closefile auch global! Gruß K-H |
AW: Versuch hinter dem Dateiende zu lesen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich weiß jetzt nicht nach wem ich mich richten soll.
Zitat:
Zitat:
Zitat:
Im Anhang ist dann mal meine Unit. |
AW: Versuch hinter dem Dateiende zu lesen
Zitat:
Zuerst öffnest Du die Datei (assignfile+reset) dann gehst Du in einer schleife durch die Datei. Findest Du einen zu löschenden record springst Du aus der Schleife heraus und öffnest die Datei, die immer noch offen ist erneut (assignfile+reset), das kann nicht gut gehen. Versuch doch zumindestens folgendes:
Delphi-Quellcode:
Das ist zwar nicht schön, sollte aber wenigstens fehlerfrei sein.
if key=Woerterbuch[i].Englisch then begin
... closefile(woert); {------- Datei schließen!!!!!! } löschen(h); exit; end Gruß K-H |
AW: Versuch hinter dem Dateiende zu lesen
Delphi-Quellcode:
SIeht mittlerweilse so aus sagt mir aber "Dateizugriff verweigert" und dannach habe ich angeblich eine Filesize von 1001 und es fehlen 2 Einträge.
procedure TForm1.Button5Click(Sender: TObject);
var key:String[25]; i:integer; h:integer; begin assignfile(woert,'Wörterbuch.dat'); Reset(woert); key:=Inputbox('Abfrage','Welches Wort löschen?(bitte das englische Wort eingeben)',''); for i := 1 to filesize(woert) do begin read(woert,Woerterbuch); if key=Woerterbuch[i].Englisch then begin h:=i; löschen(h); exit; end; showmessage('Das Wort steht nicht im Wörterbuch'); end; closefile(woert); end; Procedure löschen(h:integer); var m:Twoerterbuch2; begin Read(woert,Woerterbuch); while h<Filesize(woert) do begin m[h]:=Woerterbuch[h]; Woerterbuch[h]:=Woerterbuch[h+1]; Woerterbuch[h+1]:=m[h]; write(woert,Woerterbuch); inc(h); end; seek(woert,Filesize(woert)-1); truncate(woert); end; |
AW: Versuch hinter dem Dateiende zu lesen
Zitat:
Delphi-Quellcode:
bleibt noch das Closefile unterzubringen.
Procedure Loeschen(h:integer);
var tmpsatz : TMyWoertRec; maxidx : integer; begin maxidx:=filesize(woert); repeat seek(woert,h+1); read(woert,tmpsatz); dec(h,1); seek(woert,h); write(woert,tmpsatz); until h>=maxidx; truncate(woert); end; Hast Du einmal darüber nachgedacht, Deine Daten in einer TList unterzubringen? Das wäre auf jeden Fall schneller. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz