Entwickler-Ecke
Dateizugriff - Probleme beim speichern eines Records
NeoXan - So 07.09.03 12:28
Titel: Probleme beim speichern eines Records
Hier ist der Record
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...
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...
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 - So 07.09.03 12:40
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; |
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
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
Klabautermann - So 07.09.03 14:51
Titel: Re: Probleme beim speichern eines Records
Hallo,
| NeoXan hat folgendes geschrieben: |
Hier ist der Record
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:
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 - So 07.09.03 15:54
Ok, also ich stell die Frage mal ganz anders...denn bei mir klappt gerade gar nichts :)
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 |
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 - So 07.09.03 19:44
Hallo,
hier [
http://downloads.oitmann.de/samples/] 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!