Avatar billede netrnger Nybegynder
20. juli 2001 - 10:57 Der er 13 kommentarer og
1 løsning

Bevare oprindelig case i en replace (måske regulær udtryk?)

Jeg skal bruge en funktion der kan highlighte nogle ord i en tekststreng, og når man søger skal den være ligeglad med store og små bogstaver. Dette er nu nemt nok at lave, og det har jeg løst på flg. måde:

  streng = \"Her var Erik\"
  soeg = \"er\"
  response.write replace(streng,soeg,\"<b>\" & soeg & \"</b>\",1,-1,1)

Dette vil udskrive \"H<b>er</b> var <b>er</b>ik\", hvilket resulterer i at Erik kommer til at stå med lille \"e\" fordi det var det man søgte på.
Jeg vil gerne benytte den case der er brugt i den originale streng, så slutsætningen jeg får bliver til \"H<b>er</b> var <b>Er</b>ik\".

Kan dette lade sig gøre? Jeg har en formodning om at det kan laves med noget regulær udtryk, men det fatter jeg nada af. Men det kan jo også være der er andre smarte løsninger - håber i kan hjælpe...
Avatar billede dodger Nybegynder
20. juli 2001 - 14:31 #1
Du kunne tage at gøre således...

  streng = \"Her var Erik\"
  streng = replace(streng,\"er\",\"<b>\" & soeg & \"</b>\",1,-1,0)
  streng = replace(streng,\"Er\",\"<b>\" & soeg & \"</b>\",1,-1,0)
  streng = replace(streng,\"eR\",\"<b>\" & soeg & \"</b>\",1,-1,0)
  streng = replace(streng,\"ER\",\"<b>\" & soeg & \"</b>\",1,-1,0)
  response.write streng

Lidt groft, men det burde virke...

Avatar billede dodger Nybegynder
20. juli 2001 - 14:33 #2
men hvis du har lange variable søge ord, så er det nok ikke løsningen... :o)
Avatar billede netrnger Nybegynder
20. juli 2001 - 14:43 #3
ja det er jo meningen at søgestrengen er variabel, det er jo mest normalt når man har søgefelter... så nej, den løsning holder ikke. ordet \"er\" er jo bare for illustrere problemet...
Avatar billede dodger Nybegynder
20. juli 2001 - 14:44 #4
Ellers må du gøre sådan her...

  streng = \"Her var Erik\"
  soeg = \"er\"
  pos = inStr(streng, soeg, 1)
  while pos > 0
    res = left(streng, pos) & \"<b> & mid(streng, pos, len(soeg)) & \"</b>\"
    streng = rigth(streng, pos + len(soeg))
    pos = inStr(streng, soeg, 1)
  wend
  response.write res

Jeg har ikke testet det, men noget i den stil burde virke...
Avatar billede Slettet bruger
20. juli 2001 - 14:45 #5
lytter med
Avatar billede dodger Nybegynder
20. juli 2001 - 14:50 #6
rettet en smule:...

  streng = \"Her var Erik\"
  soeg = \"er\"
  pos = inStr(streng, soeg, 1)
  res = \"\"
  while pos > 0
    res = res & left(streng, pos) & \"<b> & mid(streng, pos, len(soeg)) & \"</b>\"
    streng = rigth(streng, pos + len(soeg))
    pos = inStr(streng, soeg, 1)
  wend
  res = res & streng
  response.write res


Avatar billede netrnger Nybegynder
20. juli 2001 - 15:12 #7
Jeg tror nok lige du skal teste lidt mere.
InStr kalder du forkert - det skal være inStr(1, streng, soeg), og resultatet der kommer ud af det hele, ligner _slet_ ikke den originale sætning:

He<b>er</b>Erik
Avatar billede dodger Nybegynder
20. juli 2001 - 15:32 #8
Det er valgfrit om man vil have start position på InStr som første parameter.
Og hvis du gerne vil have det kan jeg godt teste den igennem...
Avatar billede dodger Nybegynder
20. juli 2001 - 15:41 #9
Her er den (testet):

  streng = \"Her var Erik\"
  soeg = \"er\"
  pos = inStr(1, streng, soeg, 1)
  res = \"\"
  while pos > 0
    res = res & left(streng, pos-1) & \"<b>\" & mid(streng, pos, len(soeg)) & \"</b>\"
    streng = right(streng, len(streng) - pos-1)
    pos = inStr(1, streng, soeg, 1)
  wend
  res = res & streng
  response.write res
Avatar billede dodger Nybegynder
20. juli 2001 - 16:10 #10
Tjaa... ovenstående virker fint med \"er\", men med andre ord går det galt... Prøv dette i stedet

  streng = \"Her var Erik\"
  soeg = \"her\"
  pos = inStr(1, streng, soeg, 1)
  res = \"\"
  while pos > 0
    res = res & left(streng, pos-1) & \"<b>\" & mid(streng, pos, len(soeg)) & \"</b>\"
    streng = right(streng, len(streng) - pos - Len(soeg) +1)
    pos = inStr(1, streng, soeg, 1)
  wend
  res = res & streng
  response.write res
Avatar billede netrnger Nybegynder
23. juli 2001 - 10:07 #11
For fedt...

lidt kryptisk funktion, men den virker, og det er det som giver dig pointene... tak for det :o)
Avatar billede dodger Nybegynder
23. juli 2001 - 11:24 #12
For en god ordens skyld bør du nok tjekke om len(soeg) > 0 inden du kalder funktionen, da du ellers går i uendelig løkke ... :o) (tror jeg)
Avatar billede dodger Nybegynder
23. juli 2001 - 11:26 #13
tjaa.. det kommer an på hvad inStr(1,\"Her er Erik\",\"\",1) returnere, men det er nok en god ide at være på den sikre side
Avatar billede netrnger Nybegynder
24. juli 2001 - 13:33 #14
Ja det har du ret i. Hvis Len(soeg) = 0, så kommer funktionen til at lave monotont fabriksarbejde, så det er en god ide at checke for den, det har du ret i. Takker...
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