Jump to content

StringFinder v1.2.3


wakillon
 Share

Recommended Posts

I hate the Microsoft Windows search.

After trying the powerfull "Agent Ransack", i said to myself ; why not create a free alternative in AutoIt ?

201510141745381cpo1f.jpg

StringFinder replace my old TinyAu3FilesSearch utility and will be added to the next version of SciTE Hopper

Unlike to TinyAu3FileSearch, you can search strings in any "Text" files.

Source and compiled Version are available in the Download Section.

Enjoy !

 

Edited by wakillon

AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Link to comment
Share on other sites

Wow.. this is way cooler than the one I wrote, Bravo!!! :cheer:  Thanks for sharing!  My only constructive criticism would be the option to open the file in whatever editor you specify (or maybe the default mime type), other than that this thing is super awesome!!  Wait.. I see you have done this:

Local $iEncoding = FileGetEncoding($sSelectedFilesPath)
If $iEncoding > 512 Or $iEncoding = 16 Then
    ShellExecute('"' & $sSelectedFilesPath & '"')
Else
    If FileExists($sSciTEPath) Then
        Run($sSciTEPath & ' "' & $sSelectedFilesPath & '"')
    Else
        ShellExecute('"' & $sSelectedFilesPath & '"')
    EndIf
EndIf

Looks like you open it based on the file encoding, I prefer mime type so I replaced the above with this:

ShellExecute('"' & $sSelectedFilesPath & '"')

 

Here was my old grep function:

Func grepsearch($searchfold, $searchstr)
    If StringRight($searchfold, 1) <> "\" Then $searchfold = $searchfold & "\"
    Local $foldlist = _FileListToArrayRec($searchfold, "*", 2, 1)
    If UBound($foldlist) > 0 And GUICtrlRead($chkSubdirectories) = $GUI_CHECKED Then
        Local $filelist, $filecontents, $foundlist[9999999], $foundcnt = 0, $flo, $line, $z, $time
        For $i = 0 To $foldlist[0]
            If $i = 0 Then
                $filelist = _FileListToArray($searchfold, "*", 1)
                $foldlist[0] = "" ;so the next lines won't append the count to it.
            Else
                $filelist = _FileListToArray($searchfold & $foldlist[$i], "*", 1)
            EndIf
            If UBound($filelist) > 0 Then
                For $l = 1 To $filelist[0]
                    GUICtrlSetData($lblresults, $searchfold & $foldlist[$i] & $filelist[$l])
                    If FileGetSize($searchfold & $foldlist[$i] & $filelist[$l]) >= 100000000 Then
                        $flo = FileOpen($searchfold & $foldlist[$i] & $filelist[$l], 0)
                        $z = 0
                        While 1
                            $filecontents &= FileReadLine($flo)
                            If @error = -1 Then ExitLoop
                            If _MathCheckDiv($z, 3200000) Then
                                If StringInStr($filecontents, $searchstr, 1) Then
                                    ;found
                                    $foundlist[$foundcnt] = $searchfold & $foldlist[$i] & $filelist[$l]
                                    $foundcnt += 1
                                    ExitLoop
                                EndIf
                            Else
                                $line = ""
                            EndIf
                            $z += 1
                        WEnd
                        FileClose($flo)
                    Else
                        ;m('hit')
                        $filecontents = _FileRead($searchfold & $foldlist[$i] & $filelist[$l])
                        If StringInStr($filecontents, $searchstr, 1) Then
                            ;found
                            $foundlist[$foundcnt] = $searchfold & $foldlist[$i] & $filelist[$l]
                            $foundcnt += 1
                        EndIf
                    EndIf
                Next
            EndIf
        Next
    Else
        Local $filelist = _FileListToArray($searchfold, "*", 1), $filecontents, $foundcnt = 0, $foundlist[9999999]
        If UBound($filelist) > 0 Then
            For $l = 1 To $filelist[0]
                $filecontents = _FileRead($searchfold & $filelist[$l])
                If StringInStr($filecontents, $searchstr, 1) Then
                    ;found
                    $foundlist[$foundcnt] = $searchfold & $filelist[$l]
                    $foundcnt += 1
                EndIf
            Next
        EndIf
    EndIf
    ReDim $foundlist[$foundcnt]
    Return $foundlist
EndFunc   ;==>grepsearch

I never really did finish it, because I had a hard time parsing huge files and was trying to find the fastest way.... After testing yours, it skips the large files by default, which I haven't found a way to parse out a large file fast.  The only method I've seen on the forum is reading the files in chunks with either:  FileRead or _WinAPI_ReadFile.  But I do see that in your program you can specify the max file size, very nice!

Edited by TouchOdeath
Link to comment
Share on other sites

I expressed myself badly.

What I propose would not list files of name:

* old*.au3            (for example:   StringFinder_v1.2.3_old1.au3 in the "Backup" directory created by Scite.)

This feature cannot be added to the list contained in "_FileExtCheck".
I'm wrong?

I'm not always in my opinion...

Link to comment
Share on other sites

  • 3 weeks later...

Replacing this line:

If _ScriptIsAlreadyRunning() Then Exit MsgBox ( 262144+16, 'Exiting', $sSoftTitle & ' is Already Running !', 4 )

with this:

If _ScriptIsAlreadyRunning() Then Exit WinSetState("StringFinder v 1.2.3",'',@SW_SHOWNORMAL)

because having a message box telling you your stupid is annoying and a waste of time.

Thanks to share this profound reflection.;)

AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

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

×
×
  • Create New...