Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit dem Laden/ Speichern von Arrays (https://www.delphipraxis.net/18655-probleme-mit-dem-laden-speichern-von-arrays.html)

TheBluescreen 22. Mär 2004 20:16


Probleme mit dem Laden/ Speichern von Arrays
 
Hi!

Ich bins nochmal... Ich habe ein Problem beim Speichern und Auslesen von 2 dynamischen Arrays(beide sollen in eine Datei gespeichert werden). Beim Laden einer Datei kommt die Fehlermeldung "Project Project1.exe raised exception class EStringListError with message 'List index out of bounds(9)'. Process stopped....." . Was mache ich falsch? Ich hoffe mir kann geholfen werden...

Schonmal vielen Dank im Vorraus!

Bluescreen

Hier der Quellcode:

Delphi-Quellcode:
type
  TWord1 = array of string;            
  TWord2 = array of string;
//-------------

var
  Vocab1: TWord1;
  Vocab2: TWord2;
  i: integer;                                              //Gibt die Länge der dynamischen Arrays an
//-------------

procedure TForm1.B_SaveClick(Sender: TObject);      //Speichern
var StrList: TStrings;
    y: integer;
begin
  if SaveDialog1.Execute then begin
    StrList := NIL;
    try
      StrList := TStringList.Create;
      StrList.Add(inttostr(i));                            //Es wird die Länge der Arrays gespeichert
      for y:=1 to i-1 do begin
        StrList.Add(vocab1[y]);                            //Array1 wird gespeichert
      end;
      for y:=1 to i-1 do begin
        StrList.Add(vocab2[y]);                            //Array2 wird gespeichert
      end;
      StrList.SaveToFile(SaveDialog1.FileName);
    finally
      StrList.Free;
    end;
  end;
end;

procedure TForm1.B_loadClick(Sender: TObject);              //Laden
var StrList: TStrings;
    y: integer;
begin
  if OpenDialog1.Execute then begin
    StrList := NIL;
    try
      StrList := TStringList.Create;
      StrList.LoadFromFile(OpenDialog1.FileName);
      i:=StrToInt(StrList[1]);     //Länge der dyn. Arrays ablesen
      SetLength(Vocab1,i);         //Setzen der Länge
      SetLength(Vocab2,i);
      for y:=1 to i do begin
        vocab1[y] := StrList[y];     //hier weiss ich nich so genau wie ich das lösen soll *g
      end;
      for y:=i+1 to 2*i do begin
        vocab2[y+i] := StrList[2*i-1];
      end;
    finally
      StrList.Free;
    end;
  end;

end;
Das Ergebnis in der Textdatei wäre z.B.
Code:
5                  //Länge der Arrays
12
123
1234
12345
12
123
1234
12345

Dani 22. Mär 2004 20:32

Re: Probleme mit dem Laden/ Speichern von Arrays
 
Hi,

tritt der Fehler in dieser Zeile auf?
Delphi-Quellcode:
vocab2[y+i] := StrList[2*i-1];
Warum nimmst du denn einmal TStringlist und woanders Array of String? Wärs nicht einfacher nur mit TStringlist zu arbeiten? :gruebel:

Gruß,
Dani

Sanchez 24. Mär 2004 20:45

Re: Probleme mit dem Laden/ Speichern von Arrays
 
Hi,
Mal zu deiner LadeRoutine:
Zitat:

Zitat von TheBluescreen
Delphi-Quellcode:
      i:=StrToInt(StrList[1]);     //Länge der dyn. Arrays ablesen

Mit StrList.Count bekommst du die Anzahl der Listenelemente.
Du Elementanzahl würd ich gar nicht mitspeichern.

Zitat:

Zitat von TheBluescreen
Delphi-Quellcode:
      for y:=1 to i do begin
        vocab1[y] := StrList[y];     //hier weiss ich nich so genau wie ich das lösen soll *g
      end;

Dynamische Arrays und Stringlisten fangen immer bei Null an.
Die Schleife müsste also richtig von 0 bis i - 1 gehen.

Delphi-Quellcode:
      for y:=0 to i - 1 do begin
        vocab1[y] := StrList[y + 1];     end;

Wobei du die Elementanzahl nicht in eine Variable namens i schreiben solltest. i ist immer eine Schleifenvariable.

Zitat:

Zitat von TheBluescreen
Delphi-Quellcode:
      for y:=i+1 to 2*i do begin
        vocab2[y+i] := StrList[2*i-1];
      end;

Hier soltle die Schleife wieder von 0 bis i - 1 laufen. Hier greifst du übrigens immer auf das selbe Element der Stringliste zu.
Delphi-Quellcode:
      for y := 0 to i - 1 do begin
        vocab2[y] := StrList[i + y];
      end;
grüße, daniel

TheBluescreen 25. Mär 2004 17:30

Re: Probleme mit dem Laden/ Speichern von Arrays
 
oha... tut mir leid.. aber das problem ist schon in einem anderen Thread gelöst worden (http://www.delphipraxis.net/internal...ct.php?t=21397). Durch einen Fehler vom Internetexplorer scheint der Beitrag irgendwie doch gesendet worden sein...

Trotzdem vielen dank an Dani und Sanchez für's Kopfzerbrechen....


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