[bmx] Search Files by JoshK [ 1+ years ago ]

Started by BlitzBot, June 29, 2017, 00:28:43

Previous topic - Next topic

BlitzBot

Title : Search Files
Author : JoshK
Posted : 1+ years ago

Description : These functions will do the searches Windows refuses to.

Code :
Code: blitzmax
SuperStrict

Framework brl.filesystem
Import brl.standardio

Local file:String
Local results:String[]

results=SearchFolder(AppDir,"search",["bmx","o"],SEARCH_RECURSIVE)
If results
	For file=EachIn results
		Print file
	Next
EndIf


Const SEARCH_RECURSIVE:Int=1
Const SEARCH_CONTENTS:Int=2
Const SEARCH_CASESENSITIVE:Int=4

Function SearchFolder:String[](path:String,token:String,extensions:String[]=Null,options:Int=SEARCH_RECURSIVE,results:String[]=Null)
	Local dir:String[],ext:String,n:Int,i:Int
	
	dir=LoadDir(path)	
	If Not dir Return results
	
	If Not results results=New String[0]
	
	For n=0 To dir.length-1
		Select FileType(path+"/"+dir[n])
			Case 1
				If extensions
					ext=ExtractExt(dir[n])
					If Not (SEARCH_CASESENSITIVE & options)
						ext=ext.tolower()
					EndIf
					For i=0 To extensions.length-1
						If extensions[i]=ext
							If SearchFile(path+"/"+dir[n],token,options)
								results=results[..results.length+1]
								results[results.length-1]=path+"/"+dir[n]
							EndIf
							Exit
						EndIf
					Next
				Else
					If SearchFile(path+"/"+dir[n],token,options)
						results=results[..results.length+1]
						results[results.length-1]=path+"/"+dir[n]
					EndIf
				EndIf
			Case 2
				If (SEARCH_RECURSIVE & options)
					results=SearchFolder(path+"/"+dir[n],token,extensions,options,results)
				EndIf
				If Not (SEARCH_CONTENTS & options)
					If SearchFile(path+"/"+dir[n],token,options)
						results=results[..results.length+1]
						results[results.length-1]=path+"/"+dir[n]
					EndIf
				EndIf
		EndSelect
	Next
	Return results
EndFunction

Function SearchFile:Int(path:String,token:String,options:Int=0)
	Local stream:TStream,s:String
	
	If Not (SEARCH_CASESENSITIVE & options)
		token=token.tolower()
	EndIf
	If (SEARCH_CONTENTS & options)
		stream=ReadFile(path)
		If Not stream Return False
		While Not stream.Eof()
			s=stream.ReadLine()
			If Not (SEARCH_CASESENSITIVE & options)
				s=s.tolower()
			EndIf
			If s.contains(token)
				stream.close()
				Return True
			EndIf
		Wend
		stream.close()
	Else
		If Not (SEARCH_CASESENSITIVE & options)
			path=path.tolower()
		EndIf
		path=StripDir(path)
		If path.contains(token) Return True
	EndIf
	Return False
EndFunction


Comments : none...

Hardcoal

Things I've done:   https://itch.io/profile/hardcoal  [I keep improving them btw]