Jump to content

Getting rid of ListView items...


Recommended Posts

The problem I am having with this script is that when you search for something, and then close the GUI, and then search for something again, the search results from the previous search are still there. Thanks in advance!

_FileListToArrayNew2g.au3 download here

#include <File.au3>
#include <Array.au3>
#include <_FileListToArrayNew2g.au3>
#include <GUIConstants.au3>
#include <IE.au3>
#include <GuiListView.au3>
Opt("TrayAutoPause", 0)
Opt("RunErrorsFatal", 0)
$tsearch = TrayCreateItem("Search")
$im = TrayCreateMenu("Indexing")
$tindex = TrayCreateItem("Add folder to index", $im)
$tdeleteindex = TrayCreateItem("Delete index", $im)
HotKeySet("^!s", "Search")
$searcharray = _ArrayCreate(0)
$file = _ArrayCreate("")
_FileReadToArray(@ScriptDir & "\FileList.data", $file)
If FileExists(@ScriptDir & "\FileList.data") = 0 Then
    $time = TimerInit()
    $textfile = FileOpen(@ScriptDir & "\FileList.data", 0 + 2)
    $file = _FileListToArray3(FileSelectFolder("Select folder to index", ""), "*", 1, 1)
    For $i = 1 To $file[0]
        FileWriteLine($textfile, $file[$i])
    Next
    $time = TimerDiff($time)
    MsgBox(0, "Indexing", "Indexing complete. " & $file[0] & " files were indexed. Indexing took " & Round($time / 1000) & " seconds.")
    $file = _ArrayCreate("")
    _FileReadToArray(@ScriptDir & "\FileList.data", $file)
EndIf
While 1
    $t = TrayGetMsg()
    If $t = $tsearch Then
        Search()
    ElseIf $t = $tindex Then
        $time = TimerInit()
        $textfile = FileOpen(@ScriptDir & "\FileList.data", 0 + 1)
        $file = _FileListToArray3(FileSelectFolder("Select folder to index", ""), "*", 1, 1)
        For $i = 1 To $file[0]
            FileWriteLine($textfile, $file[$i])
        Next
        $time = TimerDiff($time)
        MsgBox(0, "Indexing", "Indexing complete. " & $file[0] & " files were indexed. Indexing took " & Round($time / 1000) & " seconds.")
        $file = _ArrayCreate("")
        _FileReadToArray(@ScriptDir & "\FileList.data", $file)
    ElseIf $t = $tdeleteindex Then
        If MsgBox(4, "Delete Index", "Would you like to delete your index?") = 6 Then
            FileDelete(@ScriptDir & "\FileList.data")
            MsgBox(0, "Delete Index", "Index deleted.")
        EndIf
    EndIf
WEnd
Func Search ()
    $search = InputBox("Search", "Search for a file.")
    $time2 = TimerInit()
    For $i = 1 To $file[0]
        If StringInStr($file[$i], $search) Then
            _ArrayAdd($searcharray, $file[$i])
            $searcharray[0] += 1
        EndIf
    Next
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Results", 444, 406, 193, 115)
    $ListView1 = GUICtrlCreateListView("", 8, 8, 425, 297)
    _GUICtrlListViewInsertColumn($ListView1, 0, "File", 0, 415)
    For $i = 1 To $searcharray[0]
        GUICtrlCreateListViewItem($searcharray[$i], $ListView1)
    Next
    $Button1 = GUICtrlCreateButton("Go!", 8, 312, 100, 17, 0)
    $Button2 = GUICtrlCreateButton("Navigate", 120, 312, 100, 17, 0)
    $size = GUICtrlCreateLabel("", 20, 339, 300)
    $searchtime = GUICtrlCreateLabel(Round(TimerDiff($time2) / 1000, 2) & " seconds", 20, 359)
    $filenumber = GUICtrlCreateLabel($searcharray[0] & " results.", 20, 379)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $now = ""
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                GUIDelete($Form1)
                ExitLoop
            Case $Button1
                ShellExecute(StringReplace(GUICtrlRead(GUICtrlRead($ListView1)), "|", ""))
            Case $Button2
                _IECreate(getdir(GUICtrlRead(GUICtrlRead($ListView1))))
        EndSwitch
        If GUICtrlRead($ListView1) <> $now Then
            GUICtrlSetData($size, FileGetSize(StringReplace(GUICtrlRead(GUICtrlRead($ListView1)), "|", "")) & " bytes")
            $now = GUICtrlRead($ListView1)
        EndIf
    WEnd
EndFunc ;==>Search
Func getdir($filename)
    $split = StringSplit($filename, "\")
    If Not @error Then
        $dir = ""
        $num = 1
        Do
            $dir &= $split[$num] & "\"
            $num += 1
        Until $num = $split[0]
        Return $dir
    EndIf
    Return 0
EndFunc   ;==>getdir
Link to comment
Share on other sites

That's because during each search you keep adding new values to $searcharray, which already contains old values too.

You need it empty at the start of Search() function.

Whoops. That was stupid of me. Thanks!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...