Login | Register   
RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: Visual Basic
Expertise: Beginner
Aug 6, 1997



How to Help Your Business Become an AI Early Adopter

Scream Through Searches With Byte Arrays

This subroutine shows how byte arrays can speed a search though a file. The routine is called with the file name, a string to look for, a flag that tells it to use a string variable or a byte array and a flag that tells it to look for Unicode or ANSII strings (strings in VB4 EXEs are in Unicode). My test, with ibyte set to true (use byte array) took about six seconds to search though 32-bit WINWORD.EXE. The same file with ibyte set to false (use string variable) ran in about 36 seconds. The file is almost 4 MB.
 Sub Searchfile(sFile As String, sSearch As String, ibyte _ 
As Boolean, iUniCode As Boolean)
	'sFile - file name
	'sSearch - string to search for
	'ibyte - use byte array to search
	'iUniCode - look for UniCode strings
	Dim iHandle As Integer
	Dim sTemp As String
	Dim lSpot As Long
	Dim lFind As Long
	Dim sSearch1 As String
	Dim bTemp() As Byte
	'another advantage of using a byte array
	'is that we can easily look for UniCode strings
	If iUniCode Or (Not ibyte) Then
		'this line will look for unicode strings
		'when using byte arrays, regular 
		'strings when using string variable
		sSearch1 = sSearch
		'this line will look for ANSII strings 
		'when looking through a byte array
		sSearch1 = StrConv(sSearch, vbFromUnicode)
	End If

	iHandle = FreeFile
	Open sFile For Binary Access Read As iHandle
	If iHandle Then
		sTemp = Space$((LOF(iHandle) / 2) + 1)
		ReDim bTemp(LOF(iHandle)) As Byte
		If ibyte Then
			Get #iHandle, , bTemp
			sTemp = bTemp
			Get #iHandle, , sTemp
		End If
		Close iHandle
	End If

	If ibyte Then
		lFind = InStrB(lSpot + 1, sTemp, _
			sSearch1, 1)
		lFind = InStr(lSpot + 1, sTemp, sSearch1, 1)
	End If
	lSpot = lFind
Loop Until lFind = 0
End Sub
MicroHelp Uninstaller
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date