Avatar billede weiland Nybegynder
30. marts 2005 - 13:53 Der er 2 kommentarer og
1 løsning

dele ved mellemrum

Denne funktion bruger jeg til at finde et søgeord i en tekststreng og vise ordet i dets sammenhæng. I dette tilfælde ved at vise 50 karakterer før og efter søgeordet.
Men hvordan tilretter jeg funktionen, så den KUN deler ved mellemrum?
Det kan altså godt være, at de 50 karakterer stopper midt i et ord, men funktionen skal tage hele ordet med (eller stoppe før ordet).
Forklarer jeg mig ordentligt?

Function Highlight(TextString, SearchWord)

            startIndex = instr(1, TextString, SearchWord,1) '1-tallet betyder at case er underordnet
            antalTegnFE = 50 'Antal tegn før og efter søgeord
           
            if startIndex > 0 then
              cutFra = 1
                  if startIndex > antalTegnFE then
                    cutFra = startIndex - antalTegnFE
                end if
               
              cutTil = len(TextString)
             
                  if len(TextString) > (startIndex + len(SearchWord) + antalTegnFE) then
                    cutTil = startIndex + len(SearchWord) + antalTegnFE
                end if
               
              if cutFra > 1 then
                  Highlight = Highlight & "..."
              end if

              Highlight = Highlight & ""& Mid(TextString, cutFra, cutTil-cutFra) &""
             
              if cutTil < len(TextString) then
                  Highlight = Highlight & "..."
              end if
             
            end if
           
End Function
Avatar billede fennec Nybegynder
30. marts 2005 - 15:20 #1
Du kan bruge inStr() og inStrRev() til at finde første/sidste mellemrum. Noget i denne stil:

tmp = Mid(TextString, cutFra, cutTil-cutFra)
tmp = left(tmp,len(tmp)-inStrRev(tmp," "))
tmp = right(tmp,len(tmp)-inStr(tmp," "))
Highlight = Highlight & ""& tmp &""

Der mangler bare et tjek for om strengen er helt fra start eller slut, ellers fjernes det første/sidste ord.
Avatar billede weiland Nybegynder
30. marts 2005 - 17:36 #2
Tak for tippet om InStr og InStrRev... jeg lavede det dog lidt anderledes end dit forslag, som vist ikke virkede :-)

Function Highlight(TextString, SearchWord)

            startIndex = instr(1, TextString, SearchWord,1) '1-tallet betyder at case er underordnet

              cutFra = 1
                  if startIndex > 50 then
                    cutFra = startIndex - 50
                end if
               
              cutTil = len(TextString)
             
                  if len(TextString) > (startIndex + len(SearchWord) + 50) then
                    cutTil = startIndex + len(SearchWord) + 50
                end if
               
              if cutFra > 1 then
                  Highlight = Highlight & "..."
              end if
               
            tmp = Mid(TextString, cutFra, cutTil-cutFra)
            tmp = Mid(tmp,1,inStrRev(tmp," "))
            tmp = Mid(tmp,inStr(tmp," "))
            Highlight = Highlight & ""& tmp &""
             
              if cutTil < len(TextString) then
                  Highlight = Highlight & "..."
              end if
           
End Function

Svarer du lige?
Avatar billede fennec Nybegynder
31. marts 2005 - 08:40 #3
Sådan er det når man ikke tester sine script. Mente ellers at inStrRev() returnerede positionen bagfra, men det er åbentbart stadig fra begyndelsen.

.o) <-- One Eyed Jack
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