Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Werte von Integer in Textdatei speichern (https://www.delphipraxis.net/134763-werte-von-integer-textdatei-speichern.html)

Lord_Crudelito 28. Mai 2009 12:11


Werte von Integer in Textdatei speichern
 
Hallo Forengemeinde,

ich habe ein kleines Quiz programmiert mit grafischer Oberfläche. Ich habe dort im Hintergrund einen Zähler, der die richtigen bzw falschen Antworten zählt.

Ich möchte nun allerdings diese Variable in eine neue Textdatei speichern um später nachzuschauen welcher Spieler wievielePunkte gemacht hat. Ich habe schon ein wenig gegooglet, finde aber glaube ich, nicht die richtige Lösung. Es wäre schön wenn mir dabei mal einer helfen könnte!


mfg

Ben

Satty67 28. Mai 2009 12:14

Re: Werte von Integer in Textdatei speichern
 
Dafür würde sich entweder eine INI-Datei anbieten (SpielerName=Punkte) oder eine TStringList (Names & Values) die dann auch gleich eine Methode mitliefert, um in eine Datei zu speichern.

Lord_Crudelito 28. Mai 2009 12:17

Re: Werte von Integer in Textdatei speichern
 
Und wie soll ich das ganze realisieren? Ich bin im grunde noch Anfänger in Delphi, hätte ich vllt vorher sagen sollen


Delphi-Quellcode:
if antwort[a ,2] = antwort[a ,0] then
wcounter:= wcounter+1
else
fcounter:= fcounter+1;

das ist der Code meines counters

wcounter steht für richtige antworten, fcounter für falsche antworten. Beide sind vorher auf 0 gesetzt worden

Luckie 28. Mai 2009 12:31

Re: Werte von Integer in Textdatei speichern
 
Hast du hier im Forum oder in der Hilfe schon mal nach Ini-Dateien geguckt, wie die funktionieren?

DeddyH 28. Mai 2009 12:31

Re: Werte von Integer in Textdatei speichern
 
Ini-Tutorial

Satty67 28. Mai 2009 12:39

Re: Werte von Integer in Textdatei speichern
 
In der Handhabung als HighScore-Liste wäre jetzt TSrtinList evtl. einfacher. Lässt sich einfach ein Wert (Spieler=Score) zufügen. Durch assign die ganze Liste gleich in einer ListBox anzeigen und mit LoadFromFile/SaveToFile recht schnell spreichern.

Das Aneignen der INI-File Funktionsweise hätte dann wieder den Vorteil, das man gleich einen Dateispeicher für weitere Programmeinstellungen hat.

Lord_Crudelito 28. Mai 2009 12:43

Re: Werte von Integer in Textdatei speichern
 
Zitat:

Zitat von Satty67
In der Handhabung als HighScore-Liste wäre jetzt TSrtinList evtl. einfacher. Lässt sich einfach ein Wert (Spieler=Score) zufügen. Durch assign die ganze Liste gleich in einer ListBox anzeigen und mit LoadFromFile/SaveToFile recht schnell spreichern.

Das Aneignen der INI-File Funktionsweise hätte dann wieder den Vorteil, das man gleich einen Dateispeicher für weitere Programmeinstellungen hat.

Das klingt genau nachdem was ich glaub ich brauche!Aber wie soll das ganze gehen?


edit:// habs jetzt soweit hingekriegt,das der Inhalt einer textdatei ausgelesen wird und in der tlistbox angezeigt wird.

Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);  //highscore
begin
highscore := TStringList.Create;
try
highscore.LoadFromFile('Beispiel.txt');
ListBox1.Items := highscore;
except
ShowMessage ('Fehler beim öffnen der Datei!');
end;
end;
nur wie schreib ich das ganze da rein?

p80286 28. Mai 2009 14:17

Re: Werte von Integer in Textdatei speichern
 
Zunächst solltest Du schauen ob der aktuelle Benutzer schon in der stringlist ist.
falls ja überschreibe den vorhandenen counterstand
falls nein einfach
Delphi-Quellcode:
highscore.lines.add(benutzer+'='+inttostr(counter));
Ggf. sortierst Du noch bevor Du alles wegschreibst.

das war's
gruß
K-H

DeddyH 28. Mai 2009 14:32

Re: Werte von Integer in Textdatei speichern
 
Zitat:

Zitat von p80286
Zunächst solltest Du schauen ob der aktuelle Benutzer schon in der stringlist ist.

Und da geht es doch schon los, da muss dann mit Copy oder AnsiStartsText oder dergleichen hantiert werden. Bei einer IniFile wäre das IMHO viel einfacher zu handlen.

himitsu 28. Mai 2009 14:43

Re: Werte von Integer in Textdatei speichern
 
@DeddyH: die TStringList bietet dafür aber auch Möglichkeiten ... muß man also nicht selber suchen
:angel2:

Delphi-Quellcode:
// Datei und Benutzer sind Strings und Counter, PunkteDazu sind Integer
// (Typkonvertierung passiert intern)

// alle nötigen Befehle:
XML := TXMLFile.Create;
XML.LoadFromFile(Datei);
Counter := XML.RootNode.Node[Benutzer].Data;
....
XML.RootNode.Node[Benutzer].Data := Counter;
XML.SaveToFile(Datei);
XML.Free;
// hier muß man nur aufpassen, daß Benutzer keine Lehrzeichen und sowas enthält
das geht eigentlich mit fast allen XMLLibs ähnlich einfach

und in Kurz ginge bei himXML auch sowas:
Benutzer darf hier nur keine * ? \ und > enthalten
Delphi-Quellcode:
XML := TXMLFile.Create(nil, false, 'meinepunkteliste');
XML.Options := [xoNodeAutoCreate, xoAutoSaveOnClose];
if FileExists(Datei) then XML.LoadFromFile(Datei)
else XML.Filename := Datei;
...
Counter := XML.RootNode.Node['user>name=' + Benutzer].Data;
XML.RootNode.Node['user>name=' + Benutzer].Data :=
  XML.RootNode.Node['user>name=' + Benutzer].Data + PunkteDazu;
XML.RootNode.Node['user>name=' + Benutzer].Data := Counter;
...
XML.Free;
Ergebnis wäre dann eine XML-Strucktur wie diese
XML-Code:
<meinepunkteliste>
  <user name="Benutzer">Counter</user>
  <user name="Benutzer2">Counter2</user>
  ...
</meinepunkteliste>

DeddyH 28. Mai 2009 14:58

Re: Werte von Integer in Textdatei speichern
 
Dafür mit XML zu hantieren halte ich persönlich für Overkill, aber das ist Geschmackssache.

himitsu 28. Mai 2009 16:20

Re: Werte von Integer in Textdatei speichern
 
Nja, notfalls bietet TStringList ja einige Methoden, zum Suchen von Zeilen/Namen.

Ansonsten vesuch ich ja gerade für sowas mein XML möglichs schmal und einfach zu halten.
Und ich hab's grad mal versucht zu messen ... für sowas Einfaches mach es die EXE um nur etwa 90 KB größer, was garnicht auffällt, da eine winzige VCL-Anwendung schon alleine ab 700 KB losgeht.

[add]
die TStringList hat auch schon 57 KB ausgemacht ... also sind es sogar nur ~33 KB (90-57) :angel2:

Satty67 28. Mai 2009 16:38

Re: Werte von Integer in Textdatei speichern
 
Irgendwann wir er wohl alles brauchen TStringList, INI und XML.

Bei INI müsste er die eingelesenen Werte in einer Liste speichern, womit er dann u.U. sowieso bei irgendeiner Liste landet.

Bei TStringList kann man ja mit IndexOfName den Spielernamen suchen und bei Bedarf aktualisieren, statt "adden". Denke das ist eher einfach.

Beispiel:
Delphi-Quellcode:
procedure PlayerToHighScore(HighScore : TStringList; PlayerName : String; Score : Integer);
var
  i : Integer;
  s : String;
begin
  i := HighScore.IndexOfName(PlayerName);
  s := PlayerName +'='+ IntToStr(Score);

  if i < 0 then // Spieler nicht vorhanden
    HighScore.Add(s)
  else
    HighScore[i] := s;
end;

DeddyH 28. Mai 2009 17:02

Re: Werte von Integer in Textdatei speichern
 
Zitat:

Zitat von Satty67
Irgendwann wir er wohl alles brauchen TStringList, INI und XML.

Du hast TRegistry vergessen :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 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