AGB  ·  Datenschutz  ·  Impressum  







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

Array speichern

Ein Thema von luggaz · begonnen am 6. Jun 2006 · letzter Beitrag vom 6. Jun 2006
Antwort Antwort
luggaz

Registriert seit: 6. Jun 2006
4 Beiträge
 
#1

Array speichern

  Alt 6. Jun 2006, 18:46
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
  Mit Zitat antworten Zitat
waseo

Registriert seit: 16. Mai 2006
Ort: Isernhagen
11 Beiträge
 
Delphi 6 Professional
 
#2

Re: Array speichern

  Alt 6. Jun 2006, 19:20
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:
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;
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'))
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Array speichern

  Alt 6. Jun 2006, 19:21
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:
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;
Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
luggaz

Registriert seit: 6. Jun 2006
4 Beiträge
 
#4

Re: Array speichern

  Alt 6. Jun 2006, 19:29
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:

slDaten.Add(IntToStr(meer[i, k])); und sagt: "Es gibt keine überladene Version von 'IntToStr', die man mit diesen Argumenten aufrufen kann!"

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
  Mit Zitat antworten Zitat
droppi
(Gast)

n/a Beiträge
 
#5

Re: Array speichern

  Alt 6. Jun 2006, 19:32
du kannst keinen element vom array of char mit inttostr umwandeln denn der datentyp ist ja char.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Array speichern

  Alt 6. Jun 2006, 19:36
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:

WriteBuffer(meer, SizeOf(meer)); marabu
  Mit Zitat antworten Zitat
luggaz

Registriert seit: 6. Jun 2006
4 Beiträge
 
#7

Re: Array speichern

  Alt 6. Jun 2006, 19:56
Ok, mit dem ersten Beispiel hab ichs jetzt gebacken bekommen, aber wenn ich versuche statt einem festen Dateinamen
savedialog1.filename einzusetzen bringt er mir nen Fehler und ich will, dass der Benutzer die Datei, bzw. den Speicherort auswählen kann.

MFG
LuGGaZ
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#8

Re: Array speichern

  Alt 6. Jun 2006, 20:03
a) was für einen fehler?
b) hast du den savedialog auch vorher erstellt?
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
luggaz

Registriert seit: 6. Jun 2006
4 Beiträge
 
#9

Re: Array speichern

  Alt 6. Jun 2006, 20:48
jo, klar hab ich den SaveDialog vorher erstellt und der Name stimmt auch.

Meldung:
Zitat:
Im Projekt X_y.exe ist eine Exception der Klasse System.Exception mit der Meldung 'Ungültiges Thread-Modell (STAThreadAttribute erforderlich)' aufgetreten.
MFG
LuGGaZ
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:28 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