webForumDet fria alternativet

Får inte nestlad "for-loop" att fungera

ASP

21 svar · 463 visningar · startad av plelkes

Medlem sedan mars 2002823 inlägg
Frågan#1

Har nu försökt i 3 dagar, men jag får inte till det. Det bästa felet jag får är:

ogiltig kontrollvariabel för "for-loop"

Koden för veckans nummer

<%
dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag
Dim iDayMonth 'hur många dagar innehåller den aktuella månaden?

iDayMonth  = DatePart("d", DateSerial(Year(dagensdat), Month(dagensdat)+1, 1-1)) 'da´n innan första dagen i 
For iDag = 1 TO iDayMonth step 7
       dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag
		start= CDate(dNewDate)
	Response.write DatePart ("ww", start) & "<br>"
	Next
	%>

Koden för datum och veckodagen

<%
Session.LCID = 1053
	Dim aDagar(42) 
Dim iDag 
Dim dNewDate
Dim iWeekDay, sWeekDayName
Dim iDayMonth 'hur många dagar innehåller den aktuella månaden?

dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag
For iDag = 1 to DatePart("d", DateSerial(Year(Date()), Month(Date())+1, 0)) 'da´n innan första dagen i 
aDagar(iDag) = WeekDayName(DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag))
iWeekDay = DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag) 

response.write iDag &"   " & aDagar(iDag) & "<br>"
If iWeekDay = 1 Then Response.Write "<HR>"
next
%>

Det jag vill är att

  1. För månadens första dag skriv : datum, veckodag, och veckonummer typ någor som

     If iDag = 1 Then Response.write iDag &"   " & aDagar(iDag) & "   " & DatePart ("ww", start) & "<br>"
    
  2. Kolla om söndag. Är det söndag så skriv ut <HR> och (nästa) veckas nummer.- typ

    If iWeekDay = 1 Then Response.Write "<HR>" & DatePart ("ww", start) & "<br>"
    
  3. Fortsätt därefter att skriva ut nummer och veckodag

  4. Är inte det en söndag så skriv ut nummer och dagensnamn tills söndag

  5. och dessutom fortsätta med de två loopen( veckans nummer och dagens datum) tills vecka tar slut

Hoppas på hjälp från er ASP-gurun med att "sy ihop det hela"

Medlem sedan juni 200032 967 inlägg
#2

Du skriver att for-loopen är nästlad, och felmeddelandet tyder på att du använder samma kontrollvariabel för den inre forloopen som en utanför. Du kan inte använda samma, utan du måste byta namn på den inre.

Mvh

Medlem sedan mars 2002823 inlägg
#3

Nedanstående kod borde fungera[ - tycker åtminståne jag - men ickeKOD]<%
Dim aDagar(42)
Dim iDag
Dim dNewDate
Dim iWeekDay, sWeekDayName

dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag
Dim iDayMonth 'hur många dagar innehåller den aktuella månaden?

iDayMonth = DatePart("d", DateSerial(Year(dagensdat), Month(dagensdat)+1, 1-1)) 'da´n innan första dagen i
iWeekDay = DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag)
If iDagen = 1 Then
For iDag = 1 TO iDayMonth step 7
dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag
start= CDate(dNewDate)
Response.write DatePart ("ww", start) & "<br>"

ElseIf iWeekDay = 1 Then Response.Write "\<HR\>" & "\<DIV ALIGN=""RIGHT""\>" & DatePart ("ww", start) & "\<br\>" & "\</DIV\>"

Else
For iDagen = 1 to DatePart("d", DateSerial(Year(Date()), Month(Date())+1, 0)) 'da´n innan första dagen i
aDagar(iDagen) = WeekDayName(DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag))
iWeekDay = DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag)
response.write iDagen &" " & aDagar(iDagen) & "<br>"
End If
End If
Next
%>
Får felet

Next förväntas på raden:
ElseIf iWeekDay = 1 Then Response.Write "<HR>" & "<DIV ALIGN=""RIGHT"">" & DatePart ("ww", start) & "<br>" & "</DIV>"

Men då blir det väl ingen loop?
Och lägger jag till Next får jag

Programssats förväntas på rad 30 = End If

Medlem sedan mars 2002823 inlägg
#4

Någon av er gurus som har lösningen?

Medlem sedan juni 200032 967 inlägg
#5

Jodå, det där ska gå att lösa.

Jag kan väl säga som så; att dra igång en loop inne i en if-sats och avsluta den i ett annat block kommer inte att gå speciellt bra.

Indentera din kod så blir det lättare att se vad som tillhör vad också.

Jag tittar in senare.

Mvh,

Medlem sedan mars 2002823 inlägg
#6
Dim aDagar(42) 
Dim iDag , iDagen
Dim dNewDate 
Dim iWeekDay, sWeekDayName 
Dim iDayMonth 
'//hur många dagar innehåller den aktuella månaden? 

dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag 
iDayMonth = DatePart("d", DateSerial(Year(dagensdat), Month(dagensdat)+1, 1-1)) 'da´n innan första dagen i 
iWeekDay = DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag) 

If iDagen = 1 Then 
           For iDag = 1 TO iDayMonth step 7 
             dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag 
             start= CDate(dNewDate) 
             Response.write DatePart ("ww", start) & "<br>" 

     ElseIf iWeekDay = 1 Then Response.Write "<HR>" & "<DIV ALIGN=""RIGHT"">" & DatePart ("ww", start) & "<br>" & "</DIV>" 

         Else 
             For iDagen = 1 to DatePart("d", DateSerial(Year(Date()), Month(Date())+1, 0)) 'da´n innan första dagen i 
              aDagar(iDagen) = WeekDayName(DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag)) 
            iWeekDay = DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag) 
           response.write iDagen &" " & aDagar(iDagen) & "<br>" 
End If 
End If 
Next
Medlem sedan juni 200032 967 inlägg
#7

Hur blir det om du bara flyttar ut din For-instruktion till precis ovanför if-satsen istället för precis under?

Jag kan inte heller se att du ger iDagen ett värde någonstans, hur ska den bli 1?

Medlem sedan mars 2002823 inlägg
#8

@nders skrev

Jag kan inte heller se att du ger iDagen ett värde någonstans, hur ska den bli 1?

det trodde jag att jag gjorde med följande kodsnutt:

For iDagen = 1 to DatePart("d", DateSerial(Year(Date()), Month(Date())+1, 0))
Medlem sedan mars 2002823 inlägg
#9

Hur blir det om du bara flyttar ut din For-instruktion till precis ovanför if-satsen istället för precis under?

Menar du:

           
For iDag = 1 TO iDayMonth step 7 
If iDagen = 1 Then 

             dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag 
             start= CDate(dNewDate) 
             Response.write DatePart ("ww", start) & "<br>"
Medlem sedan juni 200032 967 inlägg
#10

plelkes skrev:

@nders skrev

Jag kan inte heller se att du ger iDagen ett värde någonstans, hur ska den bli 1?

det trodde jag att jag gjorde med följande kodsnutt:

For iDagen = 1 to DatePart("d", DateSerial(Year(Date()), Month(Date())+1, 0))

Aha, du har en till loop där nere, den såg jag inte ens. Hur som helst, när du försöker använda värdet första gången, så har inte variabeln något värde. Det får den först senare.

Du har dessutom två for-loopar, men i koden finns bara en next.

Jag kikar på koden, möblerar om lite, så ska vi se om jag kan leverera ett förslag.

Jag återkommer!

Mvh

Medlem sedan juni 200032 967 inlägg
#11

Det vore förresten bra om du kunde exemplifiera vilken utskrift du skulle vilja ha för en viss månad, så är det lite lättare att haja precis hur du menar.

Mvh

Medlem sedan mars 2002823 inlägg
#12

Utskriften jag vill skall se ut typ:
Med början från månadens första dag skrivs från vänster -> höger:
1 veckodagsnamnet veckonummret
2 veckodagsnamnet
'
'
'
datum Söndag
Response.Write "<HR>"
datum Måndag veckonummret
osv
Hoppas ni förstår bättre

Medlem sedan mars 2002823 inlägg
#13

Som jag skrev i trådens första inlägg så fungerar koden var för sig, jag lyckas bara inte sy ihop det hela

Medlem sedan mars 2002823 inlägg
#14

@nders skrev:

Hur som helst, när du försöker använda värdet första gången, så har inte variabeln något värde. Det får den först senare.

Nu förstår jag ej vad du menar med ovanstående.
Första gången jag använder iDagen är väl på rad 11 och där tilldelar jag väl värdet 1 med koden

If iDagen = 1 Then
Medlem sedan juni 200032 967 inlägg
#15

Första gången jag använder iDagen är väl på rad 11 och där tilldelar jag väl värdet 1 med koden

Nej, du bara kontrollerar om värdet är 1. Det är det inte, för du har aldrig gett variabeln ett värde innan du försöker kontrollera det.

Medlem sedan juni 200032 967 inlägg
#16

Jag tror att jag läst dåligt, för jag har nog inte förut förstått problemet. Jag gjorde så här:
* Tog ditt kodblock #2 från huvudinlägget
* Delade på din response.write-rad i loopen
* Lade till en kodrad, se nedan:

dNewDate = Year(Date()) & "-" & Month(Date()) & "-" & iDag
For iDag = 1 to DatePart("d", DateSerial(Year(Date()), Month(Date())+1, 0)) 'da´n innan första dagen i 
	aDagar(iDag) = WeekDayName(DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag))
	iWeekDay = DatePart("w",Year(Date()) & "-" & Month(Date()) & "-" & iDag) 
	response.write iDag &"   " & aDagar(iDag) 
	[b]if iDag = 1 or iWeekDay = 2 then Response.Write " vecka " & datePart("ww", Year(Date()) & "-" & Month(Date()) & "-" & iDag) [/b]
	response.Write "<br>"
	If iWeekDay = 1 Then Response.Write "<HR>"
next

Voilá!

Var det så du tänkt dig resultatet?

Mvh

Medlem sedan mars 2002823 inlägg
#17

Tyvärr har jag inga möjligheter att kolla förrän imorgon förmiddag,
men

Delade på din response.write-rad i loopen

Varför gjorde du det?

Den andra frågan är:
du har 2 stycken if satser, men inga End If?

Medlem sedan juni 200032 967 inlägg
#18

plelkes skrev:

Varför gjorde du det?

För att jag skulle få in veckonumret mellan dagen och radbrytningen. :-)

plelkes skrev:

Den andra frågan är:
du har 2 stycken if satser, men inga End If?

När man skriver en if-sats och har hela then-uttrycket på samma rad (dvs en instruktion) så behöver man inte end if. Exemplifiering:

If intTest = 1 then Response.write "Foo? Bar."

' är samma sak som:

If intTest = 1 then
     Response.write "Foo? Bar."
End if

' ----------------------
' Denna går inte att skriva på en rad, eftersom det är två instruktioner som ska exekveras i if-satsen:

If intTest = 1 and intWoo = 12 Then
     Response.write "Foo?<br>"
     Response.write "BAR!!!"
End if

Mvh

Medlem sedan mars 2002823 inlägg
#19

@nders skrev

Var det så du tänkt dig resultatet?

Fungerar kanon!!!

Om jag kollar koden du fixade till mig, så verkar det som om jag komplicerat till det hela alldeles hemskt mycket.
Egentligen är det ju bara att tänka på rent svenska och sedan översätta allt till VBScript/ASP - Eller?

Medlem sedan juni 200032 967 inlägg
#20

plelkes skrev:

Om jag kollar koden du fixade till mig, så verkar det som om jag komplicerat till det hela alldeles hemskt mycket.

Tyvärr är det sånt man gör allt för ofta, tänker för svårt. Men man blir bättre på det, jag lovar. :)

plelkes skrev:

Egentligen är det ju bara att tänka på rent svenska och sedan översätta allt till VBScript/ASP - Eller?

Ja, om jag har ett problem att lösa som jag inte riktigt får grepp om i skallen, då tänker jag alltid på ren svenska, och skriver ner problemet / föreslagen lösning i pseudo-kod. När man väl kommit så långt att pseudokoden är logisk och fungerar så brukar man ha lättare att lösa problemet programmatiskt.

Mvh,

397 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)
250 ms — ändringar (db)