wakillon

StringFinder v1.2.3

11 posts in this topic

#1 ·  Posted (edited)

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
2 people like this

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

Share this post


Link to post
Share on other sites

#2 ·  Posted (edited)

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

Share this post


Link to post
Share on other sites

Glad you like it ;)

Thanks.

 


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

Share this post


Link to post
Share on other sites

Excellent!
Suggestion: Add a field to exclude certain files from the search result (for example: " *old*.au3 "  to not list the backups).

Kind regards

M.C.

Share this post


Link to post
Share on other sites

Excellent!
Suggestion: Add a field to exclude certain files from the search result (for example: " *old*.au3 "  to not list the backups).

Kind regards

M.C.

You can add it manually in the "_FileExtCheck" function ;)

Thanks.


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

Share this post


Link to post
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?

Share this post


Link to post
Share on other sites

This represents how many files ? several dozen ? several hundred ?

It can also add the risk to exclude files who are not really "backup" files...

So, given the number of files read by second, i do not think it's really usefull.

 


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

Share this post


Link to post
Share on other sites

Do not be disapointed !

Free to you to adapt it to your needs :)

Its just an example.


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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.;)

1 person likes this

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

Share this post


Link to post
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

  • Similar Content

    • dadalt95
      By dadalt95
      Perform a simple google search!
      The script below works fine until fill the google form!
      What I can't find is how to submit the form, tried a couple of ways and none of them worked.

       
      #include <IE.au3> $oIE = _IECreate ("www.google.com") $o_form = _IEFormGetObjByName ($oIE, "f") $o_login = _IEFormElementGetObjByName ($o_form, "q") $username = "80251369" _IEFormElementSetValue ($o_login, $username) $o_numer = _IEGetObjByName($o_form, "btnK") _IEAction ($o_numer, "click")  
      The code runs without any problem.
      I don't know how to proceed!
      Thanks in advance!
    • nacerbaaziz
      By nacerbaaziz
      Hello all
      I have a question please
      I've searched a lot on how to make a GUI for programs designed by Autoit to accepts dragging files from Windows File Explorer
      Unfortunately, however, it failed
      Is there any way to do this?
      Where I am making a audio player and I want to activate the feature of dragging files from Windows Explorer to a program window to play them
      I hope to find a simple solution here in this wonderful forum
      Thank you very much in advance
    • nacerbaaziz
      By nacerbaaziz
      Hi dears
      how are you? I hope You fine
      I have a question please
      I've created a listView
      It has several columns
      Is there any way  to search for text in an element of this list with text in all columns
      for example
      list view with 2 column
      the first is the file name and the second is the file path
      and i want to search for the item witch Containt the name and the path toGether
      I searched a lot but could not find what I was looking for
      If you do not understand the idea that I'm looking for, I can put an example
      Thanks in advance
    • nacerbaaziz
      By nacerbaaziz
      hello dears
      First I would like to apologize to you for my many questions.
      I have a new question if you allow
      I am programming an audio player for blinds
      I had a problem
      I put an option in the folders context menu to Opens the audio files that in the selected folder
      I did not know how to make the Autoit Search the subfolders
      Please provide an example of how to search for  files in the subfolders
      Let's say, for example, MP3 files
      Just give me a simple example and I will try to modify it as appropriate for the program I designing it
      Please help me to find the solution
      Thanks in advance
    • XinYoung
      By XinYoung
      Hello again,
      I'm trying to use the FileMove function to rename a bunch of text files.
      Some of the files have "_1" at the end of their name, for example, "File123_1.txt". I want to remove the "_1" so it would become "File123.txt".
      What I currently have...
              FileMove($sSource & "\*_1.txt", $sDestination & "\*.txt")
      But since I'm using a wildcard, it doesn't appear to be working. I think it's just replacing .txt with .txt. Am I going about this the wrong way? How can I use wildcards and still accomplish this?
      Any help is greatly appreciated ^__^