Avatar billede chrisrj Forsker
26. juli 2003 - 12:27 Der er 16 kommentarer og
1 løsning

Problemer med variabler

Jeg har disse variabler:

optidstart = arr(1)
optidslut = arr(2)
dagoptaget = 3
starttid = 0
sluttid = 1
dag = 1

De er alle tal.

Derefter har jeg disse if sætninger:

if ((dagoptaget = dag) and (starttid = optidstart)) then
...
...
if ((not dagoptaget = dag) and (starttid = optidstart)) then

Men disse if sætninger bliver ikke udført.

Når jeg skriver ud til skærmen ser det således ud, der hvor disse if sætninger skulle udføres:

1. if sætning:
dag = 2 dagoptaget = 2 starttid = 15 optidstart = 15 sluttid = 16 optidslut = 23

2. if sætning:
dag 3 dagoptaget = 2 starttid = 15 optidstart = 15 sluttid = 16 optidslut = 23

Hvorfor bliver disse if sætninger ikke udført??

Det virkede fint, da optidstart og optidslut var statiske.
Avatar billede chrisrj Forsker
26. juli 2003 - 12:29 #1
Hele mit script er her. Det udskriver et ugeskema.

id = request.querystring("id")
set rse = Conn.execute ("select count(id) as antallet from vagtplan")

dim vagtarr()

antal = Clng(rse("antallet"))

redim vagtarr(antal)

sql = "select * from vagtplan where brugerid="&id&""
Set rs = Conn.Execute(SQL)
'response.write sql & vbCrLf
t = 0
do while not rs.eof
    vagtarr(t) = "" & rs("dag") & ", " & rs("starttid") & ", " & rs("sluttid") & "" & vbCrLf
    rs.movenext
    t = t + 1
loop
i = 0

do while i < antal
    splitvagtarr(i)
    i = i + 1
loop

function splitvagtarr(tal)
    str = vagtarr(tal)
    arr = split(str, ",")
    dagen = arr(0)
    optidstart = arr(1)
    optidslut = arr(2)
    response.write " dag: " & dagen & " start: " & optidstart & " slut: " & optidslut & "<br>"

if dagen = "mandag" then
    dagoptaget = 1
else
    if dagen = "tirsdag" then
        dagoptaget = 2
    else
        if dagen = "onsdag" then
            dagoptaget = 3
        else
            if dagen = "torsdag" then
                dagoptaget = 4
            else
                if dagen = "fredag" then
                    dagoptaget = 5
                else
                    if dagen = "lørdag" then
                        dagoptaget = 6
                    else
                        if dagen = "søndag" then
                            dagoptaget = 7
                        end if
                    end if
                end if
            end if
        end if
    end if
end if
response.write " dag: " & dagen & " " & dagoptaget &"<br>"
response.write "tal " & IsNumeric(optidstart) & " " & IsNumeric(optidslut) & " " & IsNumeric(dagoptaget) & " " & "<br>"
starttid = 0
sluttid = 1
dag = 1
rows = optidslut - optidstart
response.write "rækker " & rows & " " & IsNumeric(rows) & "<br>"
dagsat = false
do
    response.write "<tr bgcolor='#8B1A1A'>" & vbCrLf
    response.write "<td align='center'><font size='1'>" & starttid & "-" & sluttid & "</font></td>" & vbCrLf
    do while dag =< 7   
        if ((dagoptaget = dag) and ((starttid < optidstart) or (starttid >= optidslut))) then
            response.write "<td align='center'><font size='1'>dag " & dag & " starttid = " & starttid & " optidstart = " & optidstart & " sluttid = " & sluttid & " optidslut = " & optidslut & "<br>Det er den rigtige dag</font></td>" & vbCrLf
            dag = dag + 1
        else
            if ((dagoptaget = dag) and (starttid = optidstart)) then
                response.write "<td align='center' rowspan='" & rows & "'><font size='1'>dag " & dag & " starttid = " & starttid & " optidstart = " & optidstart & " sluttid = " & sluttid & " optidslut = " & optidslut & "<br>her skal være optaget</font></td>" & vbCrLf
                dagsat = true
                dag = dag + 1
            else
                if ((dagoptaget = dag) and ((starttid > optidstart) or (starttid < optidslut))) then
                    dag = dag + 1
                else
                    if ((not dagoptaget = dag) and (starttid = optidstart)) then
                        response.write "<td align='center'><font size='1'>dag " & dag & " starttid = " & starttid & " optidstart = " & optidstart & " sluttid = " & sluttid & " optidslut = " & optidslut & "<br>Det er det rigtige tidspunkt</font></td>" & vbCrLf
                        dag = dag + 1
                    else
                        if ((not dagoptaget = dag) and (not starttid = optidstart)) then
                            response.write "<td align='center'><font size='1'>dag " & dag & " starttid = " & starttid & " optidstart = " & optidstart & " sluttid = " & sluttid & " optidslut = " & optidslut & "</font></td>" & vbCrLf
                            dag = dag + 1
                        else
                            dag = dag + 1
                        end if
                    end if
                end if
            end if
        end if
    loop
    dag = 1
    dagsat = false
    starttid = starttid + 1
    sluttid = sluttid + 1
    response.write "</tr>" & vbCrLf
loop while sluttid <> 25
end function
%>
Avatar billede jpvj Nybegynder
26. juli 2003 - 12:29 #2
din optidstart er et array - du skal huske at referere til det korrekte index.
Avatar billede jpvj Nybegynder
26. juli 2003 - 12:29 #3
tilsvarende for optidsslut...
Avatar billede jpvj Nybegynder
26. juli 2003 - 12:30 #4
Nu er jeg ikke ASP haj, men det må være noget i stil med

if optidstart(1) = starttid

Du er naturligvis sikker på, at de er samme type (ex. int), ellers checker du det først.
Avatar billede chrisrj Forsker
26. juli 2003 - 12:31 #5
De er da ikke arrays, de er bare sat lig med indholdet af arrayet. Eller tager jeg fejl?
Avatar billede chrisrj Forsker
26. juli 2003 - 12:32 #6
Arrayet er jo arr()
Avatar billede eagleeye Praktikant
26. juli 2003 - 12:45 #7
Dette er ikke arrays: 
optidstart = arr(1)

Man ligger værdien af arrayet arr(1) ind i variablen optidstar, ellers ville der også komme en index fejl på siden.

Det er mere sansynligt den tolkdet den ene variable som tal og den anden som tekst og så er 1 ikke lig "1". Så prøv at sætte int omkring:

if ((int(dagoptaget) = int(dag)) and (int(starttid) = int( optidstart))) then
Avatar billede eagleeye Praktikant
26. juli 2003 - 12:46 #8
Det lettest er nok at sætte Int omkring hvor data ligges i variablene, for ellers skal det gøres ved alle if sætnigerne:

optidstart = Int(arr(1))
optidslut = Int(arr(2))
dagoptaget = 3
starttid = 0
sluttid = 1
dag = 1
Avatar billede chrisrj Forsker
26. juli 2003 - 12:50 #9
Det er da pudsigt. Din først løsning virkede ikke, men den anden gjore!?!??!
Avatar billede eagleeye Praktikant
26. juli 2003 - 12:53 #10
Det nok fordi der flere steder hvor du bruger variablerne hvor de skal være af typen tal.
Hvis man gør det i if sætnignen bliver de kun konveretert til tal for den ene if sætning, hvorimod at gøre det i toppe hvor værdien flyttes ind.  variable=Int("3434") så bliver variblen af typen tal og det gæder så hele vejen igennem koden.
Avatar billede chrisrj Forsker
26. juli 2003 - 12:57 #11
Ok, jeg havde ellers lavet et tjek på om de var tal, og det var de:

response.write "tal " & IsNumeric(optidstart) & " " & IsNumeric(optidslut) & " " & IsNumeric(dagoptaget) & " " & "<br>"

Udskriver: tal True True True
Avatar billede jpvj Nybegynder
26. juli 2003 - 12:58 #12
eagleeye> Dough!!! Tror vist ikke at jeg er vågnet helt endnu. Jeg er helt enig!
Avatar billede chrisrj Forsker
26. juli 2003 - 13:00 #13
;)

Er der nogen af jer der har nod på at hjælpe mig med at lave scriptet om, så det kan udskrive flere tider i samme skema? - Jeg skal nok oprette et nyt spg.
Avatar billede eagleeye Praktikant
26. juli 2003 - 13:02 #14
jpvj  ;)

isNumeric tester bare om en streng indeholdet et tal. Den tester ikke om variablen er af typen tal.

"6364" er giver ture "344j" giver false med isnumeric.

Det bliver nok ikke mig da jeg er på vej ud af døren.
Avatar billede chrisrj Forsker
26. juli 2003 - 13:03 #15
Jeg kan nemlig ikke liige finde ud af hvordan det skal gøres. :(
Avatar billede chrisrj Forsker
26. juli 2003 - 13:04 #16
Øv. :(
Avatar billede chrisrj Forsker
26. juli 2003 - 13:26 #17
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