Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 3 Dimensionale Array of Word Speichern Und Laden? (https://www.delphipraxis.net/68454-3-dimensionale-array-word-speichern-und-laden.html)

Hallo_Thomas 29. Apr 2006 20:39


3 Dimensionale Array of Word Speichern Und Laden?
 
Wie kann ich diese Array Speichern bzw Laden?
Mein Gedanke,ich weis recht unelegant, in 27 2Dimensionale Tabellen Speichern


Delphi-Quellcode:
type
  TIntArray3=Array of Array of Array of Word;
public
 Check     : TIntArray3;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  SetLength(Check,27,12,65535);
end;

SirThornberry 29. Apr 2006 20:41

Re: 3 Dimensionale Array of Word Speichern Und Laden?
 
ich würde an den Anfang der Datei die Dimensionen schreiben und dahinter dann die ganzen Daten am Stück (per TStream).

Hallo_Thomas 29. Apr 2006 21:18

Re: 3 Dimensionale Array of Word Speichern Und Laden?
 
Irgenwie habsch noch nie wirklich nenn Plan, und dass ist doch bestimmt verkehrt


Delphi-Quellcode:
procedure TForm1.Speichern2Click(Sender: TObject);
begin
  with SaveDialog1 do
  begin
    Filter := 'Textdateien (*.TXT)|*.TXT';
    FileName := 'Firmenbrief.txt';
    DefaultExt := 'TXT';
    Options := [ofOverwritePrompt];    // Sicherheitsabfrage beim Überschreiben
    if Execute then
    begin
      ArraySave3(Check,Filename);
    end;
  end;
end;


procedure TForm1.ArraySave3(bda: TIntArray3; fn: TFileName);
begin
  with TFileStream.Create(fn, fmCreate) do
  begin
    WriteBuffer(bda[0], Length(bda));
    Free;
  end;
end;

Hawkeye219 29. Apr 2006 21:28

Re: 3 Dimensionale Array of Word Speichern Und Laden?
 
Zitat:

Zitat von SirThornberry
ich würde an den Anfang der Datei die Dimensionen schreiben und dahinter dann die ganzen Daten am Stück (per TStream).

Es ist sicherlich sinnvoll, einen Header mit den Dimensionen an den Anfang der Datei zu schreiben. Man sollte aber auf keinen Fall den kompletten Inhalt des Arrays als einen Datenblock speichern, weil nicht alle Daten sequentiell im Speicher abgelegt sein müssen. Also bleibt nur die folgende Möglichkeit:

Delphi-Quellcode:
Size := Length(Check[0, 0]) * SizeOf(Word);
for i := 0 to High(Check) do
  for j := 0 to High(Check[i]) do
    Stream.Write (Check[i, j, 0], Size);
Eventuelle Sonderfälle (Array nicht oder nicht vollständig initialisiert) sollte man natürlich noch abfangen. Der Code gilt auch nur dann, wenn alle Vektoren innerhalb einer Dimension exakt gleich lang sind. Anderfalls wird es komplizierter...

Gruß Hawkeye

Hallo_Thomas 29. Apr 2006 22:01

Re: 3 Dimensionale Array of Word Speichern Und Laden?
 
Bei mir gabs ne Fehlermeldung. Zugriffsverletzung im Modul...........


Delphi-Quellcode:
procedure TForm1.Speichern2Click(Sender: TObject);
var Stream:TStream;
  i,j,size:Integer;
begin
  with SaveDialog1 do
  begin
    Filter := 'Textdateien (*.TXT)|*.TXT';
    FileName := 'Firmenbrief.txt';
    DefaultExt := 'TXT';
    Options := [ofOverwritePrompt];    // Sicherheitsabfrage beim Überschreiben
    if Execute then
    begin
      Size :=Length(Check[0, 0]) * SizeOf(Word);
      for i := 0 to High(Check) do
        for j := 0 to High(Check[0]) do
          Stream.Write (Check[i, j, 0], Size);
    end;
  end;
end;

Hawkeye219 29. Apr 2006 22:10

Re: 3 Dimensionale Array of Word Speichern Und Laden?
 
Du solltest das Stream-Objekt natürlich auch erzeugen. :wink:

Delphi-Quellcode:
procedure TForm1.Speichern2Click(Sender: TObject);
var Stream:TStream;
  i,j,size:Integer;
begin
  with SaveDialog1 do
  begin
    Filter := 'Textdateien (*.TXT)|*.TXT';
    FileName := 'Firmenbrief.txt';
    DefaultExt := 'TXT';
    Options := [ofOverwritePrompt];    // Sicherheitsabfrage beim Überschreiben
    if Execute then
    begin
      Stream := TFileStream.Create(Filename, fmCreate); // <<-- Stream erzeugen
      try
        Size :=Length(Check[0, 0]) * SizeOf(Word);
        for i := 0 to High(Check) do
          for j := 0 to High(Check[0]) do
            Stream.Write (Check[i, j, 0], Size);
      finally
        Stream.Free; // <<-- Stream freigeben
      end;
    end;
  end;
end;
BTW: glaubst du, daß ".txt" eine gute Erweiterung für eine binäre Datei ist?

Gruß Hawkeye

Hallo_Thomas 29. Apr 2006 23:12

Re: 3 Dimensionale Array of Word Speichern Und Laden?
 
Danke,das hat mich wirklich geholfen,Danke!


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