Avatar billede s1000 Nybegynder
27. juni 2003 - 22:24 Der er 2 kommentarer og
1 løsning

Pænt søgeresultat. Visning af sætninger der indeholder søgeord

Jeg mangler en smart funktion (ASP/VB) til at vise et pænt søgeresultat. Jeg har eksempelvis en lang beskrivelse på en side, men ønsker kun at vise den/de sætninger hvori et givent søgeord optræder.

Faktisk præcis som man ser det på Google.com ved søgning på ordet "eksperten":
http://www.google.com/search?q=eksperten&ie=UTF-8&oe=UTF-8&hl=da&lr=

Jeg antager at en given streng skal behandles lidt med noget opdeling i et array osv. Håber en af jer har en eller anden fiks idé.
Avatar billede medions Nybegynder
27. juni 2003 - 22:37 #1
Der skal du ud og kigge på noget Reg.Exp.!

//>Rune
Avatar billede eagleeye Praktikant
27. juni 2003 - 22:39 #2
Jeg har dette kode som laver det i stil med det som google gør.:



function FindTextToOutput(keyword, tekst)

searchString = tekst  'Indeholder den tekst som man søger i
findThis = keyword    'Indeholder det ord/karaktere man søger efter

newString = ""  'Kommer til at indeholde den "nye" streng
antalTegnFE = 50 'Antal tegn før og efter et søgeord
lastEnd = 0      'Angiver hvor man kopirede til ved sidste søgeord.
isClose = false  'Hvis to ord er indne for (antalTegnFE) tegn af hinanden sættes til true
'Tjek om det man søger efter findes i strengen
startIndex = instr(1, searchString, findThis)
do while startIndex > 0
  cutFra = 1 'Default skal cufFra være 1
  'Hvis søgeordet er fundet efter (antalTegnFE) inden i stregen ændres cutFra
  if startIndex > antalTegnFE then
    cutFra = startIndex - antalTegnFE  'cufFra tager (antalTegnFE) karakter før søgeordet
  end if
  'Hvis søgeordet er fundet tæt på sidste søge ord
  if cutFra < lastEnd then
    cutFra = lastEnd+1 'Kopier fra hvor sidste søgeord sluttede.   
    newString = Left(newString,len(newString)-3) 'Fjern "..." fra newString
    isClose = true 'to søgeord er fundet inden for (antalTegnFE) karakter af hinanden
  end if
 
  cutTil = len(searchString)  'Default kopier til enden af søgestrengen.
  'Hvis der er flere end (antalTegnFE) efter søgeordet så ændre cutTil
  if len(searchString) > (startIndex + len(findThis) + antalTegnFE) then
    'cutTil ændres så der kun kopier + (antalTegnFE) efter søgeordet.
    cutTil = startIndex + len(findThis) + antalTegnFE
  end if
  'Gem hvortil man kopieret
  lastEnd = cutTil
 
  'Hvis to søge ord er længere fra hinanden end (antalTegnFE) så indsæt "..." før teksten
  if isClose = false then
    if cutFra > 1 then newString = newString & "..."
  end if
  'Kopier -(antalTegnFE) karakter & søgeord & +(antalTegnFE) katater til newString
  newString = newString & Mid(searchString, cutFra, cutTil-cutFra+1)
  'Hvis cutTil er mindre en længen på søgestrengen indsætte "..." efter
  if cutTil < len(searchString) then newString = newString & "..."
 
  'Set isClose til default false for at indikere to søgeord er lang fra hinanden
  isClose = false
  'Søg efter næste søgeord
  startIndex = instr(startIndex+len(findThis), searchString, findThis)
loop

'Maker søgeord i newString med fed
FindTextToOutput = replace(newString,findThis, "<b>" & findThis & "</b>")
end function





Og kaldes fra din som her:

findThis = rs("kolonne")
searchString = "findmig"
Response.Write FindTextToOutput(findThis,searchString)
Avatar billede s1000 Nybegynder
28. juni 2003 - 11:14 #3
Damn det var en lang funktion (det frygtede man naturligvis). Jeg takker for hjæælpen, men desværre virker den jo ikke helt som man ønsker idet den tæller antal tegn og ikke ord - funktionen fungerer altså ikke som på f.eks. Google, hvor man jo ikke klipper i ord, men derimod starter og slutter med hele ord.

Anyway thanks.
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