Ich kann mit ArrayDelte() ein spezifiziertes Element aus einem Array löschen.
Aber kann ich auch eine ganze Spalte löschen?
Spalte aus Array löschen
-
- [ gelöst ]
-
Scritch -
8. Oktober 2010 um 13:19 -
Geschlossen -
Erledigt
-
-
Ja das geht mit ReDim aber dann sind die Daten funtsch. Ich bau dir mal etwas.
-
Meinst du so?
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]Local $aArray[3][3] = [ _
[/autoit] [autoit][/autoit] [autoit]
[11, 12, 13], _
[21, 22, 23], _
[31, 32, 33]]_ArrayDisplay($aArray)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_Array2D_DeleteRowCol($aArray, 1, "col")
_ArrayDisplay($aArray)
_Array2D_DeleteRowCol($aArray, 0, "row")
_ArrayDisplay($aArray)Func _Array2D_DeleteRowCol(ByRef $aArray, $iIndex, $sWhat = "Row")
[/autoit] [autoit][/autoit] [autoit]
Local $iUB_1, $iUB_2$iUB_1 = UBound($aArray, 1)
[/autoit]
$iUB_2 = UBound($aArray, 2)
If $sWhat = "row" Then
For $i = $iIndex To $iUB_1 - 2
For $j = 0 To $iUB_2 - 1
$aArray[$i][$j] = $aArray[$i + 1][$j]
Next
Next
ReDim $aArray[$iUB_1 - 1][$iUB_2]
Else
For $i = 0 To $iUB_1 - 1
For $j = $iIndex To $iUB_2 - 2
$aArray[$i][$j] = $aArray[$i][$j + 1]
Next
Next
ReDim $aArray[$iUB_1][$iUB_2-1]
EndIf
EndFunc ;==>_Array2D_DeleteRowCol -
Genau das, SEuBo Danke dir!
-
So, mit einem mehrspaltigem Array hats wunderbar funktioniert.
Bei einem 1 Spaltigem Array meckert er aber.
"Array variable subscript badly formatted." in Line
27 bei dem obigen Script.Wie kann ich es anstellen, dass ich z. B. Zeile 300-500
löschen kann? -
So zum Beispiel, habs aber nicht ausgiebig getestet:
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
Global $aArray[11] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
_ArrayDisplay($aArray)
_ArrayDeleteMore($aArray, "0-2,4-6")
_ArrayDisplay($aArray)Func _ArrayDeleteMore(ByRef $aArray, $sDelete)
[/autoit] [autoit][/autoit] [autoit]
;Author: SEuBo
Local $aDel, $iUB, $iUB_D, $iIndex
$aDel = StringRegExp($sDelete, "(\d+)-(\d+)", 3)
$iUB = UBound($aArray)
$iUB_D = UBound($aDel)For $j = $iUB_D - 2 To 0 Step -2
[/autoit]
For $i = $aDel[$j] To $iUB - 1
$iIndex = $i + $aDel[$j + 1] - $aDel[$j] + 1
If $iIndex > $iUB - 1 Then ExitLoop
$aArray[$i] = $aArray[$iIndex]
Next
$iUB = $iUB - ($aDel[$j + 1] - $aDel[$j]+1)
ReDim $aArray[$iUB]
Next
EndFunc ;==>_ArrayDeleteMore -
Funktioniert, danke dir
-
So, altes Problem in neuer Form.
Ich möchte ein Array "beschneiden", dass von einer Funktion zurückgegeben wird.
Und zwar:Spoiler anzeigen
[autoit]Func atest()
[/autoit]
Local $datei = "c:\datei.csv"
Local $h = FileOpen($datei, 0)
Global $atest = _CSV2Array($h, Default, True, 1)
FileClose($h)
EndFunc
liest ja die Datei in ein Array ein, also in $atest.Möchte ich dieses Array jetzt kürzen, bekomme ich die Fehlermeldung "redim used without an array variable"
Zum "Beschneiden des Array benutze ich die Funktion von Seubo.Edit: Hat sich erledigt.
-
So, wieder im etwas das gleiche Problem, daher öffne ich nicht einen neuen Thread.
Ich möchte aus einem Array Spalten löschen. Das funktioniert auch. Eine Schwierigkeitsstufe höher jetzt aber,
möchte ich Zeilen aus einem Array löschen, die mit einem bestimmten Wort anfangen.
Nehmen wir mal als Wort "Eierkucher". Wie stelle ich das am dümmsten an? -
Durchlauf das Array in einer FOR- Schleife und vergleich die ersten Zeichen der Elemente mit deinem Suchwort. In etwas so:
[autoit]For $i = 0 To UBound($array) - 1
[/autoit]
If StringLeft($array[$i], StringLen("suchwort") = "suchwort" Then
_ArrayDelete($array, $i)
EndIf
Next -
Ok, dank erstmal. Aber wird dabei nicht nur das Suchwort gelöscht?
Edit: Irgendwas stimmt da bei dir nicht...
-
Ja, Array rückwärts durchgehen weil sonst der Index nichtmehr stimmt.
[autoit]#include <array.au3>
[/autoit]
Dim $array[6]= ["bla","blub","hallo welt","welt welt","foo","bar"]
_ArrayDisplay($array)
For $i = UBound($array)-1 To 0 Step - 1
If StringLeft($array[$i], StringLen("hallo")) = "hallo" Then
_ArrayDelete($array, $i)
EndIf
Next
_ArrayDisplay($array) -
wow thx für die Funktion ich hatte nämlich das gleiche Problem ;DD