2D-Array - Array in Array?

  • Hi,

    achso, das mit den .xlsx-Dateien ist mein Fehler. Hatte die gestern neu
    erstellt und nicht dran gedacht in .xls umzuformatieren.

    Zu deiner anderen Frage, bzw. Annahme. Nein, es soll nicht nur die erste Spalte kontrolliert werden.

    Ich versuchs nochmal:
    (Shema für die Tabelle: Spalte1 Spalte2 Spalte3)

    Array $Files2d 1. Zeile: LaufenderDienst Enabled Wahr wird verglichen mit Array $anegativliste : Allerdings ist der Eintrag so nicht vorhanden, d. h. es steht in keiner Zeile des Dokuments, bzw. des Arrays $anegativliste LaufenderDienst Enabled Wahr. So, nun wird in $areferenz nach dieser Zeile gesucht. Also, steht irgendwo in $areferenz in irgendeiner Zeile LaufenderDienst Enabled Wahr genauso da, ist es ok. Dann wird mit der nächsten Zeile und den 3 Elementen aus $Files2d weitergemacht.

    Ist der Eintrag LaufenderDienst Enabled Wahr nicht haargenau so in $areferenz vorhanden, wird die zu suchende Zeile und deren 3 Elemente in "log.txt" geschrieben.
    Dies geschieht auch, wenn z. B. Der Eintrag in folgender Kombination in $areferenz vorhanden ist: LaufenderDienst Enabled Falsch. Also, es soll nicht erst die 1. Spalte komplett, dann die 2 Spalte komplett usw. miteinander verglichen werden. Sondern Zeile für Zeile.


    Da schaut die func in dem moment in die Excel datei und gib das wieder was da steht. Ist wahrscheinlich nicht richtig oder??

    Nene, die gibt nur den Suchbegriff aus $Files2d wieder, der in beiden Exceldateien bzw. deren Arrays nicht gefunden wurde. Und das schreibt er halt in die log.txt

  • Hi!


    [autoit]

    For $i = 0 To UBound($Files2d) - 1
    _ArraySearch($anegativliste, $Files2d[$i][0], 0, 0, 1, 1)
    If @error Then
    _ArraySearch($areferenz, $Files2d[$i][0], 0, 0, 1, 1)
    If @error Then
    $sOut &= $Files2d[$i][0] & ' ' & $Files2d[$i][1] & ' ' & $Files2d[$i][2] & @CRLF
    EndIf
    EndIf
    Next

    [/autoit]

    LG Kleiner

  • Moin,

    gerade ausprobiert, aber selber Fehler wie vorher. Beendet sich bevor die Schleife durchlaufen wird,
    und es wird nichts in die log.txt geschrieben.

    Mal was anderes:

    Spoiler anzeigen
    [autoit]

    Local $sOut = ''
    For $i = 0 To UBound($Files2d) - 1
    _ArraySearch($anegativliste, $Files2d[$i][0], 0, 0, 1, 1)
    If @error Then
    _ArraySearch($areferenz, $Files2d[$i][0], 0, 0, 1, 1)
    If @error Then
    $sOut &= $Files2d[$i][0] & ' ' & $Files2d[$i][1] & ' ' & $Files2d[$i][2] & @CRLF
    EndIf
    EndIf
    Next

    [/autoit]


    Kann es nicht einfach sein, dass man bei $anegativliste und $areferenz auch einfach die größe
    mit angeben muss?

  • So ich möchte auch mal was in die Runde schmeißen.
    Versuch doch mal das hier:

    Spoiler anzeigen
    [autoit]

    Global $iFound

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

    For $i = 0 To UBound($Files2d) - 1
    $iFound = 0
    For $k = 0 To UBound($anegativliste) - 1
    If $Files2d[$i][0] = $anegativliste[$k][0] And $Files2d[$i][1] = $anegativliste[$k][1] And $Files2d[$i][2] = $anegativliste[$k][2] Then
    $iFound = 1
    ExitLoop
    EndIf
    Next
    If Not $iFound Then
    For $k = 0 To UBound($areferenz) - 1
    If $Files2d[$i][0] = $areferenz[$k][0] And $Files2d[$i][1] = $areferenz[$k][1] And $Files2d[$i][2] = $areferenz[$k][2] Then
    $iFound = 1
    ExitLoop
    EndIf
    Next
    If Not $iFound Then $sOut &= $Files2d[$i][0] & " " & $Files2d[$i][1] & " " & $Files2d[$i][2] & @CRLF
    EndIf
    Next

    [/autoit]

    Einmal editiert, zuletzt von m-obi (8. Oktober 2010 um 08:52)

  • Hi!


    Mein log ergebniss ist:

    [autoit]

    AdminPW Auto Wahr
    Bösartiger Dienst Auto Wahr
    Gatewaydienst auf Anwendungsebene Manual Wahr

    [/autoit]



    Überprüf dein Skript noch mal genau!
    Es ist genau das was du suchst.

    Lg kleiner

  • Abert bei dir gibt _ArraySearch auch einen Treffer wenn die erste Spalte korrekt ist, aber die anderen beiden nicht, weil du ja nur die erste Spalte als Suche angibst.

  • Im Prinzip müsstest du die _ArraySearch auch nochmal in einer Schleife jeweils packen, aber dann kommts auf gleich hinaus wie bei meinem Codebeispiel. Und bei mir muss ich auch nix includen.

  • Hi!

    @m-obi habe mich auch gleich dran gemacht.
    3 zeile Warndienst ist ja in der Excel enthalten wie auch in der zweiten Disabled nur Falsch ist halt anders als FALSCH also treffer ausgabe !


    [autoit]

    Local $sOut = '', $index, $index1
    For $i = 0 To UBound($Files2d) - 1
    For $n = 0 To 2
    $index &= _ArraySearch($anegativliste, $Files2d[$i][$n], 0, 0, 1, $n + 1)
    ConsoleWrite('suchlauf : ' & $index & @CRLF)
    Next
    ConsoleWrite('suchlauf ende : ' & $index & @CRLF)
    If StringInStr($index, '-') Then
    For $n = 0 To 2
    $index1 &= _ArraySearch($areferenz, $Files2d[$i][$n], 0, 0, 1, $n + 1)
    ConsoleWrite('suchlauf2 : ' & $index1 & @CRLF)
    Next
    ConsoleWrite('suchlauf2 ende : ' & $index1 & @CRLF)
    If StringInStr($index, '-') Then
    $sOut &= $Files2d[$i][0] & ' ' & $Files2d[$i][1] & ' ' & $Files2d[$i][2] & @CRLF
    EndIf
    EndIf
    $index = ''
    $index1 = ''
    Next

    [/autoit]

    LG Kleiner

    Einmal editiert, zuletzt von Kleiner (8. Oktober 2010 um 10:13)

  • Aber wozu soll das $n + 1 in _ArraySearch? Da kann nur eine 0 oder eine 1 hin, je nachdem ob Teilsuche aktiv sein soll oder nicht. Aber ich hab noch nicht meins getestet, hast du?

  • Achso wie sieht denn $anegativliste und $areferenz als Array aus? Den Parameter wo du immer $n mit 1 addierst, ist doch aber die Teilsuche, warum willst du denn immer erweitern?

    Edit:

    Code
    Parameter
    $avArray     Das zu durchsuchende Array
    $vValue     Der Suchbegriff
    $iStart     [optional] Startindex für die Suche
    $iEnd     [optional] Stoppindex für die Suche
    $iCase     [optional] Wenn auf 1 gesetzt ist, wird die Groß- und Kleinschreibung berücksichtigt.
    $iPartial     [optional] Wenn auf 1 gesetzt wird die Teilsuche aktiviert.
    $iForward     [optional] Wenn auf 0 gesetzt wird das Array rückwärts (vom Ende zum Anfang) durchsucht anstatt vorwärts (vom Anfang zum Ende)
    $iSubItem     [optional] Sub-index in dem bei einem 2-dimensionalem Array gesucht werden soll
  • Hi!

    OoooH!

    [autoit]

    For $i = 0 To UBound($Files2d) - 1
    For $n = 0 To 2
    $index &= _ArraySearch($anegativliste, $Files2d[$i][$n], 0, 0, 0, 0, 1, $n + 1)
    ConsoleWrite('suchlauf : ' & $index & @CRLF)
    Next
    ConsoleWrite('suchlauf ende : ' & $index & @CRLF)
    If StringInStr($index, '-') Then
    For $n = 0 To 2
    $index1 &= _ArraySearch($areferenz, $Files2d[$i][$n], 0, 0, 0, 0, 1, $n + 1)
    ConsoleWrite('suchlauf2 : ' & $index1 & @CRLF)
    Next
    ConsoleWrite('suchlauf2 ende : ' & $index1 & @CRLF)
    If StringInStr($index, '-') Then
    $sOut &= $Files2d[$i][0] & ' ' & $Files2d[$i][1] & ' ' & $Files2d[$i][2] & @CRLF
    EndIf
    EndIf
    $index = ''
    $index1 = ''
    Next

    [/autoit]

    Lg kleiner

  • Haste meins mal getestet? [ offen ] 2D-Array - Array in Array?
    Übrigens musste evtl noch bei $areferenz und $anegativliste den index ändern weil ich nicht weiß wie die Arrays bei dir aussehen.

    Kleiner: Deins gibt bei mir falsche Ergebnisse.

    Einmal editiert, zuletzt von m-obi (8. Oktober 2010 um 10:59)

  • Hey,

    so, habe deines gerade mal ausprobiert m-obi. Das funktioniert genau so, wie es soll. Vielen Dank dafür <3
    Auch vielen Dank an alle anderen die so viel Geduld aufgebracht haben :)

  • Ich hab es mit mehreren Konstellationen getestet und deins hat welche als schon vorhanden gehalten, wobei dies garnicht gestimmt hat. Meins hat dagegen alle die noch nicht vorhanden waren rausgefischt.
    Aber schön das es mit meinem ersten Codebeispiel schon geklappt hat ;)