Autor Beitrag
Hellspike
Hält's aus hier
Beiträge: 6

WinXP Prof.
D5 Prof.
BeitragVerfasst: 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)

ausblenden volle Höhe 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:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: 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 :roll:

AXMD
Hellspike Threadstarter
Hält's aus hier
Beiträge: 6

WinXP Prof.
D5 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: 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

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

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Do 03.03.05 12:36 
ausblenden Delphi-Quelltext
1:
BlockWrite(datei, h^, sizeOf(tDaten));					

normal sollte das eher so ausschauen
ausblenden Delphi-Quelltext
1:
BlockWrite(datei, tDaten, sizeOf(tDaten));					
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 :wink: ). 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.