webForumDet fria alternativet

Konstigt loop-fel

ASP

9 svar · 231 visningar · startad av LilleSkutt

Medlem sedan feb. 2001265 inlägg
Frågan#1

Hej!

Jag håller på att skapa en egen kalender mha ASP, men har fastnat lite granna...
Jag loopar upp alla dagar i en månad genom att hämta antalet månader från en array, så att rätt antal dagar per månad skrivs ut. Men det funkar ju icke... Det funkar på Februari månad men inte på någon annan!

arrManader = Array("Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December")
arrDaysOfMonth = Array("31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31")

startColumn = Weekday(Now)-2

<><><>

For daysCounter = 1 To cInt(arrDaysOfMonth(currentMonth-1))
	If daysCounter Mod 5 = 0 then
		daysCounter = daysCounter + 1
		Response.Write "</tr>" & vbCrLf & "<tr>" & vbCrLf
	End If
	
	columnCounter = 0
	Do Until columnCounter = startColumn
		Response.Write "<td width=""79"" align=""center"">" & vbCrLf
		Response.Write "&nbsp;" & vbCrLf
		Response.Write "</td>" & vbCrLf
	columnCounter = columnCounter + 1
	Loop
	
	Response.Write "<td width=""79"" align=""center"">" & vbCrLf
	Response.Write "<font class=""calendarDay"">" & daysCounter & "</font>" & vbCrLf
	Response.Write "</td>" & vbCrLf
Next

Det är några fler småfel som jag kanske återkommer med om jag inte lyckas lösa dem, men just nu är det här problemet väldigt störande. Någon som ser vad felet beror på?

------------------
---
/* LilleSkutt */

Medlem sedan dec. 200012 464 inlägg
#2

jaha, du kanske kan beskriva lite mer. Vad hade du tänkt att få ut egentligen och vad blir resultatet. Att bara säga att det blir fel är lite för vagt. Något felmeddelande som dyker upp kanske?

Frånsett det, varför har du denna

Do Until columnCounter = startColumn Response.Write "<td width=""79"" align=""center"">" & vbCrLf
Response.Write " " & vbCrLf
Response.Write "</td>" & vbCrLf
columnCounter = columnCounter + 1
Loop

inuti loopen? Borde den inte ligga utanför.
Sen så kan ju värdet på startColumn bli negativt och i så fall borde man väl inte loopa överhuvudtaget.

------------------
essentitia preter non sans multiplicandum

Medlem sedan aug. 20003 575 inlägg
#3

Ett tips.. använd helst inte
Response.Write i Loopar,
Använd variabler istället
sidan laddas många gånger fortare då

------------------
"Brott kanske inte lönar sig, men det är kul"

Medlem sedan dec. 2000557 inlägg
#4

Är det bara jag som faktiskt inte kan läsa vad det står mellan:


och

:q

(texten blir för liten... :( )

------------------
// Palleman
www.wiicom.nu/palle

Medlem sedan feb. 2001265 inlägg
#5

LarsG -- Juste, den ska ligga utanför... Tyckte det såg skumt ut. Men den körs ju ändå bara en gång, då variabeln columnCounter sätts till ett värde som är lika stort som startColumn vid första körningen.

Felmeddelande blir det inget, utan det skrivs ut 31 dagar för alla måndare utom februari. Plus att det inte skrivs ut några tomma kolumner innan första dagen, om den är t.ex. en söndag som det är nu i april.

Nickemannen -- Ok, ett bra tips sitter aldrig fel :D

Palleman -- Lessen för det, men man får en mycket bättre överblick på koden, då alla tabbar kommer med. Det är orsaken till att jag använder den.

------------------
---
/* LilleSkutt */

[Redigerat av LilleSkutt den 02 apr 2001]

Medlem sedan feb. 2001265 inlägg
#6

Okey, har fixat lite o pillat lite nu... Nu skriver den ut dagarna i rätt ordning, men jag lyckas ändå inte få till de där tomma kolumnerna som ska visas innan första dagen om dagen inte är en onsdag.

Några idéer?

------------------
---
/* LilleSkutt */

Medlem sedan dec. 2000557 inlägg
#7

LilleSkutt:
Aha, ok... det är nått man ställer in med WF-koden eller?

Rätt smart faktiskt.. visste jag inte om. Markerar jag texten så kan man lättare läsa.. :)

------------------
// Palleman
www.wiicom.nu/palle

Medlem sedan feb. 2001265 inlägg
#8

Palleman -- Jajjamen, istället för [ kod] använder du [ perl] :)

------------------
---
/* LilleSkutt */

Medlem sedan feb. 2001265 inlägg
#9

Weeee nu funkar det :D

Men.. Jag använder mig av sex(!) stycken If-satser för att skriva ut tomma kolumner, och jag tycker det borde gå att lösa på ett snyggare och enklare sätt.

If startColumn = vbSunday then
	For countColumns = 0 To 5
		Response.Write "<td width=""79"" align=""left"">" & vbCrLf & "&nbsp;" & vbCrLf & "</td>" & vbCrLf
	Next
	startCalendar = 6
ElseIf startColumn = vbSaturday then
	For countColumns = 0 To 4
		Response.Write "<td width=""79"" align=""left"">" & vbCrLf & "&nbsp;" & vbCrLf & "</td>" & vbCrLf
	Next
	startCalendar = 5
ElseIf startColumn = vbFriday then
	For countColumns = 0 To 3
		Response.Write "<td width=""79"" align=""left"">" & vbCrLf & "&nbsp;" & vbCrLf & "</td>" & vbCrLf
	Next
	startCalendar = 4
ElseIf startColumn = vbThursday then
	For countColumns = 0 To 2
		Response.Write "<td width=""79"" align=""left"">" & vbCrLf & "&nbsp;" & vbCrLf & "</td>" & vbCrLf
	Next
	startCalendar = 3
ElseIf startColumn = vbWednesday then
	For countColumns = 0 To 1
		Response.Write "<td width=""79"" align=""left"">" & vbCrLf & "&nbsp;" & vbCrLf & "</td>" & vbCrLf
	Next
	startCalendar = 2
ElseIf startColumn = vbTuesday then
	Response.Write "<td width=""79"" align=""left"">" & vbCrLf & "&nbsp;" & vbCrLf & "</td>" & vbCrLf
	startCalendar = 1
End If

For daysCounter = 0 To cInt(arrDaysOfMonth(currentMonth-1))-1
	If startCalendar Mod 7 = 0 then
		Response.Write "</tr>" & vbCrLf & "<tr>" & vbCrLf
	End If

	Response.Write "<td width=""79"" align=""center"">" & vbCrLf
	Response.Write "<font class=""calendarDay"">" & daysCounter+1 & "</font>" & vbCrLf
	Response.Write "</td>" & vbCrLf
	startCalendar = startCalendar + 1
Next

Lite omständig kod tycker jag...

------------------
---
/* LilleSkutt */

Medlem sedan feb. 2001265 inlägg
#10

Hmmm ingen som har nåt att säga? Ovanligt. :)

Jag ändrade If-satserna till en Select Case-sats, lite snyggare, men inte mycket mindre kod.

Hur som helst, nytt problem! Jag vill inte skriva ut vilodagarna (lördag och söndag), någon som har någon idé?

Jag provade med att plussa till 2 på variabeln daysCounter, men det hjälper inte. Koden blir helt fel.

For daysCounter = 0 To cInt(arrDaysOfMonth(currentMonth-1))-1
	If startCalendar Mod 7 = 0 then
		Response.Write "</tr>" & vbCrLf & "<tr>" & vbCrLf
		daysCounter = daysCounter + 2
	End If
	Response.Write "<td width=""79"" align=""center"">" & vbCrLf
	Response.Write "<font class=""calendarDay"">" & daysCounter+1 & "</font>" & vbCrLf
	Response.Write "</td>" & vbCrLf
	startCalendar = startCalendar + 1
Next

Funkar alltså inte... Bättre idéer?

------------------
---
/* LilleSkutt */

[Redigerat av LilleSkutt den 02 apr 2001]

259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)