Aber jetzt gehts wenigstens und es ist so jetzt sicher auch schneller, die arraygröße vorher zu errechnen und dann gleich festzulegen anstatt sie ständig zu ändern.
vielen dank für deine unterstützung!
Rasta schrieb am 04.11.2005 16:46:52:
hi markus,
sorry -- ärgerlich sowas- vor allem wen man zeit darin investiert hat
viele grüße
rasta
Markus schrieb am 04.11.2005 16:16:06:
Das kann ja wohl nicht wahr sein oder? Argl... Wo ist nur mein Matlab *heul* dann lass ich einmal die schleife vorher laufen um die Größe direkt festzulegen. ist wohl eh besser...
Aber vielen Dank! da wär ich im leben nicht drauf gekommen...
Rasta schrieb am 04.11.2005 15:35:06:
Hi Markus,
na so schlimm wars doch nicht oder? :-)
jetzt weiß ich auf was du hinaus willst und ich muss dich enttäuschen - das funktioniert so nicht, da bei "redim preserve" nur die letzte dimension geändert werden kann.
http://spotlight.de/zforen/mvb/m/mvb-1129111668-18930.html
schau mal unter foldendem link- evtl. hilft dir das weiter:
http://www.herber.de/forum/archiv/376to380/t378136.htm#378136
viele grüße
rasta
Markus schrieb am 04.11.2005 15:05:52:
*seufz*
*lufthol*
aaaaalso... :)
ich möchte mit folgender funktion in der lage sein, beliebige subsets von array zu bekommen. ARRIn ist das 2D array, das man reintut. die SubXXXStart/End zeigen das "von ... bis" an und RowStep und ColStep geben an, ob in 1er Schritten oder mehr gegangen werden soll
Function SubArray2D(ARRIn, SubRowStart As Integer, SubRowEnd As Integer, SubColumnStart As Integer, SubColumnEnd As Integer, Optional RowStep As Integer, Optional ColStep As Integer)
'default parameter
If IsMissing(RowStep) Then RowStep = 1
If IsMissing(ColStep) Then ColStep = 1
' This Function returns a subset of ARRIn, specified by the other parameters
Dim ARRTemp()
Dim VARNewRowIdx, VARNewColIdx As Integer
VARNewRowIdx = 0
VARNewColIdx = 0
'läuft über ARRIn und schreibt die werte in einen neuen array ARRTemp der richtigen größe
For IdxRow = 0 To SubRowEnd - SubRowStart Step RowStep
VARNewRowIdx = VARNewRowIdx + 1
For IdxCol = 0 To SubColumnEnd - SubColumnStart Step ColStep
VARNewColIdx = VARNewColIdx + 1
ReDim Preserve ARRTemp(VARNewRowIdx, VARNewColIdx)
ARRTemp(VARNewRowIdx, VARNewColIdx) = ARRIn(SubRowStart + IdxRow, SubColumnStart + IdxCol)
Next IdxCol
VARNewColIdx = 0
Next IdxRow
SubArray2D = ARRTemp
End Function
Aber er stürzt bei der Zeile
ReDim Preserve ARRTemp(VARNewRowIdx, VARNewColIdx)
immer mit subscript out of range ab, aber das kannst du ja selbst sehen...
Um die Funktion zu testen nutze ich folgende routine:
Sub JustSomeTest()
Dim MyRow, MyColumn As Integer
MyRow = 6
MyColumn = 8
Dim MyArray()
ReDim MyArray(MyRow, MyColumn)
'füllt den array mit irgendwelchen zahlen
For i = 1 To MyRow
For j = 1 To MyColumn
MyArray(i, j) = i * 10 & ":" & j * 10
Next j
Next i
'funktionsaufruf
ARRNew = SubArray2D(MyArray, 1, 6, 1, 6, 1, 1)
'zeigt arraygröße an
MsgBox UBound(ARRNew, 1) & ", " & UBound(ARRNew, 2)
'zeigt den inhalt einer arrayzeile an
VARTempString = ""
For i = 1 To UBound(ARRNew, 2)
VARTempString = VARTempString & ARRNew(1, 1) & " "
Next i
MsgBox VARTempString
End Sub
Wahrscheinlich läßt du das mal bei dir laufen und dann siehste ja was nicht geht...
das ganze brauch ich dann später zusammen mit einer funktion, die mir alle einzigartigen elemente eines arrays in einen neuen array schreibt. |