Avatar billede zeusdk Nybegynder
17. marts 2003 - 15:36 Der er 5 kommentarer og
3 løsninger

Check: Hvor mange gange en værdi forekommer i en streng

Hej

Hvordan checker man hvor mange gange en værdi (f.eks. "03-17-2003") forekommer i en streng bestående af datoer, som er listet på følgende måde: "02-17-2003, 03-17-2003, 03-17-2003, 04-17-2003".

Hvis du ved det, kan du så ikke lige udbygge min funktion, som hedder "shareRes"?

___________________________________________


<%

    response.write "<p>Offentliggørelses-dato:<br>"
    response.write "<select name='datoPublikation' style='font-size: 10pt; font-family: Trebuchet MS'>"

    Set myConn=Server.CreateObject("ADODB.Connection")
    myConn.Open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="+server.Mappath("/db/selvet.mdb"))
   
    strSQL = "SELECT datopublish FROM search WHERE datopublish >= #"  & Year(date) & "-" & month(date) & "-" & Day(date) &  "# AND datopublish < #" & Year(dateadd("yyyy",1,date)) & "-" & month(dateadd("yyyy",1,date)) &  "-" & Day(dateadd("yyyy",1,date)) & "# order by datopublish"

    set rs = myConn.execute(strSQL)
   
    do while not rs.EOF
          if isDate(rs("datopublish")) then
              myDates = myDates & rs("datopublish") & ", "
        End If
    rs.MoveNext
    Loop
       
    if Session("henvisningStatus") = "opdatere" then
        myDates = Replace(Session("henvisningDatoPublikation") & ", ", "")
    end if
       
    if right(myDates, 2) = ", " then
        myDates = left(myDates,len(myDates)-2)
    end if
   
    myDateArr = Split(myDates,",")

    dato = date ()
    datoSlut = DateAdd("yyyy",1,date)
    i = 0
    do while dato <= datoSlut
        if shareRes() and CDate(myDateArr(i)) <> CDate(dato) then
              Response.Write "<option value=""" & dato & """>" & dato & "</option>"
          else
            i = i + 1
            if i > ubound(myDateArr) then i = ubound(myDateArr)
          end if
        dato = dateAdd("d",1,dato)
    loop

    response.write "</select><br>"
    response.write "<font size='1' color='#808080' face='VERDANA, ARIAL'>" & Session("henvisningVisODBesked") & "</font>"

    function shareRes()

        if ..... myDateArr(i) forekommer mindre end 2 gange i myDateArr .... then
            shareRes = true
        else
            shareRes = false
        end if

    end function

%>
Avatar billede Spotgun Seniormester
17. marts 2003 - 15:51 #1
Prøv med denne funktion:

testStr = "02-17-2003, 03-17-2003, 03-17-2003, 04-17-2003, 03-17-2003"

Function countDates(dates)
  antal = 0
  myArr = Split(dates, ", ")
  For i = 0 to uBound(MyArr)
    If MyArr(i) = "03-17-2003" Then
      antal = antal + 1
    End If
  Next
  countDates = antal
End function

Response.Write countDates(testStr)
Avatar billede zeusdk Nybegynder
17. marts 2003 - 17:57 #2
Subscript out of range: 'i'
/test.asp, line 34
dvs. i: if countDates(myDates, myDateArr(i))....

<%

    response.write "<p>Offentliggørelses-dato:<br>"
    response.write "<select name='datoPublikation' style='font-size: 10pt; font-family: Trebuchet MS'>"

    Set myConn=Server.CreateObject("ADODB.Connection")
    myConn.Open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="+server.Mappath("/db/selvet.mdb"))
   
    strSQL = "SELECT datopublish FROM search WHERE datopublish >= #"  & Year(date) & "-" & month(date) & "-" & Day(date) &  "# AND datopublish < #" & Year(dateadd("yyyy",1,date)) & "-" & month(dateadd("yyyy",1,date)) &  "-" & Day(dateadd("yyyy",1,date)) & "# order by datopublish"

    set rs = myConn.execute(strSQL)
   
    do while not rs.EOF
          if isDate(rs("datopublish")) then
              myDates = myDates & rs("datopublish") & ", "
        End If
    rs.MoveNext
    Loop
       
    if Session("henvisningStatus") = "opdatere" then
        myDates = Replace(Session("henvisningDatoPublikation") & ", ", "")
    end if
       
    if right(myDates, 2) = ", " then
        myDates = left(myDates,len(myDates)-2)
    end if
   
    myDateArr = Split(myDates,",")

    dato = date ()
    datoSlut = DateAdd("yyyy",1,date)
    i = 0
    do while dato <= datoSlut
        if countDates(myDates, myDateArr(i)) < 2 and CDate(myDateArr(i)) <> CDate(dato) then
              Response.Write "<option value=""" & dato & """>" & dato & "</option>"
          else
            i = i + 1
            if i > ubound(myDateArr) then i = ubound(myDateArr)
          end if
        dato = dateAdd("d",1,dato)
    loop

    response.write "</select><br>"
    response.write "<font size='1' color='#808080' face='VERDANA, ARIAL'>" & Session("henvisningVisODBesked") & "</font>"

    Function countDates(dates, thisDate)
     
      antal = 0
      myArr = Split(dates, ", ")
      For i = 0 to uBound(MyArr)
        If MyArr(i) = thisDate Then
              antal = antal + 1
        End If
      Next
          countDates = antal
    End function

%>
Avatar billede soes Nybegynder
17. marts 2003 - 20:17 #3
Function RegExpTest(patrn, strng)
  Dim regEx, Match, Matches  ' Create variable.
  Set regEx = New RegExp  ' Create regular expression.
  regEx.Pattern = patrn  ' Set pattern.
  regEx.IgnoreCase = True  ' Set case insensitivity.
  regEx.Global = True  ' Set global applicability.
  Set Matches = regEx.Execute(strng)  ' Execute search.
  For Each Match in Matches  ' Iterate Matches collection.
      intMatchCount = intMatchCount + 1
  Next
  RegExpTest = intMatchCount
End Function

patrn = den dato du leder efter
strng = den streng du soeger i.
Avatar billede zeusdk Nybegynder
17. marts 2003 - 22:06 #4
Men det løser ikke min "Subscript out of range: 'i'"-fejl.
Avatar billede soes Nybegynder
17. marts 2003 - 22:08 #5
nej, men det ville vaere en anden maade at loese dit problem paa
Avatar billede zeusdk Nybegynder
17. marts 2003 - 22:22 #6
fejlen opstår ikke i funktionen... men i funktions-kaldet... kan du hjælpe mig?

det er ellers en nyde reg-løsning
Avatar billede zeusdk Nybegynder
17. marts 2003 - 22:23 #7
nyde = nydelig
Avatar billede zeusdk Nybegynder
18. marts 2003 - 14:01 #8
Jeg har brug for et hurtigt svar, så jeg lukker nu. Tak for hjælpen :-)
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