Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dynam. Array Speichern,bzw. Laden (https://www.delphipraxis.net/64985-dynam-array-speichern-bzw-laden.html)

Hallo_Thomas 10. Mär 2006 17:49


Dynam. Array Speichern,bzw. Laden
 
Hallo,
hatte mich schon ein bisschen belesen, was das Laden bzw,Speichern von Dynamischen Arrays angeht.
Nur Irgendwie will der Code nich klappen, abgespeichert wird irgendwas(keine Ahnnung was).

Und beim Laden ist hinterher nix in der Array;

Fehlermeldungen:nicht bekannt;

:gruebel: :gruebel:
Die Dynamische Array;

Delphi-Quellcode:
public
     MyListe                            :Array of Byte;
So wollte ichs speichern
Delphi-Quellcode:
procedure TForm1.Speichern1Click(Sender: TObject);
var FS : TFileStream;
  i:Integer;
begin
  with SaveDialog1 do
  begin
    Filter := 'Textdateien (*.TXT)|*.TXT';
    FileName := 'Firmenbrief.txt';
    DefaultExt := 'TXT';
    Options := [ofOverwritePrompt];    // Sicherheitsabfrage beim Überschreiben
    if Execute then
    begin
      FS := TFileStream.Create(filename ,fmCreate);
      try
         for i := Low(MyListe) to High(MyListe) do
          fs.write(Myliste[i], Length(Myliste) * SizeOf(Integer));
        finally
       FS.free
        //for i := 0 to length(MyListe)-1 do
        //FS.Write (MyListe[i], length(MyListe) * sizeof(MyListe[i]));
        //finally
        //FS.free ;
      end ;
    end;
  end;
end ;
Und so wollte ich die daten wieder Laden
Delphi-Quellcode:
procedure TForm1.ffnen1Click(Sender: TObject);
var
  itag,y,Spalte,Grenze             : Integer;
  FS                               : TFileStream;
begin
  with OpenDialog1 do
  begin
    Filter := 'Textdateien (*.TXT)|*.TXT';
    DefaultExt := 'TXT';
    if Execute then
    begin
      FS := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
      try
        FS.Read (MyListe[0], length(MyListe) * sizeof(Byte)) ;
      finally
      FS.free ;
      end ;
    end ;
 end;

Angel4585 10. Mär 2006 17:52

Re: Dynam. Array Speichern,bzw. Laden
 
Überdenke diese Zeile:
Delphi-Quellcode:
fs.write(Myliste[i], Length(Myliste) * SizeOf(Integer));
SizeOf(Byte) sollte reichen

Edit: Beim laden hast den gleichen Fehler

Hallo_Thomas 10. Mär 2006 18:09

Re: Dynam. Array Speichern,bzw. Laden
 
Zitat:

fs.write(Myliste[i], Length(Myliste) * SizeOf(Integer));
:lol: Jo war ein komischer Versuch :oops:

Aber trotzdem, wills irgendwie nich laufen?

Khabarakh 10. Mär 2006 18:10

Re: Dynam. Array Speichern,bzw. Laden
 
Überdenke auch mal dies:
Delphi-Quellcode:
FS.Read (MyListe[0]
Oder wolltest du zum Testen nur das erste Item laden? Dann sollte es eigentlich korrekt sein, poste im Zweifelsfalle nochmal den korrigierten Code.

Hallo_Thomas 10. Mär 2006 18:27

Re: Dynam. Array Speichern,bzw. Laden
 
@ Khabarakh


Ich hab da nichts gefunden wie ichs schreiben könnte, da ich ja beim Laden nicht weis wie gross die Array ist? Es wird ja nicht mal das erste Item zugeordnet

SirThornberry 10. Mär 2006 18:40

Re: Dynam. Array Speichern,bzw. Laden
 
du müsstest dir möglichst noch im Stream die Länge des Arrays speichern, zumindest wenn du mal vor hast die mehr also nur ein Array of Byte zu verwenden.
Wenn es bei dem Array of Byte bleiben soll dann so:
Delphi-Quellcode:
//schreiben
Stream.Write(YourArray[0], Length(YourArray) * SizeOf(Byte));
//lesen
SetLength(YourArray, Stream.Size);
Stream.Read(YourArray[0], Length(YourArray) * SizeOf(Byte));

Grishnak 10. Mär 2006 18:41

Re: Dynam. Array Speichern,bzw. Laden
 
Du musst auf jeden Fall schon vor dem eigentlichen Laden per "FS.Read" wissen, wie groß das Array ist, da du es mittels "SetLength" einrichten musst!

Speichern:

Delphi-Quellcode:
len:=Length(MyListe);
FS.WriteBuffer(len, SizeOf(len));
for i:=0 to len-1 do
  FS.WriteBuffer(MyListe[i], SizeOf(Byte));
Laden:

Delphi-Quellcode:
FS.ReadBuffer(len, SizeOf(len));
SetLength(MyListe, len);
for i:=0 to len-1 do
  FS.ReadBuffer(MyListe[i], SizeOf(Byte));
!!!ungetestet!!!

Angel4585 10. Mär 2006 18:56

Re: Dynam. Array Speichern,bzw. Laden
 
Oder probier das mal, ebenfalls ungetestet:
Delphi-Quellcode:
SetLength(MyListe,0);
while not eof(fs) do
 begin
 SetLength(MyListe,Length(MyListe)+1);
 fs.read(MyListe[Pred(Length(MyListe))],SizeOf(Byte));
 end;

Hallo_Thomas 10. Mär 2006 19:30

Re: Dynam. Array Speichern,bzw. Laden
 
@ SirThornberry
Leider scheitere ich hier schon beim speicher.

Fehlermeldung:Zugriffsverletzung.........


Stream.Write(MyListe[0], Length(MyListe) * SizeOf(Byte));

Hallo_Thomas 10. Mär 2006 19:40

Re: Dynam. Array Speichern,bzw. Laden
 
Liste der Anhänge anzeigen (Anzahl: 1)
So bevor ich weitermache, stelle ich hier mal einen Beispielcode herein

In der Unit1 zum Schluss sind die beiden Proceduren, die mir Kopfschmerzen machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz