BBS: Inland Empire Archive Date: 01-17-93 (01:17) Number: 340 From: DIK COATES Refer#: NONE To: TOM CARROLL Recvd: NO Subj: Supp- Str Search 2/2 Conf: (2) Quik_Bas
>>>> QUOTING Dik Coates to Tom Carroll <<<<
Continued from previous message...
Copyright 1993 by R.A. Coates, free to use commercially with
acknowledgement, free for all other use.
FUNCTION SEARCHASC& (findstr$, mainstr$)
searchchr% = ASC(LETFREQ$(findstr$, ptr%))
strlen1% = LEN(mainstr$)
strlen2% = LEN(findstr$)
PRINT "Procedure SEARCHASC& Level Code"
PRINT "*******************************"
PRINT "The least frequent character to search for is: "; searchchr%
PRINT "The offset to the least frequent character is: "; ptr%
PRINT "The Length of the string to search is: "; strlen1%
optr% = ptr% - 1
timer1 = TIMER
DO
LOOP WHILE timer1 = TIMER
timer1 = TIMER
IF ptr% THEN
FOR c% = ptr% TO strlen1%
chr1% = ASC(MID$(mainstr$, c%, 1))
IF searchchr% = chr1% THEN
IF MID$(mainstr$, c% - optr%, strlen2%) = findstr$ THEN
SEARCHASC& = c% - optr%
PRINT "Elapsed time using ASC is: "; TIMER - timer1
PRINT
EXIT FUNCTION
END IF
END IF
NEXT c%
END IF
PRINT
END FUNCTION
FUNCTION SEARCHSTR& (findstr$, mainstr$)
searchchr$ = LETFREQ$(findstr$, ptr%)
strlen1% = LEN(mainstr$)
strlen2% = LEN(findstr$)
PRINT "Procedure SEARCHSTR& Level Code"
PRINT "*******************************"
PRINT "The least frequent character to search for is: "; searchchr$
PRINT "The offset to the least frequent character is: "; ptr%
PRINT "The Length of the string to search is: "; strlen1%
optr% = ptr% - 1
timer1 = TIMER
DO
LOOP WHILE timer1 = TIMER
timer1 = TIMER
IF ptr% THEN
FOR c% = ptr% TO strlen1%
chr1$ = MID$(mainstr$, c%, 1)
IF searchchr$ = chr1$ THEN
IF MID$(mainstr$, c% - optr%, strlen2%) = findstr$ THEN
SEARCHSTR& = c% - optr%
PRINT "Elapsed time using CHR$ is: "; TIMER - timer1
PRINT
EXIT FUNCTION
END IF
END IF
NEXT c%
END IF
PRINT
END FUNCTION
Using the ASC approach is about 15% faster than using CHR$ values.
You can tighten the code up if you want/can... The print statements
are for information only as part of the demo from the main body.
I haven't looked at string searches in BAS... and there may be a
faster method of looping through... maybe using INSTR is faster...
have routines in ASM as part of my library that I use... but have
only used a search a couple of times in the last 5-10 years...
Ho Hum...
Regards Dik
... WINDOZE...better than Valium and not habit forming!
___ Blue Wave/QWK v2.10
--- Maximus 2.00
* Origin: Durham Systems (ONLINE!) (1:229/110)

Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET