![]() |
Variable aus Stringlist laden
Moin, ich habe ein kleines Spiel programmiert. Es arbeitet hauptsächlich mit Variblen, die je nach Aktion gesetzt werden.
Jetzt wird Variable1 während des Spiels auf 100 gesetzt, Variable2 auf 10. Wenn man dann keine Lust mehr hat, kann man auf speichern klicken und die Variablen werden in einer Stringlist gespeichert:
Delphi-Quellcode:
Bis dahin klappt das auch sehr gut...
procedure TForm1.SaveClick(Sender: TObject);
var Save: TStringList; begin Save:=TStringList.Create; try Save.Add(FloatToStr(Variable1)); Save.Add(FloatToStr(Variable2)); Save.SaveToFile(...\Save.txt'); finally Save.free; end; end; Beim nächsten Programmstart wird dann gesucht, ob die Datei ...\Save.txt vorhanden ist. Wenn ja, dann wird die Prozedur VariablenLaden aufgerufen.
Delphi-Quellcode:
VariablenNeu wird also nur beim ersten Start aufgerufen und die Variablen werden am Anfang auf Standardwerte gesetzt.
if FileExists('...\Save.txt')
then VariablenLaden else VariablenNeu; VariablenLaden soll die in der Stringlist gespeicherten Variablen 1 und 2 laden. Da weiß ich jetzt nicht weiter. In meiner .Txt steht jetzt: 100 10 __________ Doch ich weiß nicht, wie ich jetzt die Variable1 auf die erste Zeile setzten kann, die Variable2 auf die zweite Zeile. Die Variablen sind : real, ich möchte jedoch auch einen ganzen Text einer String-Variablen in der gleichen Datei speichern. Was muss ich tun??? Liebe Grüße! |
Re: Variable aus Stringlist laden
Wenn das Speichern mit
Zitat:
Delphi-Quellcode:
geschehen. Dabei musst Du aber unbedingt die gleiche Reihenfolge wie beim Speichern einhalten. Eine Alternative dazu wäre TIniFile, dabei kannst Du ohne Berücksichtigung der Reihenfolge speichern/laden, da sich der Wert über Abschnitt und Bezeichnung zuordnen lässt.
Variable1 := StrToFloat(Save[0]);
|
Re: Variable aus Stringlist laden
Ah, danke.
:thumb: Ich hatte es mit runden Klammern und (1) wegen Zeile 1 versucht.
Delphi-Quellcode:
Wenn ich das so mache, sagt er mir:
procedure TForm1.VariablenLaden;
var Save: TStringList; begin Save:=TStringList.Create; try Variable1:=StrToFloat(Save[1]); finally Save.free; end; end; EStringListError: Index der Liste überschreitet das Maximum(0) Ich muss ja auch noch diese TStringList auf ...\Save.txt setzten, wie? :?: :?: :?: |
Re: Variable aus Stringlist laden
Delphi-Quellcode:
Save.LoadFromFile(...\Save.txt');
|
Re: Variable aus Stringlist laden
Hm, bis gerade hatte er mir gesagt:
undefinierter Bezeichner: LoadFromFile, aber jetzt klappt es - fast... Exception der KlasseEAccessViolation ... Zugriffsverletzung bei Adresse XYZ |
Re: Variable aus Stringlist laden
Zeig mal Deinen ganzen Code zum Laden.
|
Re: Variable aus Stringlist laden
Geh doch einmal zeilenweise durch und schau nach in welcher Zeile der Fehler überhaupt auftritt.
Vermutungen: 1. Da du gar nicht genau festlegst in welchem Verzeichnis gespeichert wird, kannst du auch nicht wissen, ob du die irgendwo zufällig gespeicherte Datei auch beim Laden wieder triffst. ![]() 2. Das Objekt ist nicht erzeugt, aber in dem bisher geposteten Quelltext ist das ja der Fall. 3. Die Zeile existiert in der Datei nicht. |
Re: Variable aus Stringlist laden
Das ... bei ...\Save.txt stellt nur den vorherigen Pfad dar. Ich hab den schon korrekt eingegeben.
Die Datei existiert auch, da ich schon gespeichert habe. Inhalt: 80 10 Diese Schreibblockade hängt nicht zufälligerweise mit Vista zusammen??? |
Re: Variable aus Stringlist laden
Ganzer Code:
Delphi-Quellcode:
unit StarTrek;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Gefechtsmodus: TButton; Label1: TLabel; Sensorscan: TButton; Maschinenraum: TButton; Kurseingabe: TButton; Sicherheit: TButton; Quartier: TButton; Sperren: TButton; Schliessen: TButton; Label2: TLabel; AktuellerKurs: TLabel; Label3: TLabel; AktuellerZustand: TLabel; Label4: TLabel; AnzahlMechaniker: TLabel; Label5: TLabel; Save: TButton; procedure FormCreate(Sender: TObject); procedure SchliessenClick(Sender: TObject); procedure KurseingabeClick(Sender: TObject); procedure VariablenLaden; procedure SaveClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; rLeben1, rLeben2, rSchaden1, rSchaden2, rGeld, rZufall : real; sKurs : string; rMechaniker : real; rTorpedos : real; rTorpedos2 : real; implementation uses Kurseingabe1; {$R *.DFM} procedure TForm1.VariablenLaden; var Save: TStringList; begin Save.LoadFromFile('E:\Informatik\Delphi\Delphi\StarTrekNeu\Saves\Save.txt'); try rLeben1:=StrToFloat(Save[1]); finally Save.free; end; end; procedure TForm1.FormCreate(Sender: TObject); begin VariablenLaden; rMechaniker:=5; rGeld:=2500; sKurs:=('1,782 : 3,584 : 26,047'); AktuellerKurs.caption:=sKurs; AnzahlMechaniker.Caption:=FloatToStr(rMechaniker); AktuellerZustand.Caption:=((FloatToStr(rLeben1))+'%'); end; procedure TForm1.SchliessenClick(Sender: TObject); begin showmessage('Hauptcomputerzugang über diese Konsole wird beendet...'); sleep(3000); close; end; procedure TForm1.KurseingabeClick(Sender: TObject); begin Form1.hide; Form5.show; end; procedure TForm1.SaveClick(Sender: TObject); var Save: TStringList; begin Save:=TStringList.Create; //Objekt erzeugen try //try-finally hilft, das Objekt auch dann freizugeben, wenn ein Fehler auftritt Save.Add(FloatToStr(rLeben1)); //Text hinzufügen Save.Add(FloatToStr(rMechaniker)); Save.SaveToFile('E:\Informatik\Delphi\Delphi\StarTrekNeu\Saves\Save.txt'); //Datei speichern finally Save.free; //Objekt wieder freigeben end; end; end. Variable1 entspricht rLeben1 Variable2 entspricht rMechaniker |
Re: Variable aus Stringlist laden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz