Avatar billede krogstrup Nybegynder
14. december 2001 - 16:15 Der er 9 kommentarer og
2 løsninger

Tælle forekomsten af en string i en variabel ?!?

Hvordan tæller jeg nemmest hvor mange gange tegnet # forekommer i en varialel ?

F.eks.:

searchFor = \"#\"
searchIn = \"Hej # dette er # en # test # !\"

kode der tæller...

searchResult = 4
Avatar billede bernhof Nybegynder
14. december 2001 - 16:43 #1
Jeg har lavet en funktion, som kan det du beder om:


Public Function Forekomst(searchIn, searchFor) As Integer
    Dim intResult As Integer, intNextPos As Integer, intTemp As Integer
   
    Forekomst = 0
    intNextPos = 1
   
    If Len(searchIn) = 0 Then Exit Function
   
lblRetry:
   
    \'Hvis vi har nået slutningen af strengen, afslut:
    If intNextPos > Len(searchIn) Then Exit Function
   
    \'Find den næste forekomst:
    intTemp = InStr(intNextPos, searchIn, searchFor)
   
    \'Hvis der ikke bliver fundet noget, afslut:
    If intTemp = 0 Then Exit Function
   
    \'Hvis der bliver fundet noget, forøg forekomst med 1:
    If intTemp > intNextPos Then
        Forekomst = Forekomst + 1
        intNextPos = intTemp + 1
    End If

GoTo lblRetry

End Function


Denne funktion kan du fx bruge på denne måde:


Private Sub Command1_Click()
    \'Denne MsgBox skulle gerne vise 4.
    MsgBox Forekomst(\"Hej # dette # er # en # test\", \"#\")
End Sub
Avatar billede bernhof Nybegynder
14. december 2001 - 16:45 #2
Altså syntaksen er:

variabel = Forekomst([I hvilken streng du vil søge] , [hvad du vil søge efter])
Avatar billede Slettet bruger
14. december 2001 - 16:52 #3
    searchFor = \"#\"
    searchIn = \"Hej # dette er # en # test # !\"
    result = 0
    temp = 1
   
    Do While Not temp = 0
   
        temp = InStr((temp + 1), searchIn, searchFor)
       
        If Temp > 0 Then
            result = result + 1
        End If
   
    loop
   
    Response.Write(result)
Avatar billede Slettet bruger
14. december 2001 - 16:53 #4
Ovenstående = Svar
Avatar billede bernhof Nybegynder
14. december 2001 - 16:55 #5
En lidt simplere funktion er følgende:


Public Function Forekomst(searchIn, searchFor) As Integer
   
    Dim strCheck As String
   
    \'Fjern indholdet af searchFor fra searchIn
    \'og gem det i strCheck:
    strCheck = Replace(searchIn, searchFor, \"\")
   
    \'Træk længden af strCheck fra længden af searchIn
    \'så får du forskellen, som divideres med længden
    \'af searchFor. Hermed opnår du antallet af gange
    \'searchFor optræder i searchIn:
    Forekomst = (Len(searchIn) - Len(strCheck)) / Len(searchFor)
   
End Function



Denne funktion kaldes på samme måde, som den jeg skrev før!
Avatar billede bernhof Nybegynder
14. december 2001 - 16:56 #6
Rettelse:

\'Fjern indholdet af searchFor fra searchIn
\'og gem det i strCheck:

skulle være:

\'Fjern indholdet af searchFor fra searchIn
\'og gem det resterende i strCheck:
Avatar billede Slettet bruger
14. december 2001 - 16:56 #7
Kunne gøres kortere:

    searchFor = \"#\"
    searchIn = \"Hej # dette er # en # test # !\"
    result = 0
    temp = 1
   
    Do While Not temp = 0   
        temp = InStr((temp + 1), searchIn, searchFor)
        result = result + 1   
    loop

    result = result - 1
   
    Response.Write(result)
Avatar billede bernhof Nybegynder
14. december 2001 - 16:58 #8
(hehe -- shit -- jeg så ikke lige at det var i ASP-kategorien! Sorry :)
Avatar billede bernhof Nybegynder
14. december 2001 - 17:00 #9
Dette er den korteste metode jeg kan komme på:


strCheck = Replace(searchIn, searchFor, \"\")
intResult = (Len(searchIn) - Len(strCheck)) / Len(searchFor)

Response.Write intResult
Avatar billede krogstrup Nybegynder
14. december 2001 - 17:22 #10
Jeg takker for hjælpen :-)
Avatar billede Slettet bruger
17. december 2001 - 00:32 #11
mikbj: undrede mig osse over \"dim as integer\" - det er da vist kun i VB den går?
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