Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Datensatz aus einer Typisierten Datei löschen (https://www.delphipraxis.net/5469-datensatz-aus-einer-typisierten-datei-loeschen.html)

Master_BB 7. Jun 2003 18:45


Datensatz aus einer Typisierten Datei löschen
 
Hya,
hab zur zeit das prob das ich keinen bestimmten datensatz aus meiner Typisierten datei löschen kann.
Theoretisch müßte es so

Code:
  i:=1;
  while not eof(pf) do
   begin
    Read(pf, buffer[i]);
    i := i+1;
   end;
  delete := StrToInt(Label9.Caption);
  for i := delete-1 to filesize(pf) do begin
   buffer[i] := buffer[i+1];
  end;
  truncate(pf);
gehn läuft aber net. da macht er garnix.
obwohl er was machn müßte dadurch das der zu löschenende DS vom i+1sten überschrieben wird und alles rückt nach und das ende wird abgeschnippelt.
Kann mir mal jemand helfen?
bei meinem TP programm lief es so in etwa

[edit=MrSpock]Verschoben[/edit]

MrSpock 7. Jun 2003 19:18

Hallo Master_BB,

du überschreibst ja nur den Puffer im Speicher! Du musst an die Stelle gehen, ab der du überschreiben willst und dann mit:

Delphi-Quellcode:
write(pf, buffer[i+1]);
die Daten in die Datei schreiben. Das Ganze natürlich in einer Schleife.

Master_BB 9. Jun 2003 09:36

ich kriegs nicht hin kann mir nicht mal jemand
den fertigen löschen code hinschreiben?

Master_BB 9. Jun 2003 22:34

so habs jetzt selber gelöst
und nach 2 stunden hirnzermatern hatt ichs, fals es nochjemand benötigt
hier der code

zur erklärung
z ist ein array des Datensatz Records
Label3 ist der gerade angezeigte datensatz 1,2 oder so
jo der rest ist klar

Delphi-Quellcode:
    seek(f,0);
     for i:=1 to filesize(f) do
      begin
       read(f,z[i]);
      end;
    delete := StrToInt(Label3.Caption);
    seek(f,0);
    e := 0;
    for i := 1 to delete-1 do                   //vor löschen ds add
     begin
      Write(f,z[i]);
      e := e+1;
     end;
    seek(f,e);
    for i := delete+1 to filesize(f) do      //nach löschen ds add
     begin
      Write(f,z[i]);
     end;
    seek(f,filesize(f)-1);
    truncate(f);                            //dateiende abschnippeln
[edit=MrSpock]Center Tag durch Code Tags ersetzt.[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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