Spalte aus Array löschen

  • Meinst du so?

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $aArray[3][3] = [ _
    [11, 12, 13], _
    [21, 22, 23], _
    [31, 32, 33]]

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($aArray)
    _Array2D_DeleteRowCol($aArray, 1, "col")
    _ArrayDisplay($aArray)
    _Array2D_DeleteRowCol($aArray, 0, "row")
    _ArrayDisplay($aArray)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Array2D_DeleteRowCol(ByRef $aArray, $iIndex, $sWhat = "Row")
    Local $iUB_1, $iUB_2

    [/autoit] [autoit][/autoit] [autoit]

    $iUB_1 = UBound($aArray, 1)
    $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

    [/autoit]
  • 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>
    Global $aArray[11] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    _ArrayDisplay($aArray)
    _ArrayDeleteMore($aArray, "0-2,4-6")
    _ArrayDisplay($aArray)

    [/autoit] [autoit][/autoit] [autoit]

    Func _ArrayDeleteMore(ByRef $aArray, $sDelete)
    ;Author: SEuBo
    Local $aDel, $iUB, $iUB_D, $iIndex
    $aDel = StringRegExp($sDelete, "(\d+)-(\d+)", 3)
    $iUB = UBound($aArray)
    $iUB_D = UBound($aDel)

    [/autoit] [autoit][/autoit] [autoit]

    For $j = $iUB_D - 2 To 0 Step -2
    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

    [/autoit]
  • 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()
    Local $datei = "c:\datei.csv"
    Local $h = FileOpen($datei, 0)
    Global $atest = _CSV2Array($h, Default, True, 1)
    FileClose($h)
    EndFunc

    [/autoit]


    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.

    2 Mal editiert, zuletzt von Scritch (2. November 2010 um 14:36)

  • 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
    If StringLeft($array[$i], StringLen("suchwort") = "suchwort" Then
    _ArrayDelete($array, $i)
    EndIf
    Next

    [/autoit]
  • Ja, Array rückwärts durchgehen weil sonst der Index nichtmehr stimmt.

    [autoit]

    #include <array.au3>
    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)

    [/autoit]