AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variable aus Stringlist laden

Ein Thema von Delphi-Narr · begonnen am 20. Sep 2009 · letzter Beitrag vom 20. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

Variable aus Stringlist laden

  Alt 20. Sep 2009, 11:03
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:
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;
Bis dahin klappt das auch sehr gut...

Beim nächsten Programmstart wird dann gesucht, ob die Datei ...\Save.txt vorhanden ist. Wenn ja, dann wird die Prozedur VariablenLaden aufgerufen.

Delphi-Quellcode:
  if FileExists('...\Save.txt')
  then VariablenLaden else VariablenNeu;
VariablenNeu wird also nur beim ersten Start aufgerufen und die Variablen werden am Anfang auf Standardwerte gesetzt.
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!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Variable aus Stringlist laden

  Alt 20. Sep 2009, 11:09
Wenn das Speichern mit
Zitat:
Save.Add(FloatToStr(Variable1));
geschieht, muss das Laden äquivalent mitVariable1 := StrToFloat(Save[0]); 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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Variable aus Stringlist laden

  Alt 20. Sep 2009, 11:18
Ah, danke.

Ich hatte es mit runden Klammern und (1) wegen Zeile 1 versucht.

Delphi-Quellcode:
procedure TForm1.VariablenLaden;
 var Save: TStringList;
begin
  Save:=TStringList.Create;
  try
    Variable1:=StrToFloat(Save[1]);
  finally
    Save.free;
  end;

end;
Wenn ich das so mache, sagt er mir:

EStringListError: Index der Liste überschreitet das Maximum(0)

Ich muss ja auch noch diese TStringList auf ...\Save.txt setzten, wie?
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#4

Re: Variable aus Stringlist laden

  Alt 20. Sep 2009, 11:22
Save.LoadFromFile(...\Save.txt');
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Variable aus Stringlist laden

  Alt 20. Sep 2009, 11:27
Hm, bis gerade hatte er mir gesagt:

undefinierter Bezeichner: LoadFromFile, aber jetzt klappt es - fast...

Exception der KlasseEAccessViolation ... Zugriffsverletzung bei Adresse XYZ
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Variable aus Stringlist laden

  Alt 20. Sep 2009, 11:29
Zeig mal Deinen ganzen Code zum Laden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Variable aus Stringlist laden

  Alt 20. Sep 2009, 11:45
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.
http://www.delphi-library.de/viewtopic.php?p=499701
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Variable aus Stringlist laden

  Alt 20. Sep 2009, 12:16
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???
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Variable aus Stringlist laden

  Alt 20. Sep 2009, 12:19
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Variable aus Stringlist laden

  Alt 20. Sep 2009, 12:21
Zitat:
Delphi-Quellcode:
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;

...

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;
Siehst Du den Unterschied (Tipp: erste Zeile nach dem begin)?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 Uhr.
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