Wow,

werde es in .NET umsetzen. Ist genau das was ich brauche. Das spart mir einen Haufen Zeit.

Vielen Dank daf�r Claudius !!

----- Original Message ----- From: "Claudius Ceteras" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, May 27, 2005 5:32 PM
Subject: RE: [Asp.net] Pseudo-Volltextsuche


> leider hab ich dazu gar nichts gefunden und w�re froh wenn
> ich mir einen
> Teil der "Handarbeit" ersparen k�nnte.

Ich hab irgendwo sowas noch in classic ASP rumliegen... W�rde
das helfen?


Ob gew�nscht oder nicht... Ich hab's jetzt gefunden und poste es... :-)

Features: AND OR NOT "text zitat" (Klammerung)
Beispiel: (IE AND NOT "Internet Explorer") OR something OR "whatever you
like"

Zus�tzlich kann ein Standardoperator angegeben werden....
Damit man weiss ob folgendes: Alpha Omega
Alpha OR Omega
Oder
Alpha AND Omega
bedeutet...

Achja... Die Felder in denen gesuch werden soll kann man nat�rlich auch
angeben...

So... Here we go....

===================================================

<% option explicit %>
<%
 dim fields
 fields = split("firstname,lastname,CV",",")

 dim res
 res = parse(Request("searchStr"),fields,"AND")
%>
<html><body>
<form method="POST">
 <input name="searchStr" value="<%=Server.HTMLEncode( Request("searchStr")
)%>">
 <input type=submit>
</form>
<b>SELECT * FROM table WHERE</b> <%=res%>
</body></html>

<%
function parse(ByVal searchString,fields,defaultOperator)
 dim tokens,i,inString,char,tok,where,wasStr
 searchString = searchString & " "
 tokens = Array()
 inString=false
 tok = ""
 for i = 1 to len(searchString)
   char = mid(searchString,i,1)

   select case char
   case """"
     inString = not inString
     if (tok<>"") then tokens=arrayAdd(tokens,tok,not inString) : tok = ""
   case "(",")"
       if not inString then
         if (tok<>"") then tokens=arrayAdd(tokens,tok,false) : tok = ""
         tokens = arrayAdd(tokens,char,false)
       else
         tok = tok & char
       end if
   case else
         if inString or char<>" " then
           tok = tok & char
         else
           if tok<>"" then tokens=arrayAdd(tokens,tok,false) : tok = ""
         end if
   end select
 next

 where="" : wasStr = false
 for each tok in tokens
   select case tok
     case "(",")","AND","OR","NOT"
       where = where & " " & tok & " "
       wasStr = false
     case else
       if wasStr then where = where & " " & defaultOperator & " "

       where = where & " (" & join(fields," LIKE " & tok & " OR ") & " LIKE
" & tok & ") "

       wasStr = true
   end select
 next
 parse = where
end function

function arrayAdd(arr,ByVal str,isString)
 dim newArr()
 dim i
 redim newArr(ubound(arr)+1)
 for i = 0 to ubound(arr)
   newArr(i) = arr(i)
 next

 if not isString and (ucase(str)="AND" or ucase(str)="OR" _
         or ucase(str)="NOT" or str="(" or str=")") then
   str = ucase(str)
 else
   str = "'%" & replace(str,"'","''") & "%'"
 end if

 newArr(ubound(newArr)) = str
 arrayAdd = newArr
end function
%>



Gruss,

Claudius

_______________________________________________
Asp.net Mailingliste, Postings senden an:
[email protected]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net


_______________________________________________
Asp.net Mailingliste, Postings senden an:
[email protected]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net

Antwort per Email an