AGB  ·  Datenschutz  ·  Impressum  







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

Dynamisches Array speichern und einlesen

Offene Frage von "mytar"
Ein Thema von Jelly · begonnen am 22. Dez 2004 · letzter Beitrag vom 4. Jan 2005
Antwort Antwort
Seite 2 von 2     12   
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#11

Re: Dynamisches Array speichern und einlesen

  Alt 3. Jan 2005, 12:00
Ist hier die Länge 255 als zweiter Write-Parameter verpflichtend?

(Hab ich mal gehört)!

Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Dynamisches Array speichern und einlesen

  Alt 3. Jan 2005, 12:23
Moin Francis,

nein, die Länge kannst Du nach Bedarf angeben.
Ein ShortString hat eine maximle Länge von 255 Zeichen und enthält an der Stelle [0] ein Längenbyte.

Jetzt aber bitte Back To Topic.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Dynamisches Array speichern und einlesen

  Alt 3. Jan 2005, 13:01
Zitat von mytar:
Dass muss aber irgendwie so funktionieren,
dass man dass ganze mit einem Befehl in den Stream schreibt!

Denn bei Strings funktioniert das ja auch,
und da ist auf Position 0 ja auch ein Zeiger.

Strings sind ja auch eindimensioanle Arrays. Bei denen funktioniert das mit meiner Methode ja auch wunderbar. Warum das bei mehrdimensionalen nicht geht, hab ich weiter oben geschrieben.

Einen Vorschlag hätt ich allerdings: Benutz statische Arrays, schalte die Bereichsüberprüfung ab und verwalte den Speicher selbst. Dann kannst du ganz leicht streamen, da statische Arrays einen zusammenhängenden Speicherblock einnehmen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
MaWi3.2

Registriert seit: 28. Dez 2004
Ort: Ilmenau
18 Beiträge
 
#14

Re: Dynamisches Array speichern und einlesen

  Alt 3. Jan 2005, 16:10
Wie jetzt?
Ich brauche aber dyn. Arrays.
Das heißt ich müßte die Werte des Arrays einzeln in ne Datei schreiben und wieder auslesen?
Das ist aber umständliche.
Geht das wenn ich es ohne Streams sondern mit Asign und writeln mache?

MaWi3.2
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Dynamisches Array speichern und einlesen

  Alt 3. Jan 2005, 16:19
OK, dann halt mit Codebeispielen:

So deklarierst du dein Array:
a: Array[0..0] of Array[0..0] of Integer; Mittels Delphi-Referenz durchsuchenGetMem reservierst du für dieses Array dann Speicher. Wenn du es vergrößern willst, reservierst du neuen Speicher in der entsprechenden Größe, verschiebst alle Daten in diesen Speicherbereich und gibts den alten via Delphi-Referenz durchsuchenFreeMem frei. Letztendlich hast du so die Speicherverwaltung eines dynamischen Arrays nachgebaut.

Aber: Wenn du ohnehin weißt, dass du ein Array eines Array hast (das ist nicht ganz ein zweidimensionales Array), dann kannst du dir den ganzen Stress sparen, indem du einfach mit einer for-Schleife jedes einzelne Unter-Array speicherst.
Ich will mal gnädig sein

Delphi-Quellcode:
var
  a: Array of Array of Integer;
  fs: TFileStream;
  i: Integer;

//...
  for i := Low(a) to High(a) do
    fs.write(a[i][0], Length(a[i]) * SizeOf(Integer));
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
MaWi3.2

Registriert seit: 28. Dez 2004
Ort: Ilmenau
18 Beiträge
 
#16

Re: Dynamisches Array speichern und einlesen

  Alt 3. Jan 2005, 17:15
Supi. Dank Dir jetzt hab auch ich es verstanden und es funktioniert auch.
Danke für Deine Mühe und Geduld.
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

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

Re: Dynamisches Array speichern und einlesen

  Alt 4. Jan 2005, 11:46
Zitat von Chewie:
OK, dann halt mit Codebeispielen:

So deklarierst du dein Array:
a: Array[0..0] of Array[0..0] of Integer; Mittels Delphi-Referenz durchsuchenGetMem reservierst du für dieses Array dann Speicher. Wenn du es vergrößern willst, reservierst du neuen Speicher in der entsprechenden Größe, verschiebst alle Daten in diesen Speicherbereich und gibts den alten via Delphi-Referenz durchsuchenFreeMem frei. Letztendlich hast du so die Speicherverwaltung eines dynamischen Arrays nachgebaut.
...
Das muss ich nochmal richtig stellen, da dieser trick sehr praktisch ist, aber leider so nicht funktionieren kann. Denn zur adressierung der daten, in mehr als einer dimension, wird auch die max-anzahl benötig, die hier leider immer statisch 1 ist - und somit kann die erste dimension nicht erweitert werden:

addr := y * maxAnzahlX + x wäre zB. eine zweidimensionale addresierung, die hier leider versagt, da der kompiler ja nicht wissen kann, das man hier ein dynamisches array faken will.

Aber mit einer dimension funktioniert dieser trick prima und kann in speziellen fällen sinnvoll sein!
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Dynamisches Array speichern und einlesen

  Alt 4. Jan 2005, 11:59
Hm, maximov ich fürchte du hast Recht
Das hab ich nicht bedacht. Man müsste noch eine Möglichkeit finden, dem Programm zur Laufzeut die Größe einer Dimension mitzuteilen. Aber das wäre zuviel des Gefrickels
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:37 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