[Back to FINDREPL SWAG index] [Back to Main SWAG index] [Original]
{
*****************************************************************************
FUNCTION SEARCH_IT ( FINDME, SEARCHME : String; SENSITY : Boolean ) : Boolean;
Returns TRUE, if FINDME is positioned in SEARCHME as requested
Examples : SEARCHME = 'Hello, my name is Toby Schroedel'
FINDME RESULT EXPLANATION
-----------------------------------------------------------------
my name FALSE SEARCHME <> FINDME
..my name.. TRUE "my name" should be somewhere in SEARCHME
/..my name.. FALSE "my name" should NOT be in SEARCHME
..Schroedel TRUE SEARCHME should end with "Schroedel"
/..Computer TRUE SEARCHME should NOT end with "Computer"
Hello.. TRUE SEARCHME should start with "Hello"
/Hello.. FALSE SEARCHME should NOT start with "Hello"
..a..;..x.. TRUE SEARCHME should contain "a" OR "x"
..a..;/..x.. TRUE SEARCHME should contain "a" OR NOT contain "x"
>LMN FALSE SEARCHME is "before" LMN in alphabetical order
<LMN TRUE SEARCHME is "after" LMN in alphabetical order
= FALSE SEARCHME should be empty (or SPACES only !)
*****************************************************************************
Have fun ! Toby Schroedel
}
Function Up(strn:string):String;
var
i : Byte;
te : String;
Begin;
te:='';
if length(strn)>0 then Begin;
for i:=1 to length(strn) do Begin;
te:=te+upcase(strn[i]);
{German Umlaut}
case strn[i] of
'' : te[i]:='';
'' : te[i]:='™';
'' : te[i]:='';
End;
End;
End;
Up:=te;
End;
Function TrimL(strn : string) : string;
var
st : string;
begin
move(strn,st,length(strn)+1);
st := strn;
while (length(st) > 0) and (st[1] = ' ') do delete(st, 1, 1);
TrimL := st;
end;
Function TrimR(strn : string) : string;
var
l : Integer;
st : string;
begin
l := length(strn);
move(strn,st,l+1);
st[0] := '*';
while st[l] = ' ' do dec(l);
st[0] := chr(l);
TrimR := st;
end;
Function Trim(strn:String) : String;
Begin;
Trim:=Triml(trimr(Strn));
end;
Function Search_it(FindMe, SearchMe : String; Sensity : Boolean) : Boolean;
Var
Gefunden : Boolean;
SStat : Byte;
Lauf, Durchlauf : Byte;
GanzString : String;
Begin;
Gefunden:=TRUE;
If Trim(FindMe) <> '' then Begin;
{How many OR ?}
FindMe:=TrimR( FindMe );
Durchlauf :=1;
For Lauf := 1 To Length( FindMe ) Do If FindMe[ Lauf ] = ';' Then Inc( DurchLauf );
FindMe:=TrimR( FindMe );
GanzString := FindMe;
Gefunden:=FALSE;
For Lauf := 1 To DurchLauf Do begin;
If Gefunden = FALSE Then Begin;
Gefunden := TRUE;
If Pos( ';', GanzString) > 0 Then Begin;
FindMe := Trim( Copy( GanzString, 1, Pos( ';', GanzString) - 1 ));
Delete( GanzString, 1, Pos( ';', GanzString ));
End Else Begin
FindMe := GanzString;
End;
sstat := 0;
FindMe := TrimR( FindMe );
SearchMe := TrimR( SearchMe );
{*** Use this if you need case sensity search
If sensity = FALSE Then Begin;
searchme := Up( searchme );
Findme := Up( findme );
End;
}
{Check for .. < or / or /.. etc and extract search string}
if pos( '/', findme ) = 1 Then Begin;
{Oposite ?}
findme := copy( findme, 2, length( findme ) - 1);
sstat := sstat+4;
End;
If pos( '..', findme) > 0 Then Begin;
{x.. or ..x or ..x..}
If pos( '..', findme) = 1 Then Begin;
{..x or ..x..}
findme:=copy(findme,3,length(findme)-2);
sstat:=sstat+1;
End;
if pos('..',findme)>1 then Begin;
{..x.. or x..}
findme:=copy(findme,1,length(findme)-2);
sstat:=sstat+2;
End;
End;
{= equals EMPTY}
if findme='=' then findme:='';
if ((pos('>',findme)=1) or (pos('<',findme)=1)) then Begin;
{ > or < }
if sstat=0 then Begin;
if pos('>',findme)=1 then Begin;
sstat:=sstat+9;
findme:=copy(findme,2,length(findme)-1);
end else begin
sstat:=sstat+10;
findme:=copy(findme,2,length(findme)-1);
End;
if pos('=',findme)=1 then Begin;
{>= or <=}
sstat:=sstat+2;
findme:=copy(findme,2,length(findme)-1);
End;
End;
End;
if sstat=4 then sstat:=8;
if sstat=0 then sstat:=4;
If ((Sstat>=9) and (Sstat<=12)) then begin;
if searchme='' then Gefunden:=FALSE;
End;
case sstat of
1 : if ((pos(findme,searchme)<>length(searchme)-length(findme)+1)
or (pos(findme,searchme)=0)) then gefunden:=FALSE;{1 ..x}
2 : if pos(findme,searchme)<>1 then gefunden:=FALSE;{2 x..}
3 : if pos(findme,searchme)=0 then gefunden:=FALSE;{3 ..x..}
4 : if findme<>searchme then gefunden:=FALSE;{4 x}
5 : if pos(findme,searchme)=length(searchme)-length(findme)+1
then gefunden:=FALSE;{5 /..x}
6 : if pos(findme,searchme)=1 then gefunden:=FALSE;{6 /x..}
7 : if pos(findme,searchme)<>0 then gefunden:=FALSE;{7 /..x..}
8 : if findme=searchme then gefunden:=FALSE;{8 /x}
9 : if searchme<=findme then gefunden:=FALSE;{9 >x}
10 : if searchme>=findme then gefunden:=FALSE;{10 <x}
11 : if searchme<findme then gefunden:=FALSE;{11 >=x}
12 : if searchme>findme then gefunden:=FALSE;{12 <=x}
End;
End;
End;
Search_It:=Gefunden;
End;
[Back to FINDREPL SWAG index] [Back to Main SWAG index] [Original]