Autor Beitrag
holger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 46

W2K pro, XP pro
Delphi 6, Delphi 2007
BeitragVerfasst: So 12.01.03 16:27 
Ich programmiere zwar jetzt schon eine Weile in Delphi(6), habe aber von ein paar grundlegenden Sachen trotzdem noch keine Ahnung. Es währe nett wenn mir jemand weiter helfen könnte.

Ich schreibe ein Programm, mit welchem man CNC-, DXF-, HPGL- Dateien konvertieren und bearbeiten kann. Dazu lade ich die Geometriedaten in ein bzw. in mehrere Arrays.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
const punktmax= 500000;     
var   
 punkt:
 array[0..punktmax]of array [1..4] of Double;
 {X,Y,Z,Radius}
 element:      array[0..punktmax]of byte;                   
 {Gerade/Bogen uz/Bogen guz/...}
 Mark:   array[0..punktmax]of boolean;                
 {Markierung}

Die Daten in so einem starren Array zu bearbeiten ist natürlich nicht gerade praktisch. Wahrscheinlich sollte ich die Daten besser in einem Stream speichern. Aber wie muß ich das machen? Oder gibt es auch dynamische Arrays oder so was ähnliches?

Vielen Dank schon mal im Voraus
Holger
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: So 12.01.03 18:13 
Stream? Wieso Stream?
Dynamische Arrays gibt's übrigens tatsächlich. Werden so deklariert:
ausblenden Quelltext
1:
MyDynArr: array of Byte					

Also nur ohne Zahlen.
Dann wird die Länge wie folgt gesetzt:
ausblenden Quelltext
1:
SetLength(MyDynArr, 5)					

Und schon hat man ein Array mit 5 Segmenten. Geht auch mehrdimensional, mit
ausblenden Quelltext
1:
array of array of Byte					

Damit lassen sich auch prima asymmetrische Arrays erstellen.
Für mehr infos, schau mal in die Online-Hilfe oder lies dir das Delphi-Handbuch durch.
Allerdings weiß ich nicht, ob es dynamische Arrays schon vor Delphi6 gab, evtl müsste man sich also ein Update besorgen. In der 6er sind sie aber drin.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
holger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 46

W2K pro, XP pro
Delphi 6, Delphi 2007
BeitragVerfasst: Mo 13.01.03 20:25 
Vielen Dank
Das mit dem Dynamischen Array ist ja genial. Daraus ergibt sich aber gleich die nächste Frage.
Wie erfahre ich, ob der Wert den ich für
ausblenden Quelltext
1:
SetLength(var S; NewLength: Integer);					

einsetze zulässig ist? :nixweiss:
Ist der Wert zu groß, dann gibt es einen "EOutOfMemory".
Ich habe es schon mit dem folgenden Code probiert.
ausblenden Quelltext
1:
2:
3:
4:
5:
try
  SetLength(myarray,5000000);
except
  on EOutOfMemory do MacheIrgendWas ;
end;

Funktioniert aber nicht. Wogegen das "Abfangen" z.B. eines "EZeroDivide" auf diese Art und Weise schon hin haut.
Müßte ich vielleicht vorher irgend einen Compilerschalter setzen? Oder geht es ganz anders?

Holger
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Mo 13.01.03 20:36 
:shock:
So große Arrays?
Die habe ich noch nie gebraucht. Bisher hat alles in meine 256MB RAM plus die 700MB Swap gepasst, was ich ausprobiert habe.
Ich weiß nicht, ob es irgendeiner Beschränkung gibt, da müsste man mal in die Hilfe gucken, wofür ich jetzt zu faul bin und was ja jeder zuhause selber machen kann, wenn es eine Obergrenze gibt, steht sie da, wenn nicht, muss man halt irgendwie rauskriegen, wieviel Speicher zur Verfügung steht und dementsprechend seine Arraygrößen anpassen.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert