Autor Beitrag
ZO_orki
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Fr 19.01.07 20:43 
Hallo.

Eigendlich sagt der Titel schon was ich herausfinden will.
Das Problem an der ganzen Sache ist, dass ich nicht mit
Assigned arbeiten kann, weil die einzelnen Elemente
eventuelle von vornerein Werte haben.
Und weil es keine statisches Array ist, kann ich auch
nicht mal eben alle Elemente auf NIL setzten.

Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht,
jedenfalls brauche ich Hilfe.

MfG ZO_orki

PS: Im Array ist ein von mir geschriebenes Objekt gespeichert.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 19.01.07 23:13 
Du hast ein Array XY und willst dort wissen, ob Du auf das Element an Index ABC zugreifen kannst?

Dann mach's so: Accessable := Assigned(XY) and (Low(XY) <= ABC) and (High(XY) >= ABC);

Funktioniert mit jeder Art von Array.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
ZO_orki Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mo 22.01.07 00:15 
Hmmm....

Wie ist das wenn ich jetzt ein dynamisches Array habe mit einer Länge von z.B. 1-5.
Und ich jetzt den dritten Wert löschen würde. Dann würde das doch nciht funktionieren, oder?
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Mo 22.01.07 14:30 
Also, üblicherweise macht man das genau so wie es BenBE vorschlägt. Auch nach dem Löschen eines oder mehrerer Elemente solltest Du das immer wieder neu abtesten, denn weil Dein Array dynamisch ist, musst Du eben auch alle Fehlermöglichkeiten abfangen.
Man kann auch jedweden Zugriff auf das Array mit einer Sicherheitsumschachtelung (analog BenBE) so machen:

ausblenden Delphi-Quelltext
1:
2:
3:
if assigned(myarray) and (index>=low(myarray)) and (index<=high(myarray)) then
   .... Dein Code
end;


Also, nun keine Angst und drauf losprogrammieren! :-D

_________________
Es gibt keine Probleme - nur Lösungen!
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Mo 22.01.07 14:35 
Übrigens:

Zitat:
Wie ist das wenn ich jetzt ein dynamisches Array habe mit einer Länge von z.B. 1-5.
Und ich jetzt den dritten Wert löschen würde. Dann würde das doch nciht funktionieren, oder?


Generell haben dynamische Arrays, da sie ja nur über SetLength(Array,Anzahl) zugewiesen werden, den Startindex 0. Die Indexzählung nach einem z.B. Setlength(myarray,5) wäre dann 0,1,...4.
Low(Dein Array) ergibt dabei grundsätzlich 0 und High(Dein Array) ergibt dann 4.
Nach dem Löschen des 3. Elementes geht der Bereich dann eben nur noch von 0 bis 3.

Grundsätzlich kann man aber sowohl bei dynamischen Arrays wie auch bei statischen mit Low() und High() abprüfen. Das macht den Code immer flexibler, falls Du mal was änderst.

_________________
Es gibt keine Probleme - nur Lösungen!