| Autor |
Beitrag |
Hellspike
Hält's aus hier
Beiträge: 6
WinXP Prof.
D5 Prof.
|
Verfasst: Do 03.03.05 12:17
Hallo!
und zwar habe ich das Problem, dass das was ich will zwar abgespeichert wird aber es wird zu viel gespeichert.
(Schrift von Lebels werden mit in die Datei gespeichert)
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: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type pDaten = ^tDaten; tDaten = record Begriff:string[20]; Text:string[100]; next:pDaten; end;
TForm2 = class(TForm) Label1: TLabel; Button1: TButton; Memo1: TMemo; Edit2: TEdit; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Label2: TLabel; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Edit1Change(Sender: TObject);
private public end;
var Form2: TForm2; SuchDatensatz:pDaten; Datensatz:pDaten; wahl:byte; leer:boolean;
implementation
uses Unit1;
{$R *.DFM}
procedure TForm2.FormCreate(Sender: TObject); var datei:file; h:pDaten; begin new(SuchDatensatz); SuchDatensatz^.next := NIL;
AssignFile(datei,'test.dat'); {$I-} Reset(datei,1); {$I+}
if IOResult=0 then begin new(Datensatz); h := Datensatz; BlockRead(datei,h^,sizeOf(tDaten)); while not eof(datei) do begin new(h^.next); h := h^.next; h^.next := NIL; BlockRead(datei,h^,sizeOf(tDaten)); end; CloseFile(datei); end;
end;
procedure TForm2.Button4Click(Sender: TObject); var h,alt:pDaten; ersetzt:boolean; datei:file; begin ersetzt:=false; AssignFile(datei,'test.dat'); Rewrite(datei,1); if Datensatz = NIL then begin new(Datensatz); Datensatz^.next := NIL; move(SuchDatensatz^,Datensatz^,sizeof(tDaten)); ersetzt:=true; end; h := Datensatz; while h<>NIL do begin if (h^.Begriff = SuchDatensatz^.Begriff) and not ersetzt then begin alt := h^.next; move(Suchdatensatz^, h^, sizeOf(tDaten)); h^.next := alt; ersetzt := true; end; BlockWrite(datei, h^, sizeOf(tDaten)); if (h^.next=NIL)and not ersetzt then begin new(h^.next); move(SuchDatensatz^,h^.next^,sizeof(tDaten)); end; h := h^.next;
end; CloseFile(Datei); end;
procedure TForm2.Button5Click(Sender: TObject); begin close; end;
procedure TForm2.Button1Click(Sender: TObject); begin Form2.visible:=false; end;
procedure TForm2.Edit1Change(Sender: TObject); begin SuchDatensatz^.Begriff := Edit1.Text; end;
end. |
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Do 03.03.05 12:26
1.) In welcher Funktion tritt der Fehler auf?
2.) Wie äußert er sich (Meldung etc.)
3.) Meine Glaskugel hab ich gestern Tommie geliehen
AXMD
|
|
Hellspike 
Hält's aus hier
Beiträge: 6
WinXP Prof.
D5 Prof.
|
Verfasst: Do 03.03.05 12:29
ka in welcher Funktion. Äußert sich so dass eben außer den zu speichernden Sachen noch Müll in der Datei steht.
Z.B. sachen aus nem Label.
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Do 03.03.05 12:33
Dann erklär mir bitte folgenden Code-Abschnitt (Funktionsweise und alle Variablen) - du hast nämlich keinen einzigen Kommentar in deinem Quelltext, das macht es extrem schwer, sich darin zurechtzufinden. Was ist zB ersetzt?
AXMD
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| while h<>NIL do begin if (h^.Begriff = SuchDatensatz^.Begriff) and not ersetzt then begin alt := h^.next; move(Suchdatensatz^, h^, sizeOf(tDaten)); h^.next := alt; ersetzt := true; end; BlockWrite(datei, h^, sizeOf(tDaten)); if (h^.next=NIL)and not ersetzt then begin new(h^.next); move(SuchDatensatz^,h^.next^,sizeof(tDaten)); end; h := h^.next; |
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Do 03.03.05 12:36
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 03.03.05 12:42
| Hellspike hat folgendes geschrieben: | ka in welcher Funktion. Äußert sich so dass eben außer den zu speichernden Sachen noch Müll in der Datei steht.
Z.B. sachen aus nem Label. |
Das ist doch "normal".
Beispiel:
Irgendwo hast du z.B. einen String der Länge 40 definiert (DeineVar : String[40]). Dort trägst du aber nur 10 Buchstaben ein.
Jetzt speicherst du diesen String ab. Dann 30 Zeichen nicht vorbelegt. Er speichert trotzdem alle 40 Zeichen ab (alle die Ahnung haben, halten sich jetzt mal zurück wegen des Längen-Bytes  ). Das was aber dort in den restlichen Zeichen steht, kann irgendein Speichermüll sein, der einfach nicht mehr gebraucht wurde. Wenn du den String wieder einliest, bekommst du den Müll auch nicht angezeigt. Solltest du zumindest nicht.
|
|
|