Wie ermögliche ich also ein Array in Variabler größe?
Das ist ein Standardproblem. Die Lösung heißt „dynamisches Array“. Ein d. A. wird so deklariert:
VAR IntArray: ARRAY OF INTEGER;
oder
VAR StrArray: ARRAY OF STRING;
oder allgemein
VAR a: ARRAY OF ;
Der Typ kann dabei beliebig sein. Beachte, daß die Angabe der Arraygrenzen („ARRAY[0…99] OF …“) hier fehlt. Daran erkennt der Compiler, daß Du ein d. A. willst.
Die Länge des Arrays kannst Du beliebig zur Laufzeit setzen und ändern, und zwar mit dem Befehl „SetLength“. Nach
SetLength(StrArray, 100)
steht Dir also das Array „StrArray“ mit einhundert Elementen zur Verfügung, indexiert von 0 bis 99 (Basisindex ist bei d. A. immer 0).
Möchtest Du StrArray zu irgendeinem Zeitpunkt auf 200 anwachsen lassen, genügt dazu der Befehl
SetLength(StrArray, 200)
Sonst mußt Du nichts tun! Die Werte der schon belegten unteren 100 Elemente bleibt natürlich erhalten. Aufpassen mußt Du nur, wenn die Elemente keine Elementartypen (BOOLEAN, INTEGER, STRING, Records aus Elementartypen etc.), sondern Objektinstanzen sind; dann obliegt es Deiner Verantwortung, diese Objekte nach einer Arrayvergrößeung per SetLength erst händisch zu creatieren, bevor Du Daten in ihnen abspeichern kannst.
Falls Du dynamische Arrays als Klassenfelder deklarierst, solltest Du im Destruktor der entsprechenden Klasse die Zeile „StrArray := NIL“ unterbringen, damit der mit dem d. A. verknüpfte Speicher sicher freigegeben wird.
Gruß
Martin