![]() |
Array speichern
Hallo,
bin leider blutiger Anfänger und suche mich gerade mit Google dumm und dämlich! Ich muss in der Schule als Projekt "Schiffe versenken" programmieren und will die erzeugten Schiffe, die ich in einem Array of char speichere nun in eine Datei sichern, um sie jederzeit wieder laden zu können. Ich hab nur irgendwelche sehr komplizierte Speichervorgänge für dynamische Arrays gefunden, blicke aber leider net durch. Ich suche einfach nur ne möglichkeit, das 2 dimensionelle Spielfeld zu speichern und wieder zu laden. Wäre euch sehr dankbar für eure Hilfe!!! MFG LuGGaZ |
Re: Array speichern
Hallo!
Leider hast Du nicht geschrieben, welchen Datentyp Du für Dein Array verwendest. Ich würde eine StringList empfehlen. Hier mal ein kleines Beispiel mit einem 3 x 3 Feldern grossen Integer-Array:
Delphi-Quellcode:
Vorher noch den Typ an eine Variable binden (z. B. var MeinArray: TIntegerArray) und die Zahlen ins Array schreiben. Dann kann man die Prozeduren so aufrufen: SpeichereArray(MeinArray, 'C:\array.txt')) bzw. LadeArray(MeinArray, 'C:\array.txt'))
type
IntegerArray = Array[1..3,1..3] of integer; procedure SpeichereArray(AArray: IntegerArray; FileName: String); var i, j: integer; slDaten: TStringList; begin slDaten := TStringList.Create; for i := 1 to 3 do for j := 1 to 3 do slDaten.Add(IntToStr(AArray[i, j])); slDaten.SaveToFile(FileName); slDaten.Free; end; procedure LadeArray(AArray: IntegerArray; FileName: String); var i, j, Count: integer; slDaten: TStringList; begin slDaten := TStringList.Create; slDaten.LoadFromFile(FileName); Count := 0; for i := 1 to 3 do for j := 1 to 3 do begin AArray[i, j] := StrToInt(slDaten[Count]); inc(Count); end; slDaten.Free; end; |
Re: Array speichern
Herzlich willkommen in der Delphi-PRAXiS, luggaz.
Dein "array of Char" kannst du als zusammenhängenden Speicherbereich betrachten und - wenn du willst - in einem Rutsch wegschreiben:
Delphi-Quellcode:
Freundliche Grüße vom marabu
type
TDemoForm = class(TForm) SaveButton: TButton; procedure SaveButtonClick(Sender: TObject); private Tiles: array [0..9, 0..9] of Char; end; var DemoForm: TDemoForm; implementation {$R *.dfm} procedure TDemoForm.SaveButtonClick(Sender: TObject); var fn: TFileName; begin fn := ChangeFileExt(ParamStr(0), '.cfg'); with TFileStream.Create(fn, fmCreate) do begin WriteBuffer(Tiles, SizeOf(Tiles)); Free; end; end; |
Re: Array speichern
Also ich hatte im oberen Beitrag geschrieben, dass der Array of char ist, also mit Zeichen.
Wenn ich dein Beispielquelltext verwende markiert er mir folgende Zeile:
Delphi-Quellcode:
und sagt: "Es gibt keine überladene Version von 'IntToStr', die man mit diesen Argumenten aufrufen kann!"
slDaten.Add(IntToStr(meer[i, k]));
Die Meldung hatte ich schon mal, mit einem anderen Quelltext, den ich bei der Suche in Google gefunden hab. Leider kann ich mit dieser Meldung herzlich wenig anfangen. @marabu Bei deiner Lösung erhalte ich die Meldung: "Es gibt keine überladene Version von 'WriteBuffer', die man mit diesen Argumenten aufrufen kann!" Vielen Dank schon mal für eure Hilfe... hoffe dass ich das noch gelöst bekomme ;-) MFG LuGGaZ |
Re: Array speichern
du kannst keinen element vom array of char mit inttostr umwandeln denn der datentyp ist ja char.
|
Re: Array speichern
Hallo luggaz,
deine fehlerhafte Anpassung des Codes von waseo - den ich hiermit auch recht herzlich als neues Mitglied im Forum begrüßen möchte - hat droppi ja schon korrigiert. Was du bei meinem Code falsch gemacht hast, kann ich nur raten. Wahrscheinlich hast du auch dort nicht auf den Parametertyp geachtet:
Delphi-Quellcode:
marabu
WriteBuffer(meer, SizeOf(meer));
|
Re: Array speichern
Ok, mit dem ersten Beispiel hab ichs jetzt gebacken bekommen, aber wenn ich versuche statt einem festen Dateinamen
Delphi-Quellcode:
einzusetzen bringt er mir nen Fehler und ich will, dass der Benutzer die Datei, bzw. den Speicherort auswählen kann.
savedialog1.filename
MFG LuGGaZ |
Re: Array speichern
a) was für einen fehler?
b) hast du den savedialog auch vorher erstellt? |
Re: Array speichern
jo, klar hab ich den SaveDialog vorher erstellt und der Name stimmt auch.
Meldung: Zitat:
LuGGaZ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:31 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 by Thomas Breitkreuz