Autor Beitrag
rizor
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 209

WIN XP
Delphi 2005 PE, Visual C++
BeitragVerfasst: So 15.04.07 12:50 
Hi,

Ich bin im moment dabei ein kleines spiel zu programmieren und versuche gerade das Abspeichern und Laden zu programmieren.

Die Daten, die gespeichert werden sollen, befinden sich in Records.
Wie lässt sich das nun am einfachsten bewerkstelligen, dass man das speichern kann.

Ich dachte da an SaveDialogs, weiß aber nicht genau wie das geht.

Kann mir da jemand helfen?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 15.04.07 13:39 
Moin!

Schau mal nach Suche in: Delphi-Forum, Delphi-Library TFILESTREAM, damit sollte sich das lösen lassen. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Christian V.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 311

Win Xp Prof
Turbo Delphi 2005
BeitragVerfasst: So 15.04.07 13:41 
Kannst du vielleicht mal die Definition deines Records posten?
So könnten wir dir besser weiterhelfen.

_________________
Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?
rizor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 209

WIN XP
Delphi 2005 PE, Visual C++
BeitragVerfasst: So 15.04.07 17:15 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type Gesellschaft = record
  NameB: string;
  GeTag: integer;
  GeMonat: integer;
  GeJahr: integer;
  NameComp: string;
  Gruendung: integer;
  Kapital: integer;
  Flughafen: string;
end;


So sieht mein Record aus.
Wie kann ihc dass nun am besten speichern?
Christian V.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 311

Win Xp Prof
Turbo Delphi 2005
BeitragVerfasst: So 15.04.07 17:31 
Die Suchfunktion ist schon toll:
www.delphi-library.d...ighlight=tfilestream

Das sollte eigentlich alles erklären.

_________________
Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 15.04.07 18:27 
Moin!

Ich würde dir zu einem Tag-basierten Dateiformat raten, wie zum Beispiel Ini-Files es anbieten :arrow: Suche in: Delphi-Forum, Delphi-Library TINIFILE

Du solltest besser keine typisierten Dateien nehmen, das ist (wenn man noch nicht soo viel Erfahrung damit hat) leider nicht ganz einfach; abgesehen davon in deinem Fall auch gar nicht möglich, weil du lange Strings (= Stringund nicht ShortString) verwendest.

Fazit: wenn es nicht viele Daten sind (<64KB gesamt), dann versuch´s doch erstmal mit den Ini-Dateien. Falls du damit an Grenzen stößt, kannst du später sicher auch noch eine andere Lösung wählen, wenn du dein Programm geschickt planst (zwei entsprechende Prozeduren, die den gesamten Vorgang abwickeln -> dann brauchst du später nur hier zu ändern). Mit den Ini-Dateien kommst du aber auf jeden Fall jetzt erstmal weiter. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: So 15.04.07 20:40 
hmm, also ich denk auch als anfänger kommt man mit tfilestream und ein bisschen hilfe hier und da recht schnell zu recht.

er braucht ja nur die parameter zum erstellen des filestreams, die prozeduren write und read und jemand muss ihm sagen, dass er den filestream nach dem speichern/laden schliesst und das er statt strings shortstrings benutzen muss(daran bin ich damals gescheitert)
Corpsman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228

KUbuntu 10.4
Lazarus
BeitragVerfasst: So 15.04.07 20:46 
Na wenn er doch so Anfänger ist dann schreibt ihm doch geschwind wie's aussieht.

Er fragt dann den teil den er net Versteht und hats auch gelernt.

ausblenden 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:
type Gesellschaft = record
  NameB: string;
  GeTag: integer;
  GeMonat: integer;
  GeJahr: integer;
  NameComp: string;
  Gruendung: integer;
  Kapital: integer;
  Flughafen: string;
end;

Procedure Save(Filename:String;data:Gesellschaft);
var f:Tfilestream;
begin
  f:= Tfilestream.create(Filename,fmcreate or fmopenwrite);
  f.write(data,sizeof(data));
  f.free;
end;

Function Load(Filename:String):Gesellschaft;
var f:Tfilestream;
begin
  f:= Tfilestream.create(Filename,fmopenread);
  f.read(result,sizeof(result));
  f.free;
end;


Oh da sehe ich gerade das du Ja strings in deinem Record hast.

Evtl must du die Strings anders speichern.

Das machst du dann Zeichenweise.

Also zuerst ein Integer Variable schreiben die die Anzahl der Zeichen im String.
Dann die einzelnen Chars

Beim laden liest du zerst den Integer und weist ja dann wie viele Chars der zu Ladende String lang ist.

_________________
--
Just Try it.
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: So 15.04.07 20:57 
er kann statt strings einfach shortstrings nehmen oder er begrenzt den string mit
gesellschaft:string[20]
rizor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 209

WIN XP
Delphi 2005 PE, Visual C++
BeitragVerfasst: So 15.04.07 22:30 
Super, danke.

Die Strings habe ich mitlerweile begrenzt.

Nun habe ihc aber zwei Fragen.

1. Wie mache ich das nochmal mit den Zeichen? die Länge kenne ich ja nicht.
Bei NameB woher weiß ich, dass der nun NameB ausgelesen hat und nicht schon weiter
gegangen ist?

2. Wenn ich die Sachen nun lade, schiebt er die dann automatisch in das record?
Damit meine ich, wenn ich nun zwei Gesellschften habe, passt er dass dann auch
automatisch an, wie bei anderen Files (z.B file of Gesellschaft)?

cu
rizor
Corpsman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228

KUbuntu 10.4
Lazarus
BeitragVerfasst: Di 17.04.07 09:57 
ausblenden 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:
Procedure WriteStringToStream( Const M:Tstream; Data:String);
var I:integer;
    c:Char;
begin
  i := Length(Data);
  m.write(i,sizeof(i));
  for i := 1 to Length(data) do begin
    c := data[i];
    m.write(c,sizeof(c));
  end;
end;

function ReadStringFromStream( Const M:Stream):String;
var I,j:integer;
    c:Char;
begin
  Result := '';
  m.read(i,sizeof(i));
  for j := 1 to i do begin
    m.read(c,sizeof(c));
    Result := Result + c;
  end;
end;


So da ahbe ich dir mal so "Blind" die Laden speichern Routinen mit Strings reingecoded.

Das Ausprogrammieren für deien Record must aber selbst machen. ( Als Tipp du must nun die Felddaten im Record einzeln von hand speichern )

und deine 2. Frage verstehe ich nicht.

_________________
--
Just Try it.
rizor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 209

WIN XP
Delphi 2005 PE, Visual C++
BeitragVerfasst: Di 17.04.07 18:59 
Frage 2 hat sich erledigt.
Danke für eure Hilfe.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 23.04.07 20:44 
Moin!

user profile iconJann1k hat folgendes geschrieben:
hmm, also ich denk auch als anfänger kommt man mit tfilestream und ein bisschen hilfe hier und da recht schnell zu recht.

Soviel dazu :arrow: Nächster Thread... :roll:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.