AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array als Datei speichern

Ein Thema von hummer · begonnen am 12. Jan 2004 · letzter Beitrag vom 9. Okt 2004
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von hummer
hummer

Registriert seit: 27. Mai 2003
Ort: Hattingen
437 Beiträge
 
Delphi 7 Enterprise
 
#1

Array als Datei speichern

  Alt 12. Jan 2004, 13:20
Hallo.
Ich möchte mit einem Programm ein Array als Datei abspeichern und auch wieder öffnen und auslesen. Wie kann ich das realisieren?
Manuel
unser Infolehrer -> Wissen ist Macht. Wir wissen nichts. Macht nichts.
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Array als Datei speichern

  Alt 12. Jan 2004, 13:33
Hi.

Das kommt auf das array an. Statisches oder dynamisches / ein oder mehrdimensional?

Ich würde auf jeden fall streams verwenden. Wenn dann noch statisch ist, dann kannste es in einem rutsch in die datei streamen:

zb.
Delphi-Quellcode:
var fs:TFileStream;
    arr:array[0..99] od integer;
...
fs:=TFileStream.create('c:\array.dat',fmCreate);
try
  fs.write(arr,sizeOf(arr));
finally
 fs.free;
end;
cu
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von hummer
hummer

Registriert seit: 27. Mai 2003
Ort: Hattingen
437 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Array als Datei speichern

  Alt 12. Jan 2004, 13:38
Danke schonmal.
Das Array ist eindimensional und statisch.

Und wie lese ich das Array jetzt wieder aus?
Manuel
unser Infolehrer -> Wissen ist Macht. Wir wissen nichts. Macht nichts.
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#4

Re: Array als Datei speichern

  Alt 12. Jan 2004, 13:45
Das geht relativ einfach über eine TStringList und FOR-Schleifen:

Delphi-Quellcode:
var map: array [1..256] of byte;
...
procedure Thaupt.Save(Sender: TObject);
var StrList: TStrings;
    i: integer;
begin
  if SaveDialog1.Execute then begin
    StrList := NIL;
    try
      StrList := TStringList.Create;
      for i:=1 to 256 do begin
        StrList.Add(IntToStr(map[i]));
      end;
      StrList.SaveToFile(SaveDialog1.FileName);
    finally
      StrList.Free;
    end;
  end;
end;

procedure Thaupt.Open(Sender: TObject);
var StrList: TStrings;
    i: integer;
begin
  if OpenDialog1.Execute then begin
    StrList := NIL;
    try
      StrList := TStringList.Create;
      StrList.LoadFromFile(OpenDialog1.FileName);
      for i:=1 to 256 do begin
        map[i] := StrToInt(StrList[i]);
      end;
    finally
      StrList.Free;
    end;
  end;
Sollte auch einfach auf andere Typen anwendbar sein.
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Array als Datei speichern

  Alt 12. Jan 2004, 23:37
@H4ndy: Wers möglichst dirty und nicht binär haben will, der soll es so machen, wie du vorschlägst


Zitat von hummer:
Danke schonmal.
Das Array ist eindimensional und statisch.

Und wie lese ich das Array jetzt wieder aus?
ungefähr so:

Delphi-Quellcode:
var fs:TFileStream;
    arr:array[0..99] od integer;
...

if fileExists('c:\array.dat') then
begin
  fs:=TFileStream.create('c:\array.dat',fmOpenRead);
  try
    if fs.size >= sizeOf(arr)
    then fs.read(arr,sizeOf(arr));
  finally
    fs.free;
  end;
end else showMessage('foobar not da');
cu.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#6

Re: Array als Datei speichern

  Alt 13. Jan 2004, 21:14
Zitat von maximov:
@H4ndy: Wers möglichst dirty und nicht binär haben will, der soll es so machen, wie du vorschlägst
Was dagegen
Quick'n'Dirty ist mein zweiter Vorname

@maximov:
Klappt das mit dem FileStream auch für 2-dimensionale Arrays?
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#7

Re: Array als Datei speichern

  Alt 14. Jan 2004, 11:11
Zitat von H4ndy:
...
@maximov:
Klappt das mit dem FileStream auch für 2-dimensionale Arrays?
Wenn es statisch ist, ja! Denn dann liegt es in einem stück im speicher.

cu.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von hummer
hummer

Registriert seit: 27. Mai 2003
Ort: Hattingen
437 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Array als Datei speichern

  Alt 21. Jan 2004, 21:30
Kann ich denn auch dynamische Array mit FileStream abspeichern?
Manuel
unser Infolehrer -> Wissen ist Macht. Wir wissen nichts. Macht nichts.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Array als Datei speichern

  Alt 21. Jan 2004, 21:35
Zitat von maximov:
Wenn es statisch ist, ja! Denn dann liegt es in einem stück im speicher.
Gilt auch für dynamische. Und aus diesem Grund sollte man sie auch nicht immer nur um ein einzelnes Element vergrößern. Dabei reserviert der Speichermanager von Delphi nämlich jedes mal neuen Speicher für das vergrößerte Array und kopiert das alte, kürzere in den neuen Speicherbereich. Der alte wird dabei aber nicht an Windows zurückgegeben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#10

Re: Array als Datei speichern

  Alt 21. Jan 2004, 23:11
Da hast du natürlich recht

Ich fake gern dynamische arrays mit statischer deklaration als pointer und um die reservierung kümmere ich mich dann selbst (zb. für DirectX programmierung sehr praktisch)...man muss sich nur die länge der gültigen daten merken.

@Hummer: sollte auch kein prob sein. evtl. musst du einfach auf das erste element referenzieren und dann length()-bytes lesen:

if length(arr)>0 then fs.write(@arr[0]^,length(arr)*sizeOf(Element)); oder so.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:02 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