wakillon Posted October 14, 2015 Share Posted October 14, 2015 (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 ?StringFinder replace my old TinyAu3FilesSearch utility and will be added to the next version of SciTE HopperUnlike to TinyAu3FileSearch, you can search strings in any "Text" files.Source and compiled Version are available in the Download Section.Enjoy ! Edited October 14, 2015 by wakillon Digisoul and UEZ 2 AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts Link to comment Share on other sites More sharing options...
TouchOdeath Posted October 14, 2015 Share Posted October 14, 2015 (edited) Wow.. this is way cooler than the one I wrote, Bravo!!! 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 EndIfLooks 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:expandcollapse popupFunc 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 ;==>grepsearchI 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 October 14, 2015 by TouchOdeath Link to comment Share on other sites More sharing options...
wakillon Posted October 15, 2015 Author Share Posted October 15, 2015 Glad you like it Thanks. AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts Link to comment Share on other sites More sharing options...
MimiOne Posted October 15, 2015 Share Posted October 15, 2015 Excellent!Suggestion: Add a field to exclude certain files from the search result (for example: " *old*.au3 " to not list the backups).Kind regardsM.C. I'm not always in my opinion... Link to comment Share on other sites More sharing options...
wakillon Posted October 15, 2015 Author Share Posted October 15, 2015 Excellent!Suggestion: Add a field to exclude certain files from the search result (for example: " *old*.au3 " to not list the backups).Kind regardsM.C.You can add it manually in the "_FileExtCheck" function Thanks. AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts Link to comment Share on other sites More sharing options...
MimiOne Posted October 16, 2015 Share Posted October 16, 2015 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 More sharing options...
wakillon Posted October 16, 2015 Author Share Posted October 16, 2015 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.0 - WIN 8.1 X64 - Other Example Scripts Link to comment Share on other sites More sharing options...
MimiOne Posted October 16, 2015 Share Posted October 16, 2015 OK....http://www.prgrep.com/ I'm not always in my opinion... Link to comment Share on other sites More sharing options...
wakillon Posted October 16, 2015 Author Share Posted October 16, 2015 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.0 - WIN 8.1 X64 - Other Example Scripts Link to comment Share on other sites More sharing options...
TouchOdeath Posted November 3, 2015 Share Posted November 3, 2015 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. Link to comment Share on other sites More sharing options...
wakillon Posted November 3, 2015 Author Share Posted November 3, 2015 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. TouchOdeath 1 AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now