Listbox suchen [SektionsName]

  • Hey,

    Habe folgendes Problem:
    Habe folgende Gui Funktioniert auch soweit.


    Spoiler anzeigen
    [autoit]

    #Include <GuiListBox.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <String.au3>

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

    Opt("GuiOnEventMode",1)
    ;Opt("MustDeclareVars", 1)
    Global $aArtikel, $aRead, $aRet, $colList, $DATEI_EDIT, $Edit_loeschen, $Edit1, $Form1, $hListBox, $i, $InsFol, $InsFolini
    Global $insPostpone, $insrepair, $insshowdialog, $inshidden, $insuninstall, $j, $ListArtikel1, $ListArtikel2, $ListArtikel3
    Global $read, $s11, $s12, $s13, $s14, $s15, $s16, $s17, $s18, $s19, $s20, $saveFile, $Speichern, $split, $sRead, $ValuesToSet
    Global $folder, $array, $string, $sel, $stringAdd, $aItem[1][2] = [['']]

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

    $Form1 = GUICreate("Form1", 633, 370, -1, -1)
    GuiSetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    $Edit1 = GUICtrlCreateEdit("", 108, 48, 149, 280)
    $hListBox = GUICtrlCreateList("", 370, 48, 250, 280)
    $insuninstall = GUICtrlCreateButton("Un", 10, 128, 91, 25)
    GuiCtrlSetOnEvent(-1, "_insline")
    $insrepair = GUICtrlCreateButton("Re", 10, 159, 91, 25)
    GuiCtrlSetOnEvent(-1, "_insline")
    $insshowdialog = GUICtrlCreateButton("Sh", 10, 190, 91, 25)
    GuiCtrlSetOnEvent(-1, "_insline")
    $inshidden = GUICtrlCreateButton("Hi", 10, 221, 91, 25)
    GuiCtrlSetOnEvent(-1, "_insline")
    $insPostpone = GUICtrlCreateButton("Po", 10, 252, 91, 25)
    GuiCtrlSetOnEvent(-1, "_insline")
    $InsFol = GUICtrlCreateButton("Bundels", 370, 338, 91, 25)
    GuiCtrlSetOnEvent(-1, "_bundle")
    $InsFolini = GUICtrlCreateButton("Custom Bundels", 490, 338, 91, 25)
    GuiCtrlSetOnEvent(-1, "_bundle")
    GUICtrlCreateLabel("BUNDELS", 372, 24, 178, 20)
    GUICtrlCreateLabel("software.INI", 110, 24, 67, 17)
    $Speichern = GUICtrlCreateButton("Speichern", 140, 338, 75, 25)
    GuiCtrlSetonevent(-1, "_save")
    $Edit_loeschen = GUICtrlCreateButton("Edit löschen", 220, 338, 75, 25)
    GuiCtrlSetonevent(-1, "_del")
    $Inputcn = GUICtrlCreateInput("Suchen", 472, 8, 121, 23)

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

    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    While 1
    sleep(100)
    WEnd

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

    Func _bundle()
    Switch @GUI_CtrlId
    Case $InsFol
    _select_bundel()
    Case $InsFolini
    _select_bundel(1)
    EndSwitch
    EndFunc

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    If Not IsArray($array) Then Return $GUI_RUNDEFMSG ; <=== füge diese Zeile ein
    Local $hWndFrom, $iCode, $hWndListBox = $hListBox
    If Not IsHWnd($hWndListBox) Then $hWndListBox = GUICtrlGetHandle($hWndListBox)
    $hWndFrom = $ilParam
    $iCode = BitShift($iwParam, 16)
    If $hWndFrom = $hWndListBox Then
    If $iCode = $LBN_DBLCLK Then
    $stringAdd = ""
    $read = ''
    $sel = _GUICtrlListBox_GetCurSel($hListBox)
    If $sel <> -1 Then
    Local $ind = _ArraySearch($aItem, _GUICtrlListBox_GetText($hListBox, $sel), 0, 0, 0, 0, 1, 1)
    If @error Then Return
    $read = FileRead($aItem[$ind][0])
    $split = StringSplit($read, "")
    For $i = 1 To $split[0]
    If $split[$i] = "[" Then $string &= @CRLF
    $string &= $split[$i]
    Next
    ;GuICtrlSetData($Edit1, StringTrimLeft($string,1)&@CRLF)
    GuICtrlSetData($Edit1, GUICtrlRead($Edit1) & @CRLF & StringTrimLeft($string,1)&@CRLF&@CRLF)
    $string = ""
    EndIf
    EndIf
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

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

    Func _insLine()
    For $i = 27 To 3 Step -1
    $string = StringReplace(GuiCtrlRead($Edit1), _multiLine($i) , @CRLF & @CRLF)
    GuICtrlSetData($Edit1, $string)
    Next
    Switch @GUI_CtrlId
    Case 124
    $stringAdd = @crlf & "Un=1" & @CRLF & @CRLF
    Case 6
    $stringAdd = @crlf & "re=1" & @CRLF & @CRLF
    Case 7
    $stringAdd = @crlf & "Sh=0" & @CRLF & @CRLF
    Case 8
    $stringAdd = @crlf & "hi=1" & @CRLF & @CRLF
    Case 9
    $stringAdd = @crlf & "Al=1" & @crlf & "Po=3" & @CRLF & @CRLF
    EndSwitch
    $string = StringReplace(GuiCtrlRead($Edit1), @crlf & @CRLF ,$stringAdd)
    GuICtrlSetData($Edit1, $string)
    EndFunc

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

    Func _multiLine($count)
    Local $ret = ''
    For $i = 1 To $count
    $ret &= @CRLF
    Next
    Return $ret
    EndFunc

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

    Func _save()
    $saveFile = FileSaveDialog("Wählen Sie einen Ordner aus:", @DesktopDir,"Files(*.*)")
    If $saveFile <> "" Then
    FileWrite($saveFile, GuiCtrlRead($Edit1))
    EndIf
    EndFunc

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

    Func _del()
    GuICtrlSetData($Edit1, "")
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _select_bundel($bundle=0)
    If Not IsHWnd($hListBox) Then $hListBox = GUICtrlGetHandle($hListBox)
    _GUICtrlListBox_ResetContent($hListBox)
    GuICtrlSetData($Edit1, "")
    ReDim $aItem[1][2]
    $aItem[0][0] = ''
    If $bundle = 0 Then
    $folder = 'bundels'
    ;$folder = FileSelectFolder("Wählen Sie einen Ordner aus:", 'C:\');@DesktopDir)

    If $folder <> "" Then
    $array = _FileListToArray($folder, "*.ini",1)
    If @error Then Return ; <=== Falls keine Datei enthalten, aus Funktion aussteigen
    For $i = 1 To Ubound($array)-1
    If $aItem[UBound($aItem)-1][0] <> '' Then ReDim $aItem[UBound($aItem)+1][2]
    $aItem[UBound($aItem)-1][0] = $folder & '\' & $array[$i]
    $aItem[UBound($aItem)-1][1] = $array[$i]
    _GUICtrlListBox_AddFile($hListBox, $folder & "/" & $array[$i])
    Next
    EndIf
    Else
    Local $path = 'c:\Customs' ; Pfad mit den Unterordnern
    Local $log = 'Software.ini'
    $array = _FileListToArray($path, '*', 2)
    If @error Then Return
    Local $ind, $aInd, $text
    For $i = 1 To UBound($array) -1
    If FileExists($path & '\' & $array[$i] & '\' & $log) Then
    If $aItem[UBound($aItem)-1][0] <> '' Then ReDim $aItem[UBound($aItem)+1][2]
    $aItem[UBound($aItem)-1][0] = $path & '\' & $array[$i] & '\' & $log
    $aItem[UBound($aItem)-1][1] = $array[$i] & '.ini'
    _GUICtrlListBox_AddString($hListBox, $array[$i] & '.ini')
    EndIf
    Next
    EndIf
    EndFunc

    [/autoit]

    jetzt zu meinem Problem:
    In der Listview werden über einen Button der Inhalt eines verzeichnisses angezeigt in eine Listbox "alle *.ini's"
    über den anderen Button werden werden diverse unter order geprüft und dort enthaltene ini datei angezeigt.

    Also so in etwa.
    ordner1\software.ini > ListBox> ordner1.ini
    ordner2\software.ini > ListBox> ordner2.ini
    ordner3\software.ini > ListBox> ordner3.ini
    ordner4\software.ini > ListBox> ordner4.ini
    ordner5\software.ini > ListBox> ordner5.ini
    Funktioniert auch.

    Jetzt möchte ich in der Listbox suchen in welcher ini ein bestimmter [SektionsName] und die einblenden und den rest ausblenden wie mache ich das?
    Und das ganze über eine Inputbox?
    In der ini Können mehrere [SektionsName] enthalten sein. aber wenn es zutrift dann einblenden rest ausbelnden oder farblich makieren als alternative eine idee?

    Bin am verzweifeln....

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Für jede Ini ein Array mit allen Sektionsnamen erstellen (Inireadsektionnames).
    Jeden Eintrag dieses Array mit dem Suchstring vergleichen und bei einem Treffer das Ergebnis zwischen speichern.

    Am Ende die Listbox leeren und mit den Treffern wieder befüllen.

  • Ich weiss nicht im ansatz wie ich das machen soll?
    Kannst du mir etwas dabei helfen?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Deine Listbox ist doch mit Dateinamen der .ini's gefüllt.
    Diese auszulesen klappt ja oder?

    [autoit]


    $name = "" ; Kommt von deiner Listbox
    $searchstring = "" ;der gesuchte Sektionsname
    $ergebnis ;hier werden treffer zwischen gespeichert
    $asections=IniReadSectionNames($name)
    for $i = 0 to UBound($asections)-1
    if $asections[$i] = $searchstring then $ergebnis &= $asections[$i] & "|"
    next

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

    ;$ergebnis enthält jetzt alle .ini Namen mit der gesuchten Sektion, abgetrennt von einem "|"

    [/autoit]
  • sowas in der art...


    [autoit]

    #include <Array.au3>
    Global $ergebnis[1]

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

    $array1 = IniReadSectionNames(Pfad zur 1. Ini)
    $array2 = IniReadSectionNames(Pfad zur 2. Ini)
    $array3 = IniReadSectionNames(Pfad zur 3. Ini)

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

    For $i = 1 to $array1[0]
    If $array1[$i] = "Suchstring" Then
    _ArrayAdd($ergebnis, $array1[$i])
    $ergebnis[0] = UBound($ergebnis) - 1
    EndIf
    Next

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

    For $i = 1 to $array2[0]
    If $array2[$i] = "Suchstring" Then
    _ArrayAdd($ergebnis, $array2[$i])
    $ergebnis[0] = UBound($ergebnis) - 1
    EndIf
    Next

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

    For $i = 1 to $array3[0]
    If $array3[$i] = "Suchstring" Then
    _ArrayAdd($ergebnis, $array3[$i])
    $ergebnis[0] = UBound($ergebnis) - 1
    EndIf
    Next

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

    For $i = 1 To $ergebnis[0]
    GUICtrlCreateListViewItem($ergebnis[$i], ListviewID)
    Next

    [/autoit]
  • Das Problem habe ich ja auch noch habe sehr viel mit Listviews gearbeitet ,
    aber nicht mit listboxen bin froh das ich das jetzt hinbekommen habe...

    Ich habe ja sogesehen zwei listboxen einmal dateiname.ini
    ordnername\software.ini >Listboxeintrag> Ordnername.ini

    Kannst du mir mal unter die arme greifen ;)

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hey,

    [autoit]

    $name = "" ; Wie mache ich das?
    $searchstring = "" ;Das kriege ich hin GUICtrlRead
    $ergebnis ;hier werden treffer zwischen gespeichert
    $asections=IniReadSectionNames($name)
    for $i = 0 to UBound($asections)-1
    if $asections[$i] = $searchstring then $ergebnis &= $asections[$i] & "|"
    next

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

    ;$ergebnis enthält jetzt alle .ini Namen mit der gesuchten Sektion, abgetrennt von einem "|"

    [/autoit]


    Und vor allem wie baue ich die GUI jetzt auf oder die Funktion
    mit der suchen funktion.
    Komme mir vor wie am ersten tag AUTOIT

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Willst du nicht beim Listview bleiben?
    Eine Listbox ist zwar eigentlich einfacher, aber wenn dir das solche Probleme macht?

    Die Listboxitems (der .ini Name) bekommst du über Guictrlread (bzw. eine Schleife vom ersten bis zum letzten Item).

    Ka ob jetzt wirklich der .ini Dateiname in der Listbox steht, aber mit den dort enthaltenen Infos und den restlichen hinterlegten Daten muss sich der ganze Namen eben zusammensetzen lassen.

    Einmal editiert, zuletzt von nuts (30. Oktober 2009 um 14:54)

  • mhh...
    ich habe gar keine Auto ;)

    [autoit]

    $Edit1 = GUICtrlCreateEdit("", 108, 48, 149, 280)
    $hListBox = GUICtrlCreateList("", 370, 48, 250, 280)

    [/autoit]

    Ich habe doch von anfang an keine Listview gehabt ??

    Wie kann ich das am besten lösen ?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 298, 438, 192, 132)
    $List1 = GUICtrlCreateList("", 48, 56, 177, 262)
    $hlist1 = GUICtrlGetHandle($List1) ;handle für die Listbox UDF
    $Button1 = GUICtrlCreateButton("Los gehts", 48, 344, 177, 41, $WS_GROUP)
    GUICtrlSetData($List1, "Pfad zur .ini1|Pfad zur .ini2|Pfad zur .ini3|") ;du füllst deine Listbox mit den richtigen Pfaden
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $Button1
    _Suche()
    EndSwitch
    WEnd

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

    func _Suche()
    $searchstring = "" ;der gesuchte Sektionsname
    $ergebnis = "" ;hier werden treffer zwischen gespeichert
    $count = _GUICtrlListBox_GetCount($hlist1)
    for $i = 0 to $count -1 ;jedes item durchgehen
    $name = _GUICtrlListBox_GetText($hlist1, $i) ; Auslesen eines Listboxitems -> Pfad der .ini
    $asections=IniReadSectionNames($name) ;alle Sektionnamen der .ini einlesen
    for $i = 0 to UBound($asections)-1 ;array durchgehen
    if $asections[$i] = $searchstring then $ergebnis &= $asections[$i] & "|" ;bei einem Treffen, ...
    next
    next
    ;$ergebnis enthält jetzt alle .ini Namen mit der gesuchten Sektion, abgetrennt von einem "|"
    GUICtrlSetData($List1, "") ;Listbox leeren
    GUICtrlSetData($List1, $ergebnis) ;$ergebnis in die Listbox schreiben
    endfunc

    [/autoit]


    Hier einmal für die Listbox.

    Ich meinte nur, dass du dein Skript ja auf ein Listview abändern kannst.