_arrayfindal

  • Hallo zusammen,

    ich habe eine Frage zu Arrayfindall.

    ich möchte mir eine Adressliste zusammenstellen.
    In den Anfangszügen versuche ich es mit Arrays, später in einer Gui.

    Ich will dann bsp. alle Namen die mit T beginnen aufgelistet haben.

    Aber mit arrayfindall geht das nicht, weil hier nur die richtigen Einträge gefunden werden, also wenn ich Tim suche.

    Gibt es eine Möglichkeit den Search Befehl auf den Anfangsbuchstaben zu reduzieren ?


    Spoiler anzeigen

    Local $avArray[5] = ["Andy", "Tim","Tom","Mike", "Bert"]
    Local $aiResult = _ArrayFindAll($avArray, "T")
    _ArrayDisplay($avArray, "$avArray")
    _ArrayDisplay($aiResult, "Results of searching for 0 in $avArray")

  • Gibt es eine Möglichkeit den Search Befehl auf den Anfangsbuchstaben zu reduzieren ?


    Du könntest zum Beispiel (*hust*) die Hilfe Datei aufschlagen, und dir nochmals die Doku zu _ArrayFindAll() anschauen. Da gibt es nämlich einen Parameter "$iPartial", der es erlaubt, nur nach Teilübereinstimmungen zu suchen.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Local $avArray[5] = ["Karl", "Max", "Jürgen", "Peter", "Tim"]
    Local $aiResult = _ArrayFindAll($avArray, 'T',0,0,0,1)
    _ArrayDisplay($aiResult)

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

    ; Index -> Wert
    For $i = 0 To UBound($aiResult) -1
    $aiResult[$i] = $avArray[$aiResult[$i]]
    Next
    _ArrayDisplay($aiResult)

    [/autoit]

    /Edit:
    Alternativ kannst du dir natürlich selbst eine Funktion schreiben:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Local $avArray[5] = ["Karl", "Max", "Thomas", "Peter", "Tim"]
    Local $aiResult = _ArrayFindAll_StartingWith($avArray, 'T')
    _ArrayDisplay($aiResult)

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

    Func _ArrayFindAll_StartingWith(ByRef $aArray, $sValue)
    Local $sRet
    For $i = 0 To UBound($aArray) - 1
    If StringRegExp($aArray[$i], '^' & $sValue) Then $sRet &= '|' & $aArray[$i]
    Next
    Return StringSplit(StringMid($sRet, 2), '|', 2)
    EndFunc ;==>_ArrayFindAll_StartingWith

    [/autoit]
  • Danke für den Tip. Aber mit diesen Optionen sucht er nach einem T in allen Namen. Ob das T ab Anfang steht ist egal. So wird auch Peter angezeigt, owohl T in Mitte.

  • Hab hier schnell ne Funktion zusammengschustert. :)

    Spoiler anzeigen
    [autoit]

    Func _ArraySearchFirstChar($a_Search, $sChar)
    Local $sIndices = ""
    For $i = 0 To UBound($a_Search) -1
    If StringLeft($a_Search[$i], 1) = $sChar Then $sIndices &= $i & "|"
    Next
    Return StringSplit(StringTrimRight($sIndices, 1), "|", 2)
    EndFunc

    [/autoit]


    Btw:

    Zitat

    _arrayfindal


    Wer ist Al?

  • Das zweite Exmaple klappt.
    Kann man dort noch eine Unterscheidung der Groß und kleinschreibung einbauen.

    Wenn der Name versehntlich klein geschrieben wurde, wird er nich gelistet.

  • Öhm ja das hilft aber auch nicht wenn man nur Ergebnisse möchte die mit T anfangen. Bei dir würde ja auch "Peter" als Treffer gefunden werden.

    Würde das so lösen:

    [autoit]


    #include <Array.au3>

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

    Local $avArray[5] = ["Karl", "Max", "Jürgen", "Peter", "Tim"]
    $aiResult = mysearch($avArray, 'T')
    if $aiResult = -1 Then
    MsgBox(0,"Fehler", "Keine Treffer gefunden!")
    Else
    _ArrayDisplay($aiResult)
    EndIf

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

    Func mysearch($aSearch,$letter)
    Local $result[1]=[0]

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

    For $i = 0 To UBound($aSearch) -1
    ;if StringLeft($aSearch[$i],1) == $letter Then ; achtung: case sensitiv
    if StringLeft($aSearch[$i],1) = $letter Then ; not case sensitive
    _ArrayAdd($result,$aSearch[$i])
    $result[0] += 1
    EndIf
    Next

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

    if $result[0] > 0 Then
    _ArrayDelete($result,0) ; nur wenn keine Rückgabe der Trefferzahl gewünscht ist
    Return $result
    Else
    Return -1
    EndIf
    EndFunc

    [/autoit]

    EDIT: Da haben wohl mittlerweile schon einige ne Lösung gepostet ^^

    2 Mal editiert, zuletzt von misterspeed (17. Juni 2011 um 22:28)