Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Laufendes Programm Speichern (savetofile) (https://www.delphipraxis.net/130380-laufendes-programm-speichern-savetofile.html)

Sirlunchalot 7. Mär 2009 14:27


Laufendes Programm Speichern (savetofile)
 
Da ich nocht nicht allzu viel Programmiererfahrung habe, aber trotzdem daran sitze ein Minibrowsergame zu programmieren, bräuchte ich mal eure Hilfe
Ich brauche die korrekte Syntax für den record type und anschließend die Syntax fürs Speichern in einer Datei (zB. in C/Dokumente...) und das auslesen... Ebenfalls sollen mehrere Files abgespeichert werden können und man soll auswählen können welche man laden möchte.
(Heißt man soll einen Filenamen angeben können)
Hoffe ich beanspruche eure Zeit nicht zu sehr :-D

Micha88 7. Mär 2009 14:38

Re: Laufendes Programm Speichern (savetofile)
 
Ich verstehe es so, als ob wir dir dein Game entwickeln sollen?
Mhh.. klingt zwar gut, aber keiner wirds machen :D

Achja nochwas.. gewöhn' dir besser mal an den Code richtig zu schreiben .. Groß- und Kleinschreibung.

Sirlunchalot 7. Mär 2009 14:47

Re: Laufendes Programm Speichern (savetofile)
 
Hehe so sollte das eigentlich nicht klingen.
Also ich habe ja schon ein wenig Ahnung wie ich das machen muss, habe aber das Problem, dass irgendetwas mit meiner Syntax nicht stimmt.
Delphi-Quellcode:
 type TTest = record
     level: integer;
     name: string;
     end;
type    Test = TTest;
so, oder ähnlich hatte ich das noch von Pascal in Erinnerung.
Leider ist die Syntax falsch, da immer wieder ein Fehler erzeugt wird.
Das ist mein Problem zur record function.

Zum Speichern habe ich zum Beispiel gefunden, wie man (soweit ich den Quelltext richtig gedeutet habe) den Wert eines
Editfelds speichern kann.
Leider suche ich da nicht nach. Ich muss herausfinden, wie ich Variablen in einer File speichere und wieder auslesen kann.

quendolineDD 7. Mär 2009 15:14

Re: Laufendes Programm Speichern (savetofile)
 
Herzlich willkommen in der DP.
Zum einen will ich sagen, das pro Thread nur ein Thema erlaubt ist. Für weitere Fragen öffne ein neues Thema.
Hättest du die Suche bemüht, wärst du locker über einige Quelltexte gestolpert die deine Anliegen behandeln.

Zu deinem Quelltext. TTest als Rekord ist ok. Um es aber dann zu nutzen, musst du nicht noch einen Typen festlegen, sondern eine Variable vom Typ TTest deklarieren
Delphi-Quellcode:
var test : TTest;
Dann kannst du mit
Delphi-Quellcode:
Test.Name := <Name>
auf die einzelnen Felder zugreifen.
Was ich schonmal nicht verstehe ist doch die eigentliche Unvereinbarkeit eines Browserspiels und der Programmierung dessen in Delphi.

Sirlunchalot 7. Mär 2009 16:25

Re: Laufendes Programm Speichern (savetofile)
 
Danke für die Info, werde einen neuen Thread aufmachen !

Sirlunchalot 7. Mär 2009 17:07

Re: Laufendes Programm Speichern (savetofile)
 
Mhm kann mir jemand mal einen Link zu einer Dp Seite geben in der erklärt wird, wie man in eine Datei speichert?
Ich möchte eine record Speichern keinen Text aus einer Edit-Komponente.
Mein Quelltext ist nach mehrmaligem Suchen und verbessern immernoch nicht Funktionsfähig.

Definition des record
Delphi-Quellcode:
type TSpielstand = record
      level : integer;
      name : string;
      str : integer;
      ausdauer: integer;
      konsti: integer;
      inti : integer;
      geschick: integer;
      quest: integer;
      end;
Variablendefinition
Delphi-Quellcode:
 var
  Form2: TForm2;
  spielstand: tspielstand;
  datei: file of tspielstand;
Definieren meiner Variablen (Da es eine Art Rollenspiel werden soll, sind die Variablen Attribute)
Delphi-Quellcode:
procedure TForm2.Button11Click(Sender: TObject);
begin
   spielstand.level:= erf;
  spielstand.str := str;
  spielstand.geschick := geschick;
  spielstand.konsti := konsti;
  spielstand.inti := inti;
  assignfile (tspielstand,'n.txt');
  rewrite ();
  append (spielstand);
  write (tspielstand, Spielstand.level, Spielstand.str, Spielstand.geschick, Spielstand.konsti, Spielstand.inti);
  closefile (tspielstand);
end;
Natürlich ist der Quelltext voller Fehler und nichtmal vollständig (siehe: rewrite()
Da ich allerdings noch nicht so lange Programmiere, habe ich auch nur wenig Erfahrung mit den ganzen Funktionen von Lazarus bzw Delphi.

Hoffe ihr könnt mir helfen bzw mir einen Link oder Lösungsansätze geben :)
Ich versuche gerne mir aus Formeln meine Lösung zu bilden.

Gruß

Felix015 7. Mär 2009 17:28

Re: Laufendes Programm Speichern (savetofile)
 
Als erstes würde ich anstatt
Delphi-Quellcode:
datei : file of TSpielstand;
das so schreiben
Delphi-Quellcode:
datei : textfile;
Wenn du jez deinen Record abspeichern willst schreibst du die Werte(wie du es schon wolltest) in eine Textdatei.Dann steht in Zeile eins zum Beispiel das Level.
Delphi-Quellcode:
assignfile(datei,'C:\...');
rewrite(f);
writeln(f,spielstand.level);
writeln(f,spielstand.bla);
closefile(f);
Wenn du das dann auslesen willst googlest du einfach mal nach einer funktion die eine bestimmte zeile einer textdatei ausliest, übergibst dieser Funktion deine Zeile und schreibst diese Zeile in eine Variable
Delphi-Quellcode:
level := LeseZeileAusDatei('C:\...',1);
...  := LeseZeileAusDatei('C:\...',2);
 ...
Hoffe das hat jetzt weitergeholfen.

Sirlunchalot 7. Mär 2009 17:45

Re: Laufendes Programm Speichern (savetofile)
 
Danke erstmal dafür, die Antwort hat mir schonmal einiges gebracht.
Jetzt weiß ich schonmal wie ich abspeichere.
Dazu noch die Frage: Muss ich jedesmal wieder:
Delphi-Quellcode:
assignfile (...);
rewrite(...);
writeln(...);
writeln(...);
closefile(...);
machen? Wenn ich mir das so angucke meinst du das so, dass ich einfach mehrere
assignfiles schreibe und dann rewrite ... benutze oder?
Denn sonst würde die Datei immer wieder überschrieben werden.

Werde erstmal gucken ob ich hier im Dp was zu Zeile aus einer Textdatei auslesen finde

Danke nochmal !:)

Felix015 7. Mär 2009 17:57

Re: Laufendes Programm Speichern (savetofile)
 
Hi,
du musst nicht jedesmal
Delphi-Quellcode:
assignfile (...);
rewrite(...);
writeln(...);
writeln(...);
closefile(...);
schreiben.

Kurze Erklärung zu dem Code:
- Assignfile verknüpft eine Variable mit einer Textdatei. In den Klammern musst du zuerst die Variable angeben, dann den Pfad der Textdatei.
Delphi-Quellcode:
var
f : textfile;
begin
assignfile(f{Variable},C:\{Pfad der Textdatei});
end;
- Dann musst du die Datei öffnen. Wie das hängt davon ab was du machen willst. Mit rewrite öffnest du die einfach so zum schreiben. Mit append würdest du weitere Zeichen Anfügen. Mit reset öffnest du eine Datei nur zum lesen
In Klammern kommt immer die Variable.

-Dann kannst du mit der Datei arbeiten:
writeln schreibt eine Zeile mit von dir angegebenen Text
readln liest eine Zeile aus(du kannst nicht bestimmen welche Zeile ausgelesen wird, du kannst nur von vorne beginnen)
Delphi-Quellcode:
writeln(f,'Dies steht jetzt in der Textdatei');
würde eine neue Zeile erstellen in der obiges steht.
Jetzt kannst du aber auch noch weitere Sachen machen(aber nur so , wie du die Datei geöffnet hast, wenn du datei mit reset(f) geöffnet hast, kannst du nichts schreiben)
Du könntest beliebig viele writeln's bzw readln's machen, das heißt du musst nicht immer assignfile und die öffnemethode davorschreiben

- zum schluss nicht vergessen die Verknüpfung mit der Variablen aufzuheben
Delphi-Quellcode:
closefile(f);
mfg Felix

Sirlunchalot 7. Mär 2009 18:11

Re: Laufendes Programm Speichern (savetofile)
 
Achso, danke für diese logischen Erklärungen.
So kann man dass dann immer leichter verstehen :)

Habe sogar einen kleine Fehler gefunden :P
Aus dem von dir gesagten ging nämlich für mich hervor,
das bei deinem :
Delphi-Quellcode:
 writeln (f,spielstand.bla);
der Name der Textdatei bestimmt wird, was aber bedeutet du hast die ' vergessen ;)
Bin richtig stolz auf mich, dass ich darauf gekommen bin !

Werde mich dann um eine auslesen Funktion bemühen :)

Und nochmals danke
Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:43 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz