Avatar billede finnwikke Nybegynder
22. november 2001 - 20:44 Der er 2 kommentarer

Søgemaskine i c++

Er der nogen som kan hjælpe mig med følgende:

Kildekoder til bygning af en søgemaskine på www på unixserver.Har nogen et materiale eller kan anvise steder, hvor det kan hentes.
Det haster og jeg venter spændt.
Mange hilsner
Finn Wikke
Avatar billede powerbart Nybegynder
23. november 2001 - 00:30 #1
Her har du en maskine der søger på filnavne ....
Hvis du gerne vil ændre det til, at man søger på indeholdet, så kan du bare ændre \'grep --parameterne\'

----------------------------------------------------
open Mosmlcgi;

fun valid(c) = (ord(c) <= 122 andalso ord(c) >= 97) orelse (ord(c) <= 90 andalso ord(c) >= 65)

fun isValid([]) = true
  | isValid(c::cs) = valid(c) andalso isValid(cs)


fun remAfterP [] = []
  | remAfterP (#\".\"::cs) = []
  | remAfterP (c::cs) = c::remAfterP(cs)
;


fun convertToList ([],out,result) = (rev out) :: result
  | convertToList ((#\"\\n\"::in1),out,result) = convertToList(in1,[],(rev out) :: result)
  | convertToList (i::in1,out,result) = convertToList(in1,i::out,result);

fun toUri ([]) = \"\"
  | toUri (x::xs) =
    let val myX = HelpFun.afterString(\"/home/michaelprivate/1-filer/\",implode(x))
  in
    \"<A HREF=\\\"http://www.godthaab-revyen.dk/zx14q/1-filer/\" ^ myX ^ \"\\\">\" ^ myX ^ \"</A><BR>\" ^ toUri (xs)
end;


fun main () =
let
  val soegOrd = UrlDecode.urldecode(HelpFun.afterString(\"ord=\",implode(HelpFun.beforeC(#\"&\",explode(valOf(Mosmlcgi.cgi_query_string))))));
  val fil = \"/home/michaelprivate/TMP/soeg\" ^ implode(remAfterP(explode(Time.toString(Time.now()))));
  val command = (\"ls /home/michaelprivate/www.zx14q.godthaab-revyen.dk/1-filer/* | grep -i \" ^ soegOrd ^ \" > \" ^
                fil);
 
  val validSoegOrd = isValid(explode soegOrd)
  val ttt = if validSoegOrd then Process.system(command) else Process.success
  val inFile = if validSoegOrd then BackUp.getBackUpFile(fil) else \"\";
  val mainHTML = toUri(convertToList(explode(inFile),[],[]));   
 
  val debug = foldr op^ \"\" (map implode (convertToList(explode(inFile),[],[])));

  val beginHTML = \"Content-type: text/html\\n\\n  <HTML>\" ^
    \"<BODY>Følgende blev fundet:\"

  val HTML = if not(validSoegOrd) then \"<BR><BR>Du har ikke indtastet et valid søgeord ... <BR> Prøv igen\" else if size(inFile) < 10 then \"<BR><p>Der er ingen resultater\" else mainHTML
  val endHTML = \"</FONT></BODY></HTML>\";
in
  print(beginHTML ^
    HTML ^ endHTML)
end
val _ = main ();


----------------------------------------------------

Nu skal du bare oversætte skidtet fra Mosml til C++ .....

Men pointen er (i sovse-stil):
char* søgOrd = URLDecode.decode(query_string);
System(grep søgOrd > enFil);
string uformateretResultat = Åben(enFil);
string pæntResultat =  formater(uformateretResultat);

cout << pæntResulttat << endl;

return 0;

================================================
En URLdecoder til C++, kan du sikkert finde på nettet. Men ellers er der en her (i mosml):

    fun urldecode s =
        let
    val sus = Substring.all s
            val sz = Substring.size sus
            exception Dehex;
            fun dehex(ch) =
                if #\"0\" <= ch andalso ch <= #\"9\"
                    then Char.ord(ch) - Char.ord(#\"0\")
                else if #\"A\" <= ch andalso ch <= #\"F\"
                        then (Char.ord(ch) - Char.ord(#\"A\")) + 10
                    else if #\"a\" <= ch andalso ch <= #\"f\"
                              then (Char.ord(ch) - Char.ord(#\"a\")) + 10
                          else raise Dehex;
            fun decode_one(i) =
                Char.chr(16*dehex(Substring.sub(sus,i+1))+
        dehex(Substring.sub(sus,i+2)));
            fun dec(i) =
                if i>=sz then []
                else case Substring.sub(sus,i)
                      of #\"+\" => #\" \"::dec(i+1)
                        | #\"%\" => decode_one(i)::dec(i+3)
                        | ch => ch::dec(i+1);
        in
            String.implode(dec(0))
        end handle exn => raise Fail (\"decode failed on \" ^ s ^ \"\\n\");


Okay ??
Avatar billede castle Nybegynder
23. november 2001 - 23:41 #2
Hej,

htDig er solid og velafprøvet. Har selv benyttet og tilpasset den nogle år tilbage...

http://www.htdig.org/

/cheers
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester