Suche nach Informationen in Dateiform

  • Guten Tag, um mir die Arbeit etwas leichter zu machen will ich nach eingabe einer Bezeichnungoder Nummer einen Pfad dauerhaft durchsuchen lassen auf einer Netzwerkplatte.

    Ich habe auch über die Suche hier etwas gefunden was mir die Datein die gefunden wurden in einer Datei Sichert.
    Was mir noch fehlt ist das ich diese dann direkt öffnen kann, sind meistens Exel oder Word files ggf noch für Acrobat.
    Gibt es ne möglichkeit wie in der Windows suche, das ich direkt die Filenamen Anklicken kann zum öffnen?

    Hier das gefunden script:

    Spoiler anzeigen
    [autoit]

    ; Shows the filenames of all files in the current directory.
    $search = FileFindFirstFile("*.au3")

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

    ; Check if the search was successful
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop

    FileWrite ( "include.txt", $file&@CRLF )
    WEnd

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

    ; Close the search handle
    FileClose($search)

    [/autoit]

    3 Mal editiert, zuletzt von DummDumm (15. Juli 2009 um 08:37)

  • Hi DummDumm

    ich habe es ein wenig angepasst so das es in etwa das macht was du willst du musst nur noch den listview so hinbekommen das es die einzelnen zeilen der text datei untereinander auflistet ka wie das geht


    Mfg Eistee


    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListBoxConstants.au3>
    #include <WindowsConstants.au3>

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

    Global $file3 = FileReadline("include.txt")

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

    $Form1 = GUICreate("Form1", 222, 453, 193, 115)
    $List1 = GUICtrlCreateList($file3, 0, 0, 140, 448)
    $Button1 = GUICtrlCreateButton("Search", 144, 0, 75, 25, 0)
    $Button2 = GUICtrlCreateButton("View", 144, 24, 75, 25, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _1 ()
    Case $Button2
    _2 ()
    EndSwitch
    WEnd

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

    Func _1 ()
    ; Shows the filenames of all files in the current directory.
    $search = FileFindFirstFile("*.au3")

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

    ; Check if the search was successful
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop

    FileWrite ( "include.txt", @ScriptDir&"\"&$file&@CRLF )
    WEnd

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

    ; Close the search handle
    FileClose($search)
    EndFunc

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

    Func _2 ()
    ShellExecute(Guictrlread($list1))

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

    EndFunc

    [/autoit]
  • okay danke
    das ist ein sehr guter anfang ich bastel mal rum mit dem List View

    leider ist mir aufgefallen, das beim drücken auf Search sich die liste nicht aktualliesiert :(
    AUch wenn diese Leer wahr.
    achja die TXT wird in einzelnen zeilen bestückt :) das ist schon vorhanden.
    Ich will ja im endefekt ne INPUT box haben wo ich zb reinschreibe Hund, dann soll es mir alle Datein mit der Bezeichung HUND im datei namen auflisten.

  • Spoiler anzeigen
    [autoit]


    #include <GuiListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    Local $Ordner = 'C:\Programme'
    HotKeySet("{ENTER}", "_Open_Ordner")

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

    Global $aOrdner = _FileListToArray($Ordner, "*", 2)
    Opt('GUIOnEventMode', 1)

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

    $gui = GUICreate('Schnelle Ordnerauswahl by funkey & nuts', 400, 600, -1, -1)
    GUISetOnEvent(-3, '_Ende')
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Global $Input = GUICtrlCreateInput('', 10, 10, 380, 20)
    Global $List = GUICtrlCreateList('', 10, 40, 380, 560)
    Global $hList = GUICtrlGetHandle(-1)

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

    For $i = 1 To $aOrdner[0]
    GUICtrlSetData(-1, $aOrdner[$i])
    Next

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

    GUISetState()

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _Check_Eingabe($iwParam)
    switch $iwParam
    case 0x03000003
    _GUICtrlListBox_SetCurSel($hList, _GUICtrlListBox_FindString($hList, GUICtrlRead($Input)))
    EndSwitch
    EndFunc

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

    Func _Open_Ordner()
    If GUICtrlRead($List) <> "" Then ShellExecute($Ordner & '\' & GUICtrlRead($List))
    EndFunc

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

    Func _Ende()
    Exit
    EndFunc

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    _Check_Eingabe($iwParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($List) Then $hWndListBox = GUICtrlGetHandle($List)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $List, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    _Open_Ordner()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND (Bugfix - http://www.autoit.de)

    [/autoit]

    Hilft dir das weiter? Musst du nur für Dateien umbauen (ganz oben bei _FileListToArray).

  • OKay, ja das ist genau das was ich suche, nur muss die Input box den Filter defenieren mal kuken ob ich das hinbekomme

    Einmal editiert, zuletzt von DummDumm (14. Juli 2009 um 13:40)

  • Hey,

    ist vielleicht doch nicht ganz das richtige Skript. ?(
    _FileListtoarray untersucht nämlich nicht die Unterordner. Ist das wichtig?

    Den Filter muss man natürlich je nachdem anpassen z.B. für bestimmte .txt Dateien: "*win*.txt" (am besten du erstellst dir einen Testordner und probierst es aus).

  • Habe es nun soweit

    Spoiler anzeigen
    [autoit]


    Local $Ordner = "C:"
    HotKeySet("{ENTER}", "_Open_Ordner")
    global $filter = "*1010*.*"
    Global $aOrdner = _FileListToArray($Ordner, $filter )
    Opt('GUIOnEventMode', 1)

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

    $gui = GUICreate('Schnelle Ordnerauswahl by funkey & nuts', 220, 600, -1, -1)
    GUISetOnEvent(-3, '_Ende')
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Global $Input = ""
    Global $List = GUICtrlCreateList('', 10, 40, 200, 560)
    Global $hList = GUICtrlGetHandle(-1)

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

    For $i = 1 To $aOrdner[0]
    GUICtrlSetData(-1, $aOrdner[$i])
    Next

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

    GUISetState()

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _Check_Eingabe($iwParam)
    switch $iwParam
    case 0x03000003
    _GUICtrlListBox_SetCurSel($hList, _GUICtrlListBox_FindString($hList, GUICtrlRead($Input)))
    EndSwitch
    EndFunc

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

    Func _Open_Ordner()
    If GUICtrlRead($List) <> "" Then ShellExecute($Ordner & '\' & GUICtrlRead($List))
    EndFunc

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

    Func _Ende()
    Exit
    EndFunc

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    _Check_Eingabe($iwParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($List) Then $hWndListBox = GUICtrlGetHandle($List)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $List, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    _Open_Ordner()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND (Bugfix - http://www.autoit.de)

    [/autoit]

    Was mir nun fehlt ist die Suchzeile die dann nach neu eingabe und Klick oder Enter neu sucht.
    Da Enter belegt ist schon zum öffnen reicht auch ein Button.
    Ich habe nun rumversucht mit GUI ein neues Input feld rein zubauen etc aber bekomme es nicht hin, ev kannst du mir hierbei noch helfen ??

  • Den Hotkey "Enter" kannste ja auch entfernen (wie auch sonst alles was nicht reinpasst).

    Derzeit wird das Listbox-Control nach dem Inhalt der Inputbox durchsucht (_GUICtrlListBox_FindString).
    Jetzt soll noch ein Filter für die Dateiendung eingebaut werden?

    edit \
    Zum Einlesen mit einem anderen Filter:

    Inputbox (und einen "Refresh" Button oder so)) für den Filtererstellen, auslesen, Arraylöschen, Listbox leeren, _Filereadtoarray mit neuem Filter, Listbox befüllen.
    Vielleicht kommst du so weiter? Müsste jetzt nämlich leider bissle was arbeiten.

  • Also im Indefekt will ich einen INfoPool damit durchsuchen

    also ich werde die Input var in nen filter basteln also sozb dann

    $filter = "*"&$input2&"*.*"

    Wie gesagt wenn ich den filter manuell setze geht es einwandfrei

  • So Stelle ich es mir vor nur bekomme ihc es net hin das er die Suche berücksichtigt und den Button

    Spoiler anzeigen
    [autoit]

    #include <GuiListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    Local $Ordner = "C:"
    HotKeySet("{ENTER}", "_Open_Ordner")

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

    Opt('GUIOnEventMode', 1)

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

    $gui = GUICreate('Schnelle Ordnerauswahl by funkey & nuts', 220, 600, -1, -1)
    GUISetOnEvent(-3, '_Ende')
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Global $Input = ""
    Global $Input2 = GUICtrlCreateInput('', 10, 10, 130, 25)
    Global $test = GUICtrlCreateButton("Suche", 150, 10, 60, 25, $WS_GROUP)
    Global $List = GUICtrlCreateList('', 10, 40, 200, 560)
    Global $hList = GUICtrlGetHandle(-1)

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

    global $filter = "*"&$Input2&"*.*"
    Global $aOrdner = _FileListToArray($Ordner, $filter )
    For $i = 1 To $aOrdner[0]
    GUICtrlSetData(-1, $aOrdner[$i])
    Next

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

    GUISetState()

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _Check_Eingabe($iwParam)
    switch $iwParam
    case 0x03000003
    _GUICtrlListBox_SetCurSel($hList, _GUICtrlListBox_FindString($hList, GUICtrlRead($Input)))
    EndSwitch
    EndFunc

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

    Func _Open_Ordner()
    If GUICtrlRead($List) <> "" Then ShellExecute($Ordner & '\' & GUICtrlRead($List))
    EndFunc

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

    Func _Ende()
    Exit
    EndFunc

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    _Check_Eingabe($iwParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($List) Then $hWndListBox = GUICtrlGetHandle($List)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $List, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    _Open_Ordner()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND (Bugfix - http://www.autoit.de)

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    #include <GuiListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    Local $Ordner = "C:"
    HotKeySet("{ENTER}", "_Open_Ordner")

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

    Opt('GUIOnEventMode', 1)

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

    $gui = GUICreate('Schnelle Ordnerauswahl by funkey & nuts', 220, 700, -1, -1)
    GUISetOnEvent(-3, '_Ende')
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Global $Input = GUICtrlCreateInput('', 10, 40, 130, 25)
    Global $Inputrefresh = GUICtrlCreateInput('', 10, 10, 130, 25)
    Global $test = GUICtrlCreateButton("Suche", 150, 10, 60, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, '_Refresh')
    Global $List = GUICtrlCreateList('', 10, 100, 200, 560)
    Global $hList = GUICtrlGetHandle(-1)

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

    Global $aOrdner = _FileListToArray($Ordner, "*" & GUICtrlRead($Inputrefresh) & "*.*", 1)
    If @Error=4 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
    EndIf
    For $i = 1 To $aOrdner[0]
    GUICtrlSetData($List, $aOrdner[$i])
    Next

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

    GUISetState()

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _Check_Eingabe($iwParam)
    Switch $iwParam
    Case 0x03000003
    _GUICtrlListBox_SetCurSel($hList, _GUICtrlListBox_FindString($hList, GUICtrlRead($Input)))
    EndSwitch
    EndFunc ;==>_Check_Eingabe

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

    Func _Open_Ordner()
    If GUICtrlRead($List) <> "" Then ShellExecute($Ordner & '\' & GUICtrlRead($List))
    EndFunc ;==>_Open_Ordner

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

    Func _Ende()
    Exit
    EndFunc ;==>_Ende

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

    Func _Refresh()
    GUICtrlSetData($List, '')
    Local $filter = "*" & GUICtrlRead($Inputrefresh) & "*.*"
    $aOrdner = _FileListToArray($Ordner, $filter, 1)
    If @Error=4 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
    EndIf
    For $i = 1 To $aOrdner[0]
    GUICtrlSetData($List, $aOrdner[$i])
    Next
    EndFunc ;==>_Refresh

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    _Check_Eingabe($iwParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($List) Then $hWndListBox = GUICtrlGetHandle($List)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $List, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    _Open_Ordner()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]


    So ungefähr?

    \geändert!

    Einmal editiert, zuletzt von nuts (14. Juli 2009 um 16:54)

  • jap genau den rest sind ja nur 2 zeilen ändern.

    Danke dir 100000 mal hoffe so bekomme ich das auch mal alleine hin, aber lernen bringt einen vorran

  • Musste es nohcmal öffnen.
    Wenn ich nun eine Suche Defeniere in der der Suchwert nicht vorkommt, zeigt er keine Fehler meldung wie zb

    msgbox(0,"ACHTUNG","Kein Dokument Hinterlegt")

    Stattdessen Stürzt das Programm ab mit dem Fehler das der Wert in der Array nicht stimmt.

  • Es fehlt die Errorabfrage, habs oben eingebaut, aber für sowas kann man auch mal die Hilfe bemühen. :P

    _ArrayDelete würde auch mal entfernt. Bin ich mir jetzt auch nicht so sicher :(
    Sollte man ein Array wieder löschen/leeren bevor man es mit neuen Werten befüllt? Oder werden die alten automatisch überschrieben?

  • Danke ja das mit der Hilfe ist so ne sache die Verlinkung geht leider nicht zum Makro Error

    aber sei das dahin gestellt wenn ich nun Exit aus dem Queltext nach der MSG box rausnehme sollte er ja die MSGBOX anzeigen und danach gehts normal weiter, leider ist es so, das danach das gesamte prog sich beendet nachdem ich auf OK drücke

    mit diesem fehler

    [autoit]

    For $i = 1 To $aOrdner[0]
    For $i = 1 To $aOrdner^ ERROR

    [/autoit]

    Okay habe es selber gelöst durch die zeile hier in der IF anweisung

    $aOrdner = _FileListToArray($Ordner, "*", 1)

    2 Mal editiert, zuletzt von DummDumm (15. Juli 2009 um 08:36)