Avatar billede sorenmt84 Juniormester
13. oktober 2022 - 09:21 Der er 3 kommentarer og
2 løsninger

Loop fra 1 til 100, spring visse tal over

Jeg har et simpel loop fra 1 til 100, som jeg godt kunne tænke mig springer en række tal over jeg kan definere med et udtræk fra en database
Jeg kan bare ikke gennemskue hvordan det kan gøre?

Nuværende:
post = "1"
Do while post <= 100
response.write "<option value=""" & post & """>" & post & "</option>"
post = post +1
loop

Forestiller mig at jeg kunne lave en "liste" med numre der skal skippes ala dette:
spring = 2, 8, 60, 99

Så når mit loop køres vil min liste se sådan her ud:
1
3
4
5
6
7
9
osv...
Avatar billede claes57 Ekspert
13. oktober 2022 - 12:36 #1
du kan lave et array med de 'forbudte' tal, og så cykle det igennem lige efter din Do while... hvis der ikke er hit der, så kører du response.write

og så skal post = "1" rettes til, så det er et tal, ikke en tekst, så post = 1 vil virke før loop
Avatar billede sorenmt84 Juniormester
13. oktober 2022 - 14:57 #2
Jeg fandt dette:

Function InArray(Needle, Haystack)
            Dim i, x
            InArray = False

            For i = 0 To Ubound(Haystack)
                If IsArray(Needle) = True Then
                    For x = 0 To Ubound(Needle)
                        If Trim(Haystack(i)) = Trim(Needle(x)) Then
                            InArray = True
                            Exit Function
                        End If
                    Next
                Else
                    If Trim(Haystack(i)) = Trim(Needle) Then
                        InArray = True
                        Exit Function
                    End If
                End If
            Next
        End Function
        poster = Array(convertedstring)

Som virker rigtig fint, dog har jeg et problem med den liste jeg laver, der skal kontrolleres op i mod

Den laver jeg sådan:
liste = 0
        Set rs =  Server.CreateObject("ADODB.Recordset")
        strSQL = "SELECT * FROM poster "
        Set rs = Conn.Execute(strSQL)
        if rs.eof or rs.bof then
        else
        do until rs.eof or rs.bof
        liste = liste & "," & rs("postnr")
        rs.movenext
        loop
        end if
        rs.close
        Set rs = Nothing

Men værdierne bliver ignoreret, problemet er "" omkring mit , (tænker måske det er fordi listen så ikke er af numerisk værdi længere?)
Laver jeg en liste manuelt som liste = "0,4,5,10" virker det helt perfekt.

Kan du hjælpe med hvordan jeg kan løse dette?
Avatar billede arne_v Ekspert
13. oktober 2022 - 15:42 #3
Jeg ville overveje at bruge dictionary.

' opret dictionary
Set d = Server.CreateObject("Scripting.Dictionary")
' tilføj værdier (evt. fra database)
d.Add 2, "Drop"
d.Add 4, "Drop"
' loop og spring over dem i dictionary
for i = 1 to 6
    if not d.Exists(i) then
        ' lav noget me di
    end if
next
Avatar billede sorenmt84 Juniormester
13. oktober 2022 - 19:38 #4
Super forslag arne_v - Det spiller

        ' opret dictionary
Set d = Server.CreateObject("Scripting.Dictionary")
' tilføj værdier (evt. fra database)
Set rs =  Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM poster "
Set rs = Conn.Execute(strSQL)
if rs.eof or rs.bof then
else
do until rs.eof or rs.bof
d.Add rs("postnr").Value, "Drop"
rs.movenext
loop
end if
' loop og spring over dem i dictionary
for i = 1 to 200
    if not d.Exists(i) then
        response.write "<option value=""" & i & """>" & i & "</option>"
    end if
next

Tak for hjælpen begge
Avatar billede arne_v Ekspert
14. oktober 2022 - 00:45 #5
Bemærk at værdien  "Drop" ikke bruges. Den er dert kun fordi et Dictionary skal have både en key og en value. VBS (g dermed ASP) har ikke et Set object med kun key.
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

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