[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]