Mutidimensionales Array Speichern und Laden.

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Chris237
Beiträge: 11
Registriert: Mi 18. Sep 2013, 20:09

Mutidimensionales Array Speichern und Laden.

Beitrag von Chris237 »

Hallo Leute,

ich bräuchte mal eure Hilfe. Ich würde gerne ein Multidimensionales Array Speichern und Laden. Ich habe mir viel dazu durchgelesen kriege es aber iwie nicht hin.

Danke schon mal im vorraus

Gruß

Chris.

Hier die Array Deklaration. Als Quelltext.

Code: Alles auswählen

 type
    TSchueler = Record
      Name: String;
    end;
    TKurs = (Kurs1, Kurs2, Kurs3, Kurs4, Kurs5, Kurs6);
    TSchulKlasse = (Klasse1);
 
var
  Form3: TForm3;
  MeineSchueler : Array[TSchulKlasse] of Array[TKurs] of Array of TSchueler;
 
implementation
 
uses
  Unit1, Unit2, Unit6;
 
{$R *.lfm}
 
{ TForm3 }
 
procedure TForm3.Button1Click(Sender: TObject);
begin
 
  {--------------------Namen in die Arrays Speichern-------------------------}
   SetLength(MeineSchueler[Klasse1, Kurs1],30);   //setze die Länge des Arrays
   SetLength(MeineSchueler[Klasse1, Kurs2], 30);  //setze die Länge des Arrays
   SetLength(MeineSchueler[Klasse1, Kurs3], 30);  //setze die Länge des Arrays
   SetLength(MeineSchueler[Klasse1, Kurs4], 30);  //setze die Länge des Arrays
   SetLength(MeineSchueler[Klasse1, Kurs5], 30);  //setze die Länge des Arrays
   SetLength(MeineSchueler[Klasse1, Kurs6], 30);  //setze die Länge des Arrays
 
if ComboBox1.ItemIndex = 0 then
begin
     MeineSchueler[Klasse1, Kurs1, 0].Name := Edit1.Text;
     MeineSchueler[Klasse1, Kurs1, 1].Name := Edit2.Text;
     MeineSchueler[Klasse1, Kurs1, 2].Name := Edit3.Text;
     MeineSchueler[Klasse1, Kurs1, 3].Name := Edit4.Text;
     MeineSchueler[Klasse1, Kurs1, 4].Name := Edit5.Text;
     MeineSchueler[Klasse1, Kurs1, 5].Name := Edit6.Text;
     MeineSchueler[Klasse1, Kurs1, 6].Name := Edit7.Text;
     MeineSchueler[Klasse1, Kurs1, 7].Name := Edit8.Text;
     MeineSchueler[Klasse1, Kurs1, 8].Name := Edit9.Text;
     MeineSchueler[Klasse1, Kurs1, 9].Name := Edit10.Text;
     MeineSchueler[Klasse1, Kurs1, 10].Name := Edit11.Text;
     MeineSchueler[Klasse1, Kurs1, 11].Name := Edit12.Text;
     MeineSchueler[Klasse1, Kurs1, 12].Name := Edit13.Text;
     MeineSchueler[Klasse1, Kurs1, 13].Name := Edit14.Text;
     MeineSchueler[Klasse1, Kurs1, 14].Name := Edit15.Text;
     MeineSchueler[Klasse1, Kurs1, 15].Name := Edit16.Text;
     MeineSchueler[Klasse1, Kurs1, 16].Name := Edit17.Text;
     MeineSchueler[Klasse1, Kurs1, 17].Name := Edit18.Text;
     MeineSchueler[Klasse1, Kurs1, 18].Name := Edit19.Text;
     MeineSchueler[Klasse1, Kurs1, 19].Name := Edit20.Text;
     MeineSchueler[Klasse1, Kurs1, 20].Name := Edit21.Text;
     MeineSchueler[Klasse1, Kurs1, 21].Name := Edit22.Text;
     MeineSchueler[Klasse1, Kurs1, 22].Name := Edit23.Text;
     MeineSchueler[Klasse1, Kurs1, 23].Name := Edit24.Text;
     MeineSchueler[Klasse1, Kurs1, 24].Name := Edit25.Text;
     MeineSchueler[Klasse1, Kurs1, 25].Name := Edit26.Text;
     MeineSchueler[Klasse1, Kurs1, 26].Name := Edit27.Text;
     MeineSchueler[Klasse1, Kurs1, 27].Name := Edit28.Text;
     MeineSchueler[Klasse1, Kurs1, 28].Name := Edit29.Text;
     MeineSchueler[Klasse1, Kurs1, 29].Name := Edit30.Text;
end;           

Benutzeravatar
theo
Beiträge: 10874
Registriert: Mo 11. Sep 2006, 19:01

Re: Mutidimensionales Array Speichern und Laden.

Beitrag von theo »

Chris237 hat geschrieben:Ich würde gerne ein Multidimensionales Array Speichern und Laden.
Sieht mir eher nach "ich muss" aus. :wink:
Chris237 hat geschrieben: Ich habe mir viel dazu durchgelesen kriege es aber iwie nicht hin.
Was hast du denn schon gelesen und was hast du ausprobiert?

Chris237
Beiträge: 11
Registriert: Mi 18. Sep 2013, 20:09

Re: Mutidimensionales Array Speichern und Laden.

Beitrag von Chris237 »

Ich habe mir schon das speichern von dynamischen array ausprobiert aber das ging iwie nicht vür multidimensionales array

Benutzeravatar
theo
Beiträge: 10874
Registriert: Mo 11. Sep 2006, 19:01

Re: Mutidimensionales Array Speichern und Laden.

Beitrag von theo »

Chris237 hat geschrieben:Ich habe mir schon das speichern von dynamischen array ausprobiert aber das ging iwie nicht vür multidimensionales array
Kannst du mal den Code zeigen? Irgendwo muss man ja anfangen.
Hat der Lehrer Vorgaben gemacht, wie das gespeichert werden soll?

Chris237
Beiträge: 11
Registriert: Mi 18. Sep 2013, 20:09

Re: Mutidimensionales Array Speichern und Laden.

Beitrag von Chris237 »

Den Code den ich habe habe ich oben reingeschrieben und nein es gibt keine anforderungen. Das array soll nur auf Knopfdruck gespeichert werden und nach einem Neustart des Programmes wieder über knopfdruck geladen werden

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Mutidimensionales Array Speichern und Laden.

Beitrag von Mathias »

Ich habe mir schon das speichern von dynamischen array ausprobiert aber das ging iwie nicht vür multidimensionales array
Wahrscheinlich macht dir der String einen Strich durch die Rechnung.

Mit folgenden Code kannst du die String-Array schreiben und wieder lesen.

Code: Alles auswählen

type
  TSchueler = record
    Name: string;
  end;
 
var
  TestArray: array of TSchueler;
 
 
procedure TForm1.SaveClick(Sender: TObject);
var
  f: TextFile;
  i: integer;
begin
  SetLength(TestArray, 3);
  TestArray[0].Name := 'Erstes Element';
  TestArray[1].Name := 'Zweites Element';
  TestArray[2].Name := 'Drittes Element';
 
  AssignFile(f, 'Klasse1-Kurs1.txt');
  Rewrite(f);
  for i := 0 to Length(TestArray) - 1 do begin
    WriteLn(f, TestArray[i].Name);
  end;
  CloseFile(f);
end;
 
procedure TForm1.LoadClick(Sender: TObject);
var
  f: TextFile;
  i: integer;
begin
  AssignFile(f, 'Klasse1-Kurs1.txt');
  Reset(f);
  i := 0;
  while not EOF(f) do begin
    Inc(i);
    SetLength(TestArray, i);
    Readln(f, TestArray[i - 1].Name);
  end;
  CloseFile(f);
 
  for i := 0 to Length(TestArray) - 1 do begin // Test. ob geladen.
    Memo1.Lines.Add(TestArray[i].Name);
  end;
end;   
So wie ich sehe setzt du die Länge der Array immer auf 30, somit könntest auch eine statische Array nehmen.

Code: Alles auswählen

TKurs = (Kurs1, Kurs2, Kurs3, Kurs4, Kurs5, Kurs6);
Wen du machst, dann kannst mit eine for-to-Schleife arbeiten.

Code: Alles auswählen

TKurs = 1..6;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 2122
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Mutidimensionales Array Speichern und Laden.

Beitrag von Warf »

Nicht getestet müsste aber so gehen:

Code: Alles auswählen

type
  StrArr = array of array of String;
 
implementation
 
 
procedure WriteStrArrToFile(FileName: String; arr: StrArr);
var fs: TFileStream;
  x, y, TexLen: Integer;
begin
  fs:=TFileStream.Create(FileName, fmOpenWrite or fmCreate);
  try
    fs.Write(Length(arr), SizeOf(Integer));
    for x:=Low(arr) to High(arr) do
    begin
      fs.Write(Length(arr[x]), SizeOf(Integer));
      for y:=Low(arr[x]) to High(arr[x]) do
      begin
        TexLen:=Length(arr[x][y]);
        fs.Write(TexLen, SizeOf(Integer));
        fs.Write(arr[x][y][1], TexLen);
      end;
    end;
  finally
    fs.Free;
  end;
 
end;
 
 
procedure ReadStrArrFromFile(const FileName: String; var arr: StrArr);
var fs: TFileStream;
  x, y: Integer;
  buff: Integer;
 
begin
  fs:=TFileStream.Create(FileName, fmOpenRead);
  try
    fs.Read(buff, SizeOf(Integer));
    SetLength(arr, buff);
    for x:=Low(arr) to High(arr) do
    begin
      fs.Read(buff, SizeOf(Integer));
      SetLength(arr[x], buff);
      for y:=Low(arr[x]) to High(arr[x]) do
      begin
        fs.Read(buff, SizeOf(Integer));
        SetLength(arr[x][y], buff);
        fs.Read(arr[x][y][1], buff);
      end;
    end;
  finally
    fs.Free;
  end;
 
end;

Antworten