Autor Beitrag
NeoXan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81

WinXP Sp1 Home
D7 Prof
BeitragVerfasst: So 07.09.03 12:28 
Hier ist der Record

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  aEvo = record
    first       : array[1..6] of integer;
    second        : integer;
    third     : integer;
    fourth, fifth : integer;
  end;
  paEvo = ^aEvo;


gespeichert wird so...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
   myFile   : File of aEvo; 
             n : paEvo;  
begin
   AssignFile(myFile, 'C:\Test.evo');
   ReWrite(myFile);
   Write(myFile, n^);
   CloseFile(myFile);
end;


und gelesen so...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
   AssignFile(myFile, 'C:\Test.evo');
   FileMode := fmOpenRead;
   Reset(myFile);

  while not Eof(myFile) do
   begin
    Read(myFile, n^);
     ShowMessage('DIR => '+IntToStr(n^.third)+chr(10)+chr(13)+'Health => '+IntToStr(n^.second));
   end;
 CloseFile(myFile);


Der Array müsste doch einfach so mitgespeichert werden oder gibt es da noch etwas zu beachten...

Das Prob ist einfach, dass ich die Datei offensichtlich richtig speichern kann...sie aber nicht mehr richtig lesen kann???
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: So 07.09.03 12:40 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
ar
   myFile   : File of aEvo; 
             n : aEvo;   //<---
begin
   AssignFile(myFile, 'C:\Test.evo');
   ReWrite(myFile);
   Write(myFile, n);  //<---
   CloseFile(myFile);
end;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
   AssignFile(myFile, 'C:\Test.evo');
   FileMode := fmOpenRead;
   Reset(myFile);

  while not Eof(myFile) do
   begin
    Read(myFile, n);  //<---
     ShowMessage('DIR => '+IntToStr(n.third)+chr(10)+chr(13)+'Health => '+IntToStr(n.second));
   end;
 CloseFile(myFile);


oder

vor assignfile
ausblenden Delphi-Quelltext
1:
new(n);					

ist ja nur ein pointer, und da mußt du noch Speicher zuweisen. wobei für mich die erste Variante einfacher wäre.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 07.09.03 14:51 
Hallo,
NeoXan hat folgendes geschrieben:
Hier ist der Record

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  aEvo = record
    first       : array[1..6] of integer;
    second        : integer;
    third     : integer;
    fourth, fifth : integer;
  end;
  paEvo = ^aEvo;


den Record solltest du noch um das Wörtchen Packed erweitern. Dann werden (wahrscheinlich) die Dateien kleiner, auf jeden Fall bleibt aber die Kompatibilität gegeben, wenn du dein Programm mal unter einer anderen Delphi Version oder mit anderen Grundeinstellungen Compilierst.
Also so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  aEvo = packed record
    first       : array[1..6] of integer;
    second        : integer;
    third     : integer;
    fourth, fifth : integer;
  end;


Gruß
Klabautermann
NeoXan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 81

WinXP Sp1 Home
D7 Prof
BeitragVerfasst: So 07.09.03 15:54 
Ok, also ich stell die Frage mal ganz anders...denn bei mir klappt gerade gar nichts :)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  aEvo = record
    gene       : array[1..6] of integer;
    dir        : integer;
    health     : integer;
    xpos, ypos : integer;
  end;
  paEvo = ^aEvo;

var
  Evolve     : TEvolve;
  bugs       : Tlist;

implementation


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:
procedure Init;
var
  t, l : integer;
  p    : paEvo;
  w, h : integer;
  x, y : integer;
begin
  bugs:=tlist.create;
  randomize;

  for t:=1 to 100 do begin
    new(p);
    for l:=1 to 6 do
      p^.gene[l]:=random(10);
    p^.xpos:=random(500);
    p^.ypos:=random(350);
    p^.health:=100;
    p^.dir:=1;
    bugs.add(p);
  end;

  for t:=0 to 99 do begin
    p:=bugs[t];
    x:=p^.xpos;
    y:=p^.ypos;
  end;

  for t:=1 to 6 do begin
    xdir[t]:=round(cos(pi/3*t)*5);
    ydir[t]:=round(sin(pi/3*t)*5);
  end;

end;


soah...es werden also...sagen wir mal Käfer erstellt und in einem IMG platziert...nun möchte ich einfach die Pos, Health, Gene's etc. alles abspeichern um dann später wieder zu öffnen...etc...aber das klappt irgendwie nicht ganz so richtig... :/

Desweiteren bräuchte ich glaube ich noch einen Wert der festlegt, wie viele Käfer abgespeichert wurden...wegen dem wieder öffnen...oder geht es auch so...
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 07.09.03 19:44 
Hallo,

hier findest du ein Beispiel (TypeFileDemo). Dort werden die wichtigsten Befehle auch zum feststellen der Dateilänge und dem Positionieren des Dateizeigers.

Gucke es dir mal an, vieleicht beantwortet das ja schon deine Fragen.

Gruß
Klabautermann