Ich möchte dem Nutzer in meinem Sudoku-Programm die Möglichkeit geben, Sudokus zu speichern, z.B. damit man es nicht an einem Stück machen muss. Selbstverständlich soll es auch möglich sein, ein Sudoku zu laden.
Der Ansatz ist dabei der, dass das Sudoku in einem String gespeichert wird, die String[1] ist die Zahl links oben, String[10] die Zahl darunter.
Nach dem ich verschiedene Möglichkeiten abgewogen hat (sprich: entweder Ini oder Savedialog, aber ich will, dass der Nutzer so komfortabel wie möglich speichern und laden kann) möchte ich TSaveDialog und TLoadDialog benutzen. Auf Knopfdruck (nur Entwicklungsphase, packe ich später bei der Save-Prozedur rein) wird das Sudoku zeichenweise in eine Zeile eines TMemos gepackt, mögliche Zeichen sind halt '1'..'9' und ' '. In der Save-Prozedur soll diese Zeile gespeichert werden, in der Load-Prozedur soll aus der Datei der String ans TMemo geaddet werden. Dazu speichere ich eine TStringList als .txt-Datei.
Die TMemo dient dabei nur als visuelle Überprüfung, später reduziere ich das ganze auf TStringList.
Try und finally kommen später noch.
Delphi-Quellcode:
procedure TForm1.Speichern(Sender: TObject);
var Sudoku:TStringList;
begin
Sudoku:=TStringList.create;
SaveDialog1.Filter:='*.txt|*.TXT';
if SaveDialog1.execute
then
begin
Sudoku[0]:=Memo1.lines[0];
Sudoku.SaveToFile(SaveDialog1.FileName);
end;
Sudoku.Free;
end;
procedure TForm1.Sudokuladen1Click(Sender: TObject);
var Sudoku:TStringList;
begin
Sudoku:=TStringList.create;
OpenDialog1.Filter:='*.txt|*.TXT';
if OpenDialog1.execute
then
Sudoku.LoadFromFile(OpenDialog1.FileName);
Memo1.Lines.add(Sudoku[0]);
end;
Sudoku.Free;
end;
Wenn ich aber versuche, ein Sudoku zu speichern, gibt er eine Fehlermeldung "Out of bound " aus.
Was mache ich falsch?
PS: Diese .txt-Datei ist ja sehr manipulationsanfällig (würde dem Nutzer nichts bringen, aber...), kann man das auch in einem Format schreiben, auf das der Nutzer nicht per Explorer öffnen kann?
[edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit]