Avatar billede daniel_d Nybegynder
26. oktober 2002 - 21:15 Der er 10 kommentarer og
1 løsning

function i en løkke ???

Jeg sidder med et problem ang. min index søgemaskine(kører på en accessdb)

Som d r nu leder den efter et keyword. Finder den et viser den et udsnit af teksten. (Som på google), men den viser kun det første keyword i teksten. Jeg ønsker at den udskrev f.eks. første keyword - lede videre efter flere keywords indtil strengen når en max char på omkring 250.

jeg har prøvet at formulere det i pseudokode men ved ikke helt om det er helt korrekt. Men nogen som kan hjælpe mig lidt mere på vej ?

Her er koden!

function FindTextToOutput()

    FindStrKeyword = instr(databasetekst, strKeyword)
    hvorersoegeord = (FindStrKeyword-50)
      if hvorersoegeord < 1 Then
        hvorersoegeord = 1
      End If

End function


dim strkeyword, strOutput, databasetekst

Lav en løkke som læser gennem strengen databasetekst
så længe strKeyword findes i strengen

  kør FindTextToOutput
  skriv strOutput

Løkke slut


Mvh
Daniel...
Avatar billede daniel_d Nybegynder
26. oktober 2002 - 21:16 #1
okay... det hele er ikke pseudokode... :o)
Avatar billede larsen Nybegynder
26. oktober 2002 - 21:48 #2
Skal den fortælle hvormange gange den støder på keywordet eller skal den udskrive fra keyword og x antal tegn frem i strengen for hver gang den støder på det?
Avatar billede daniel_d Nybegynder
27. oktober 2002 - 12:33 #3
Den skal udskrive fra keyword og x antal tegn frem i strengen... Lidt ligesom på google.
Avatar billede eagleeye Praktikant
27. oktober 2002 - 16:20 #4
Jeg har dette som du måske kan bruge....:


searchString =  "en lang streng som der skal søges i "

findThis = "find dette ord"

newString = ""  'Outputtet
antalTegnFE = 50 'Antal tegn før og efter et søgeord
startIndex = instr(1, searchString, findThis)
do while startIndex > 0
  cutFra = 1
  if startIndex > antalTegnFE then
    cutFra = startIndex - antalTegnFE
  end if
  cutTil = len(searchString)
  if len(searchString) > (startIndex + len(findThis) + antalTegnFE) then
    cutTil = startIndex + len(findThis) + antalTegnFE
  end if
  if cutFra > 1 then newString = newString & "..."
  newString = newString & replace(Mid(searchString, cutFra, cutTil-cutFra+1), findThis, "<b>" & findThis & "</b>")
  if cutTil < len(searchString) then newString = newString & "..."
 
  startIndex = instr(cutTil, searchString, findThis)
loop

Response.Write newString
Avatar billede eagleeye Praktikant
27. oktober 2002 - 16:52 #5
jeg har lige lavet koden lidt bedre og du kan ligge det ind i en function sådan her:


function FindTextToOutput(keyword, tekst)

searchString = tekst
findThis = keyword

newString = ""
antalTegnFE = 50 'Antal tegn før og efter et søgeord
lastEnd = 0
isClose = false
startIndex = instr(1, searchString, findThis)
do while startIndex > 0
  cutFra = 1
  if startIndex > antalTegnFE then
    cutFra = startIndex - antalTegnFE
  end if
  if cutFra < lastEnd then
    cutFra = lastEnd+1
    newString = Left(newString,len(newString)-3)
    isClose = true
  end if
 
  cutTil = len(searchString)
  if len(searchString) > (startIndex + len(findThis) + antalTegnFE) then
    cutTil = startIndex + len(findThis) + antalTegnFE
  end if
  lastEnd = cutTil

  if isClose = false then
    if cutFra > 1 then newString = newString & "..."
  end if
  newString = newString & Mid(searchString, cutFra, cutTil-cutFra+1)
  if cutTil < len(searchString) then newString = newString & "..."
 
  isClose = false
  startIndex = instr(startIndex+len(findThis), searchString, findThis)
loop

FindTextToOutput = replace(newString,findThis, "<b>" & findThis & "</b>")
end function




Fra dit loop kalder du den sådan her:

Response.Write FindTextToOutput(strkeyword, databasetekst)
Avatar billede daniel_d Nybegynder
28. oktober 2002 - 09:38 #6
eagleeye> Jeg vil kigge på det, men har desværre ikke tid før i morgen middag.(Tirsdag) - Jeg vender tilbage med svar/point hvis jeg får det til at virke!

Tak.
Avatar billede daniel_d Nybegynder
30. oktober 2002 - 00:19 #7
Det virker helt fint... Hold da op!... Eneste problem. Tror ikke det har noget med funktionen at gøre, men hvis man søger på f.eks. &nbsp; dukker det op i teksten og kan lave en lidt sjov formatering.

Har ikke helt drejet den endnu, men jeg vil i hvert fald sige tak for  hjælpen... Point til dig!
Avatar billede eagleeye Praktikant
31. oktober 2002 - 10:07 #8
Ok... Jeg har så ikke prøvet med &nbsp; og set resulatet.
Jeg ved ikke helt hvad det kan skyldes..

Jeg kan prøve at skrive lidt kommentar til koden, så den er er lidt lettere at læse?
Avatar billede daniel_d Nybegynder
06. november 2002 - 00:17 #9
Sorry jeg først svarer nu, du må gerne kommentere den hvis du gider at gøre det? Måske jeg så kan finde fejlen.

Kan se at jeg vist aldrig fik givet dig point, men de kommer i hvert fald her!
Avatar billede eagleeye Praktikant
06. november 2002 - 16:44 #10
Her er function med lidt kommentar i:


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
Avatar billede eagleeye Praktikant
06. november 2002 - 16:46 #11
how det smuttede 3 linier i på jeg kopiere det ind her... Efter loop skal disse 3 linier med:


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