Einzelnen Beitrag anzeigen

marabu

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

Re: Mehrdimensionales dynamisches Array aus Datei auslesen

  Alt 10. Feb 2007, 08:27
Guten Morgen,

wenn du Daten aus einer Struktur persistent machst, dann musst du in der Regel auch die Meta-Information persistent machen. In deinem Fall muss also aus den gespeicherten Daten hervorgehen, an welcher Stelle deines mehrdimensionalen Arrays sie wieder eingebaut werden sollen. Darüberhinaus musst du die Länge der einzelnen Strings kenntlich machen - durch Voranstellen einer Längeninformation oder durch Begrenzungszeichen.

Hast du dich schon entschieden, ob du ein binäres oder textuelles Speicherformat verwenden möchtest? Ich würde beim Textformat ein strukturiertes Format (XML) wählen, aber du kannst ein multidimensionales Array auch linear speichern:

Delphi-Quellcode:
type
  i, j, k, index: Integer;
begin
  // ...
    temp := IntToStr(Length(Liste)) + sLineBreak;
    f.Write(temp[1], Length(temp));
    for i := 0 to Pred(Length(Liste)) do
    begin
      temp := IntToStr(Length(Liste[i])) + sLineBreak;
      f.Write(temp[1], Length(temp));
      for j := 0 to Pred(Length(Liste[i])) do
      begin
        temp := IntToStr(Length(Liste[i, j])) + sLineBreak;
        f.Write(temp[1], Length(temp));
        for k := 0 to Pred(Length(Liste[i, j])) do
        begin
          temp := IntToStr(Liste[i, j, k].Count) + sLineBreak;
          f.Write(temp[1], Length(temp));
          for index := 0 to Pred(Liste[i, j, k].Count) do
          begin
            temp := Liste[i, j, k][index] + sLineBreak;
            f.Write(temp[1], Length(temp));
          end;
end;
Wenn du dir die erzeugte Ausgabedatei in einem Editor anschaust und ich nicht zuviele Tippfehler eingebaut habe, dann erkennst du, dass die Dimensionsangaben und die Items deiner StringListen zeilenweise so abgelegt sind, dass du beim Wiedereinlesen zuerst die Information erhältst, die du zum Dimensionieren des Arrays benötigst.

Grüße vom marabu
  Mit Zitat antworten Zitat