![]() |
Dynamische Arrays in Dynamisches Array vergrößern
Hallo,
ich steh grad auf dem Schlauch: Ich hab ein dynamisches Array das wie folgt aufgebaut ist:
Delphi-Quellcode:
type
TSI_Daten = packed record MD36998 : array [0..1] of String; MD36999 : array [0..1] of String; MD1399 : String; end; {...} var SI_Achs_Array : array of TSI_Daten; {...} und wird so verwendet:
Delphi-Quellcode:
Das ging bisher ganz gut - nur hat sich jetzt der Datensatz verändert. Dadurch kann
//Setzen der Array-Größe (nur wenn die Größe nicht passt)
If length(SI_Achs_Array) < i_Ax_Drv_Nr then SetLength(SI_Achs_Array, i_Ax_Drv_Nr); //abhängig vom Maschinendatum ins Array schreiben If i_Pos_MD36998 = 1 then SI_Achs_Array[Pred(i_Ax_Drv_Nr)].MD36998[i_Index] := S_Wert; If i_Pos_MD36999 = 1 then SI_Achs_Array[Pred(i_Ax_Drv_Nr)].MD36999[i_Index] := S_Wert; If i_Pos_MD1399 = 1 then SI_Achs_Array[Pred(i_Ax_Drv_Nr)].MD1399 := S_Wert; i_Index größer 1 werden. Nun wollt ich MD36998 und MD36999 auf dynamische Array umstellen und die größe der zwei Variablen via SetLength vergrößern. So hab ich es probiert:
Delphi-Quellcode:
Aber so werden die Variablen nicht erhöht.
If i_Pos_MD36998 = 1 then
If length(SI_Achs_Array[Pred(i_Ax_Drv_Nr)].MD36998) < i_Index then SetLength(SI_Achs_Array[Pred(i_Ax_Drv_Nr)].MD36998, i_Index); If i_Pos_MD36999 = 1 then If length(SI_Achs_Array[Pred(i_Ax_Drv_Nr)].MD36999) < i_Index then SetLength(SI_Achs_Array[Pred(i_Ax_Drv_Nr)].MD36999, i_Index); Nun meine Frage: Wie kann ich dynamische Arrays in einem dynamischen Array vergrößern? |
AW: Dynamische Arrays in Dynamisches Array vergrößern
Die Zeile
Delphi-Quellcode:
Hast du aber drinnengelasen?
If length(SI_Achs_Array) < i_Ax_Drv_Nr then
SetLength(SI_Achs_Array, i_Ax_Drv_Nr); [add] Ahhh, an deiner Stelle würde ich mit
Delphi-Quellcode:
oder
If High(...) < i_Index then
Delphi-Quellcode:
prüfen, da i_Index wohl direkt den 0-basierten Index darstellt (oder du hast im Zugriff das Pred vergessen) und i_Ax_Drv_Nr anscheinend ein 1-basierender Index ist.
If Length(...) <= i_Index then
Tipp: Aktiviere auch mal (bevor zu was änderst) in den Projektoptionen die Index-Prüfung. :angle2: Und ja, beim ersten Durchlauf wird das Array nicht vergrößerst, da i_Index vermutlich 0, Length auch 0 und somit
Delphi-Quellcode:
natürlich nicht zutrifft.
0 < 0
|
AW: Dynamische Arrays in Dynamisches Array vergrößern
Bisserl unübersichtlich, findest du nicht?
Ich würde es so probieren:
Delphi-Quellcode:
type
TDataArray = Array Of String; TSI_Daten = packed record MD36998 : TDataArray; MD36999 : TDataArray; MD1399 : String; end; {...} var SI_Achs_Array : array of TSI_Daten; {...} Procedure AddValueToArray (Var aArray : TDataArray; aIndex : Integer; aValue : String); Begin If aIndex >= High(aArray) Then SetLength (aArray, aIndex + 1); aArray[aIndex] := aValue; End; {...} Var iAchse : Integer; {...} iAchse := Pred (i_Ax_drv_Nr); If iAchse >= High(SI_Achs_Array) Then SetLength (SI_Achs_Array, iAchse + 1); If i_Pos_MD36998 = 1 then AddValueToArray (SI_Achs_Array[iAchse].MD36998, i_Index, S_Wert); If i_Pos_MD36999 = 1 then AddValueToArray (SI_Achs_Array[iAchse].MD36999, i_Index, S_Wert); Zitat:
|
AW: Dynamische Arrays in Dynamisches Array vergrößern
Zitat:
|
AW: Dynamische Arrays in Dynamisches Array vergrößern
Zitat:
|
AW: Dynamische Arrays in Dynamisches Array vergrößern
Zitat:
Aber brauchen tu ich es ja... Zitat:
Du hast recht, i_Ax_Drv_Nr ist 1-basierened, i_Index 0-basierend. Habs einfach übersehen. Zitat:
Zitat:
|
AW: Dynamische Arrays in Dynamisches Array vergrößern
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz