Avatar billede carpediem Nybegynder
24. april 2002 - 18:04 Der er 16 kommentarer og
1 løsning

InStr

Jeg skal tjekke om en sterng indeholder flere ord. Disse komme ikke nødvendigvis i rækkefølge.

Eks.:
Indeholder strengen: "Dette er en test streng"
både: "er" og "test"

Hvordan laver jeg nemmest det tjek?
Avatar billede medions Nybegynder
24. april 2002 - 18:07 #1
If InStr(1, Text1.Text, "God") Then
    MsgBox "Det fantes"
Else
    MsgBox "Nope"
End If

//>Rune
Avatar billede medions Nybegynder
24. april 2002 - 18:08 #2
Ups.. det var Visual Basic..! -nu leder den efter ordet gode!

If InStr(1, "Hejsa min gode mand, "gode") Then
    MsgBox "Det fantes"
Else
    MsgBox "Nope"
End If

//>Rune
Avatar billede burningice Nybegynder
24. april 2002 - 18:08 #3
myArray = Split(strStreng," ")

For i = 0 to UBound(myArray)
    If UCase(myArray(i)) = UCase("er") Or UCase(myArray(i)) = UCase("test") Then
        'Ordet blev fundet
        Exit For
    End If
Next
Avatar billede medions Nybegynder
24. april 2002 - 18:10 #4
DOH.. sorry ;-)

If InStr(1, "Hejsa min gode mand", "gode") Then
    MsgBox "Det fantes"
Else
    MsgBox "Nope"
End If

//>Rune
Avatar billede medions Nybegynder
24. april 2002 - 18:12 #5
For satan da...! *G* Well, MsgBox findes jo ikke i ASP..! så brug denne:
streng = "Hejsa min gode mand"
If InStr(1, streng, "gode") Then
    Response.Write("Det fantes")
Else
    Response.Write("Nope")
End If

//>Rune
Avatar billede burningice Nybegynder
24. april 2002 - 18:13 #6
medions>> hvad nu hvis du nu ender med denne streng

strStreng = "iih, du godeste..."

If InStr(1, strString, "gode") Then
    MsgBox "Det fantes"
Else
    MsgBox "Nope"
End If

den vil finde GODEste, selvom selve ordet ikke findes
Avatar billede medions Nybegynder
24. april 2002 - 18:14 #7
Well, du skriver oxo MsgBox, så din er jo heller ikke rigtig ;-)

//>Rune
Avatar billede burningice Nybegynder
24. april 2002 - 18:18 #8
Det var da utroligt som du roder rundt...

arrString = Split(strString," ")
arrSearch = Split(strSearch,",")

For i = 0 to UBound(arrString)
    For s = 0 to UBound(arrSearch)
        If UCase(arrString(i)) = UCase(arrSearch(s)) Then
            bolFound = True           
            Exit For
        End If
    Next
    If bolFound = True Then
        Exit For
    End If
Next

If bolFound = True Then
    'Ord Fundet
Else
    'Ord ikke fundet
End If
Avatar billede burningice Nybegynder
24. april 2002 - 18:19 #9
medions>> jeg kopiere jo bare din... :P og der er ikke noget i vejen for at bruge MsgBox så længe koden bare bliver udført på klienten ;)
Avatar billede burningice Nybegynder
24. april 2002 - 18:22 #10
og at sige den ikke findes i asp er da også noget rod... asp er jo ikke noget programmeringssprog... ovenstående kode jeg har lavet er VBScript som for det meste er default sprog på en IIS webserver. Af andre sprog man kan bruge kan nævnes JScript og Perl.
Avatar billede medions Nybegynder
24. april 2002 - 18:25 #11
cyberfessor>> Det med kopieringen er bare ok..! -men det med at man kan bruge MsgBox Serversided, -som altså jeg har skrevet det, er umuligt! -så nej, det var ikke noget rod jeg skrev!

//>Rune
Avatar billede burningice Nybegynder
24. april 2002 - 18:35 #12
at sige msgbox ikke findes i asp er noget rod... asp er ikke noget sprog. msgbox findes i VBScript, men kan ikke bruges når det afvikles serverside.. men man kan lave den her istedet

strStreng = "iih, du godeste..."
Response.Write "<script language=""VBScript"">"

If InStr(1, strString, "gode") Then
    Response.Write "MsgBox(""Det fandtes"")"
Else
    Response.Write "MsgBox(""Nope"")"
End If

Response.Write "</script>"
Avatar billede vexed Nybegynder
25. april 2002 - 09:46 #13
Prøv evt. med Regular Expressions. Dette er generelt et stærkere værktøj, så snart dine tekstsøgninger bliver bare en smule specielle.


searchString = "Dette er en test med flere ord"
   
Set regEx = New RegExp 
regEx.Pattern = "test|flere|ord"
regEx.IgnoreCase = True  ' Ikke case sensetiv
regEx.Global = True  ' Søg i hele strengen
 
Set Matches = regEx.Execute(searchString)  ' Lav søgning
 
'Sammensæt resultat
For Each Match in Matches
      result = result & "Ord fundet på position "
      result = result & Match.FirstIndex & ". """
      result = result & Match.Value & """<br>"
Next
response.write result



Tjek evt. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vspropattern.asp
for hjælp til at sammensætte dit eget søgemønster.
Avatar billede carpediem Nybegynder
25. april 2002 - 10:55 #14
Lige umiddelbart ser der ud til, at alle ovenstående er "eller" sætninger. Altså - at bare et af ordene er i strengen, så er det fint. Det jeg har brug for, er en funktion, der tester på, om ALLE ordene er i strengen.
Avatar billede carpediem Nybegynder
22. maj 2002 - 09:53 #15
Jeg lavede en funktion til det.

Function Soegning(SoegI, Soegetekst)
    If LEFT(Soegetekst, 1) = "[" AND RIGHT(Soegetekst, 1) = "]" Then
        TempSoegetekst = LEFT(Soegetekst, LEN(Soegetekst)-1)
        TempSoegetekst = RIGHT(TempSoegetekst, LEN(TempSoegetekst)-1)
        If InStr(1, LCase(SoegI), TempSoegetekst) Then
            boolResultat = True
        End If
    Else
        TempSoegetekst = Soegetekst
        If InStr(1, TempSoegetekst, " ") Then
            intSoegeord = 0
            Do Until InStr(1, TempSoegetekst, " ") <= 0
                If boolTempResultat = True OR intSoegeord  <= 0 Then
                    If InStr(1, LCase(SoegI), LEFT(TempSoegetekst, InStr(1, TempSoegetekst, " ")-1)) Then
                        boolTempResultat = True
                    Else
                        boolTempResultat = False
                    End If
                End If
                TempSoegetekst = RIGHT(TempSoegetekst, LEN(TempSoegetekst)-InStr(1, TempSoegetekst, " "))
                intSoegeord = intSoegeord + 1
            Loop
            If boolTempResultat = True OR intSoegeord <= 0 Then
                If InStr(1, LCase(SoegI), TempSoegetekst) Then
                    boolTempResultat = True
                Else
                    boolTempResultat = False
                End If
            End If
            If boolTempResultat = True Then
                boolResultat = True
            End If
        Else
            If InStr(1, LCase(SoegI), Soegetekst) Then
                boolResultat = True
            End If
        End If
    End If
    soegning = boolResultat
End Function
Avatar billede medions Nybegynder
22. maj 2002 - 12:11 #16
??? hvad er det lige du laver??? -Det spørgsmålet gik ud på var:

Jeg skal tjekke om en sterng indeholder flere ord. Disse komme ikke nødvendigvis i rækkefølge.

Eks.:
Indeholder strengen: "Dette er en test streng"
både: "er" og "test"

og det er nøjagtig det jeg svarede på...! Og at du så pludselig ligger mere oven i spørgsmålet, kan jeg sq da ik' tage mig af! - så tag lige og overvej en gang til om hvem der skal ha' pointsne!

//>Rune
Avatar billede carpediem Nybegynder
22. maj 2002 - 12:29 #17
Rune>> Hvorhenne er det du svarer brugbart på spørgsmålet. Så vidt jeg kan se opfylder dine svar ikke mine krav. I alt det du skriver her tester du jo kun på et af ordene. Du tester ikke nogle steder på om BÅDE "er" OG "test" er i den streng som jeg gennemsøger. Så jeg kan sq da ikke gøre for at du ikke har læst spørgsmålet.
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