Suchen im 2D Array

  • Hallo,

    ich versuche gerade einen bestimmten String "Hanswurst" in einem 2 dimensionallen Array zu suchen.
    Dabei bestimme ich die Maximalwerte der x sowie y Dimensionen.
    Das funktioniert auch noch super aber leider gibt er als Fundposition x = False und für y nichts aus.
    Hab ich vielleicht was in der And Verschachtelung falsch gemacht? Oder sind $Spaltenlaenge und $Zeilengroesse vielleicht Strings?

    [autoit]


    MsgBox(1,"Größe des Arrays","Array Größe beträgt: "& UBound($Excelinhalt, 1))
    MsgBox(1,"Größe des Arrays","Array Größe beträgt: "& UBound($Excelinhalt, 2))

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

    $Spaltenlaenge = UBound($Excelinhalt, 1) - 1
    $Zeilengroesse = UBound($Excelinhalt, 2) - 1

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

    For $y = 0 To $Zeilengroesse Step 1
    For $x = 0 To $Spaltenlaenge Step 1
    If $Excelinhalt[$x][$y] = "Hanswurst" Then $namenspositionx = $x And $namenspositiony = $y
    Next
    Next

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

    MsgBox(1,"Positionen","xposition = " & $namenspositionx & "" & @CRLF & "yposition = " & $namenspositiony)

    [/autoit]

    Einmal editiert, zuletzt von autoitinstallermaker (31. März 2010 um 10:12)

  • also das and is auf jeden fall falsch.

    [autoit]

    MsgBox(1, "Größe des Arrays", "Array Größe beträgt: " & UBound($Excelinhalt, 1))
    MsgBox(1, "Größe des Arrays", "Array Größe beträgt: " & UBound($Excelinhalt, 2))

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

    $Spaltenlaenge = UBound($Excelinhalt, 1) - 1
    $Zeilengroesse = UBound($Excelinhalt, 2) - 1

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

    For $y = 0 To $Zeilengroesse Step 1
    For $x = 0 To $Spaltenlaenge Step 1
    If $Excelinhalt[$x][$y] = "Hanswurst" Then
    $namenspositionx = $x
    $namenspositiony = $y
    EndIf
    Next
    Next

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

    MsgBox(1, "Positionen", "xposition = " & $namenspositionx & "" & @CRLF & "yposition = " & $namenspositiony)

    [/autoit]
    • Offizieller Beitrag

    Wie wärs denn mit: _ArraySearch()

    Oder such doch direkt in deinem Excel:

    Spoiler anzeigen
    [autoit]

    Local $sFilePath = 'Pfad.xls'
    Local $sSuchbegriff = 'Suche'

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

    Local $oExcel = ObjCreate("Excel.Application")
    $oExcel.Visible = 0
    Local $oBook = $oExcel.Workbooks.Open($sFilePath)
    Local $oSheet = $oBook.Sheets(1)

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

    Local $Zelle, $Address = 0
    $Zelle = $oSheet.UsedRange.Find($sSuchbegriff)
    If $Zelle <> '' Then $Address = $Zelle.Address

    [/autoit]
  • :rock: Danke! Den blöden Fehler hatte ich ganz überlesen. Jetzt funktioniert es. Hab nur auch noch die Variablen für die Spalten und Zeilen vertauscht.

    So klappt es jetzt:

    [autoit]

    MsgBox(1,"Größe des Arrays","Array Größe beträgt: "& UBound($Excelinhalt, 1))
    MsgBox(1,"Größe des Arrays","Array Größe beträgt: "& UBound($Excelinhalt, 2))

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

    $Zeilengroesse = UBound($Excelinhalt, 1) - 1
    $Spaltenlaenge = UBound($Excelinhalt, 2) - 1

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

    For $y = 0 To $Zeilengroesse Step 1
    For $x = 0 To $Spaltenlaenge Step 1
    If $Excelinhalt[$x][$y] = "Hanswurst" Then $namenspositionx = $x And $namenspositiony = $y
    Next
    Next

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

    MsgBox(1,"Positionen","xposition = " & $namenspositionx & "" & @CRLF & "yposition = " & $namenspositiony)

    [/autoit]

    P.S Das ist hier aber echt professioneller High Speed Support! :thumbup: