Highscore erstellen, speicher, laden
Ich hab lange gesucht aber leider nix passendes gefunden.
Ich habe die variable Score als Integer und möchte diese nun in einem Text-Dokument score.txt abspeichern. Ausserdem möchte ich das jede Zeile der Datei in ein array highscore[1..5] gespeichert werden soll. Im Netz habe ich verschiedene Sachen gefunden doch alle verwenden eine Memobox und so Kram den ich gar nicht brauche. In C++ geht sowas sehr einfach. Man kann jede Zeile auslesen und in einen String speichern. Man kann der Datei washinzufügen oder einfach überschreiben. Eine Memobox, Klasse und so wird gar nicht gebraucht. Gibt es sowas ähnliches und unkompliziertes in Delphi? Bsp:
Delphi-Quellcode:
openfiletoread('score.txt');
do while (Ende der Datei erreicht wurde) { score[i]:=line(i); i:= i+1; } close file; openfiletowrite('score.txt'); if file nicht gefunden dann soll 'score.txt' neu erstellt werden lineaddtofile := newscore; close file; So stell ich es mir vor ;) in C++ sieht es so ähnlich aus, aber hab keine Ahnung wie es in Delphi aussieht o.O |
Re: Highscore erstellen, speicher, laden
Hello,
wenn ich das richtig verstanden habe brauchst du ca. so etwas:
Delphi-Quellcode:
uses
SysUtils; var MyFile: TextFile; i: Integer; score: array [1..5] of integer; temp: String; begin // <-- ZUM LESEN --> // Öffne Datei assignfile(MyFile, 'score.txt'); reset(MyFile); i:=0; // Lese Datei aus und speicher alles in inhalt while not EOF(MyFile) do begin readln(MyFile, temp); score[i] := StrToInt(temp); inc(i); end; closefile(MyFile); // <-- ZUM SCHREIBEN --> temp:=''; for i := 0 to length(score) do temp:=temp + inttostr(score[i]) + #10; // Speichern assignfile(MyFile,'score2.txt'); if not fileexists('score2.txt') then rewrite(MyFile) else append(MyFile); write(MyFile, temp); closefile(MyFile); end. |
Re: Highscore erstellen, speicher, laden
TStringList
|
Re: Highscore erstellen, speicher, laden
So größten danke genau das was ich brauche!!
Nur wenn ich jetzt alle compiliere, kommt bei mir folgende Fehlermeldung bei dieser Zeile: MyFile: TextFile; Meldung: [DCC Fehler] Unit1.pas(32): E2029 '=' erwartet, aber ';' gefunden |
Re: Highscore erstellen, speicher, laden
Du hast statt var ein const über den variablen
|
Re: Highscore erstellen, speicher, laden
du hast recht^^
danke auch!!! |
Re: Highscore erstellen, speicher, laden
Ok wieder ein Problem mit dem Speichern ;(
Gespeichert wird diesmal nur das, was in einem Edit feld sich befindent. Gebe ich jetzt über die Tastatur 'asdf' ein, so wird es gespeichert und bei Programm neustart wieder geladen. Wenn ich jetzt über OpenDialog, einen ganzen Pfad in das Edit-Feld übergebe, wird diese komischerweise gar nicht gespeichert o.O So sieht die betroffene Stelle in Delphi aus (Ich benutze Delphi 2009 falls es eine Rolle spielt): Text auslesen und ausgeben:
Delphi-Quellcode:
Text speichern:
procedure TForm1.FormCreate(Sender: TObject);
var MyFile: TextFile; temp: String; begin opendialog1.filter:='Programme|*.exe'; assignfile(MyFile, 'pfad.txt'); if not fileexists('pfad.txt') then rewrite(MyFile); reset(MyFile); readln(MyFile, temp); edit1.text := temp; closefile(MyFile); end;
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var MyFile: TextFile; temp: String; begin temp:=edit1.text; assignfile(MyFile,'pfad.txt'); rewrite(MyFile); append(MyFile); write(MyFile, temp); closefile(MyFile); end; OpenDialog Pfad auslesen und zwischen speicher:
Delphi-Quellcode:
procedure TForm1.AdvGlowButton1Click(Sender: TObject);
begin edit1.Text := ''; opendialog1.execute; edit1.Text := opendialog1.filename; pfad := opendialog1.FileName; end; Wie schon gesagt, gebe ich per Hand was ein wie ASDFblablabal speichert er alles, wähle ich über OpenDialog einen Pfad, wird diese nicht gespeichert. |
Re: Highscore erstellen, speicher, laden
Keiner weiss warum der link vom OpenDialog nicht gespeicher wird?
|
Re: Highscore erstellen, speicher, laden
Wo ist pfad deklariert?
Beim Schliessen sicherst du aber Edit1.Text. Und wenn du da nicht eingegeben hast geht es so natürlich nicht |
Re: Highscore erstellen, speicher, laden
Da ist was angegeben.
und zwar: edit1.text := opendialog1.filename; wenn ich per hand was eintipp, wird es gespeichert, wird was über opendialog in edit1.text was eingefügt, wird es nicht gespeichert. |
Re: Highscore erstellen, speicher, laden
Hallo,
steht etwas im edit1 oder in der txt-Datei drin wenn du mit dem Dialog was auswählst?? Eventuel ist irgendwo ein Zeilenumbruch zu viel, und deshalb wird es im edit nicht angezeigt Wenn was im edit1 drin steht sollte es egal sein ob per Hand oder per Dialog... |
Re: Highscore erstellen, speicher, laden
Im EditFeld wird ja alles Prima angezeigt. Der folständige Pfad und co. nur komischerweise wird er nicht gespeichert o.O
Den string habe ich überprüft, alles steht da wie es da sein sollte, nur er will nix speichern wenn ich den Pfad über OpenDialog einfüge, Strg+v wird angezeigt aber ebenfalls nicht gespeichert, nur sachen die ich per Hand eingeben, also buchstabe für buchstabe. |
Re: Highscore erstellen, speicher, laden
hmmm, also für mich passen die prozeduren, wenn was im edit1 drin steht, dann sollte es richtig gespeichert werden,
glaub ich kann dir nur helfen wenn du das ganze projekt online stellst. |
Re: Highscore erstellen, speicher, laden
Das Problem ist sehr einfach: Du benutzt relative Pfade. Damit benutzt du das aktuelle Arbeitsverzeichnis, das wird zum Beispiel geändert, wenn du einen Dialog benutzt.
Und deshalb landet die Datei dann dort wo zuletzt der OpenDialog war z.B., genau deshalb muss man grundsätzlich absolute Pfade verwenden. Das eigene Verzeichnis der Exe ist zwar für das Speichern von Einstellungen schlecht geeignet, aber wenn du dort speichern willst, dann musst du das so machen:
Delphi-Quellcode:
Mehr zu dem Thema findest du hier:
AssignFile(MyFile, ExtractFilePath(ParamStr(0)) + 'pfad.txt');
http://www.delphi-library.de/viewtopic.php?p=499701 |
Re: Highscore erstellen, speicher, laden
relative Pfade oje
Naja ich les mir mal den Linkinhalt später durch ;) Auf ale Fälle es klappt jetzt wunderbar!!! Größten Dank auch!!!! :bounce1: :bounce1: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 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