plelkesMedlem sedan mars 2002823 inlägg Hej,
jag använder mig av "Teach Yourself ASP in 21 days"
Där hittade jag nedanstående kodexet, som är tänkt att visa en kalender Blir tyvärr ett långt inlägg, men forumets önskemål är ju att fullständig kod skall visas.
<%@ Language = VBSCRIPT %>
<% Option Explicit %>
<HTML>
<BODY>
<%
Function GetMonthName(iMonth)
Select Case iMonth
Case 1:
GetMonthName = "January"
Case 2:
GetMonthName = "February"
Case 3:
GetMonthName = "March"
Case 4:
GetMonthName = "April"
Case 5:
GetMonthName = "May"
Case 6:
GetMonthName = "June"
Case 7:
GetMonthName = "July"
Case 8:
GetMonthName = "August"
Case 9:
GetMonthName = "September"
Case 10:
GetMonthName = "October"
Case 11:
GetMonthName = "November"
Case 12:
GetMonthName = "December"
Case Else:
GetMonthName = "**INVALID MONTH**"
End Select
End Function
Dim dbCurrentDate
dbCurrentDate = "1/1/2000"
Dim aCalendarDays(42)
Dim iFirstWeekday
iFirstWeekday = DatePart("w",DateSerial(Year(dbCurrentDate), Month(dbCurrentDate), 1))
'Now, we want to loop from 1 to the number of days in the
'current month, populating the array aCalendarDays
Dim iDaysInMonth
iDaysInMonth = DatePart("d",DateSerial(Year(dbCurrentDate), Month(dbCurrentDate)+1, 1-1))
Dim iLoop
For iLoop = 1 to iDaysInMonth
aCalendarDays(iLoop + iFirstWeekday - 1) = iLoop
Next
Dim iColumns, iRows
iColumns = 7
iRows = 6 - Int((42 - (iFirstWeekDay + iDaysInMonth)) / 7)
'Now, create the table
%>
<TABLE ALIGN=CENTER BORDER=1 CELLSPACING=1 WIDTH=75% HEIGHT=75%>
<TH COLSPAN=7>
<FONT SIZE=+2>
<%
'Display the month and year
Response.Write GetMonthName(Month(dbCurrentDate))
Response.Write ", " & Year(dbCurrentDate)
%>
</FONT>
</TH>
<%
'Now, loop through 1 through iRows, then 1 through iColumns
Dim iRowsLoop, iColumnsLoop
For iRowsLoop = 1 to iRows
'Create a new row
Response.Write "<TR>"
For iColumnsLoop = 1 to iColumns
'Create a new column
'If there is a day there, display it, else black out the cell
If aCalendarDays((iRowsLoop-1)*7 + iColumnsLoop) > 0 then
'Display the date
Response.Write "<TD VALIGN=TOP ALIGN=RIGHT WIDTH=""14%"">"
Response.Write aCalendarDays((iRowsLoop-1)*7 + iColumnsLoop)
Response.Write "</TD>"
Else
'Black out the cell
Response.Write "<TD BGCOLOR=BLACK> </TD>"
End If
Next
'Close the row
Response.Write "</TR>"
Next
%>
</TABLE>
</BODY>
</HTML>
Uppenbarligen
Now that we have our populated array, we need to display the array in calendar form. We will create a table of 7 columns, one for each day of the week.
rör det sig bl.a. här om array och tabell.
Jag har följande problem.Jag trodde att en 2 dim array börjar med (0,0) som första position
Men som det visas här Så börjar i denna kod på position (1,1)
Skall det vara så?
MacceMedlem sedan apr. 2001425 inlägg börjar man tilldela värden på plats 1,1 så används ju inte 0,0
solbulleMedlem sedan mars 20015 287 inlägg Är det överhuvudtaget en tvådimensionel array det är frågan om?
plelkesMedlem sedan mars 2002823 inlägg Men när jag försökte
For iRowsLoop = 0 to iRows
iColumnsLoop = 0 to iColumns
Så fungerade det ej
Inte heller funkade det
For iRowsLoop = 0 to iRows-1
iColumnsLoop = 0 to iColumns-1
Solbulle: vad rör det sig om i så fall?
solbulleMedlem sedan mars 20015 287 inlägg Jag ska egentligen vara tyst, eftersom jag inte har full koll på vad jag muttrar om...
En endimensionell array kanske?
Allvarligt, den arrays du visar har väl bara ett plan eller vad det nu heter?
plelkesMedlem sedan mars 2002823 inlägg Tyvärr har även jag dålig, om inte obefintlig koll på arrays.
Men jag tycker att kalendern liknar till det Vide visar ....
Därför antog jag att det rör sig om en 2dim array
@ndersMedlem sedan juni 200032 969 inlägg Det är i koden en endimensionell array.
Looparna som används i koden är bara för att presentera html-tabellen korrekt. Data finns i den endimensionella arrayen aCalendarDays.
Bara för att klargöra det. :)
Så egentligen är ingenting konstigt, de två looparna (columns och rows börjar på 1). Att "rutan" i kalender råkar ha "index" 1,1 är av den anledningen, och inget annat. :)
Förmodligen lyckades jag väl snurra till det för dig ännu mer nu, men det är inte min avsikt i alla fall.
Mvh
plelkesMedlem sedan mars 2002823 inlägg
Så egentligen är ingenting konstigt, de två looparna (columns och rows börjar på 1). Att "rutan" i kalender råkar ha "index" 1,1 är av den anledningen, och inget annat
- Som ni ser börjar tabellen på en söndag. Hur skulle jag kunna få det hela börja på Måndag?
Förmodligen lyckades jag väl snurra till det för dig ännu mer nu
Inte har du snurrat till det för mig inte...
plelkesMedlem sedan mars 2002823 inlägg Glömde ställa 2 viktiga följdfrågor:
- varför lagras i exemplet data i en array?
- kan detta göras på annat sätt och i såfall hur?
- när, hur och varför används en 2dim array?
@ndersMedlem sedan juni 200032 969 inlägg
- Jag vet faktiskt inte. Jag hade exemplifierat det lättare.
- Man kan använda veckodagsexemplet (trots att det är onödigt, eftersom det finns veckodagsfunktionalitet i vbscript).
<%
Dim MyDays(6)
MyDays(0) = "Sönnda!"
MyDays(1) = "Månnda!"
MyDays(2) = "Tissda!"
MyDays(3) = "Onssda!"
MyDays(4) = "Tossda!"
MyDays(5) = "Freda!!"
MyDays(6) = "Lörrda!"
Response.Write MyDays(WeekDay(Date, vbMonday))
%>
Ett annat, lite enklare sätt att fylla en endimensionell array, är att använda Array():
Dim MyDays
MyDays = Array("Sönnda!", "Månnda!", "Tissda!", "Onssda!", "Tossda!", "Freda!!", "Lörrda!")
- Tvådimensionella arrayer används ofta för att representera resultatdata från en databas / SQL-fråga, och då ofta genom att man skapar arrayen med recordset-objektets metod GetRows().
Mvh
MacceMedlem sedan apr. 2001425 inlägg För att kalendern ska börja på en måndag så byt ut raden
aCalendarDays(iLoop + iFirstWeekday - 1) = iLoop
Till
aCalendarDays(iLoop + iFirstWeekday - 2) = iLoop
plelkesMedlem sedan mars 2002823 inlägg Macce: tack för det - funkar cannon
@nders:
Jag hade exemplifierat det lättare
Ett annat, lite enklare sätt att fylla en endimensionell array, är att använda Array()
Jag har läst om det, men måste tillstå att jag inte är 100:a på användandet
Förrestän om vi ändå är inne på aCalenderDays()=iLoop , så tycker jag att bokens koder är lite mysko, förstår inte riktigt de:
1: Dim dbCurrentDate
2: dbCurrentDate = "1/1/2000"
3: Dim aCalendarDays(42)
4: Dim iFirstWeekday
5: iFirstWeekday = DatePart("w",DateSerial(Year_
6: (dbCurrentDate), Month(dbCurrentDate), 1))
7: Dim iDaysInMonth
8: iDaysInMonth = DatePart("d",DateSerial(Year_
9: (dbCurrentDate), Month(dbCurrentDate)+1, 1-1))
10: Dim iLoop
11: For iLoop = 1 to iDaysInMonth
12: aCalendarDays(iLoop + iFirstWeekday - 2) = iLoop
Rad 12: säger: aCalenderDays(1 + 7 -2) = iLoop, dvs aCalenderDays(6)=iLoop
-
men med
Response.Write iLoop
får jag fram att iLoop egentligen är antalet dagar i aktuella månaden. Så vad säger de egentligen med den koden???
-
Hur kan jag "printa ut" aCalenderDays(6)?
@ndersMedlem sedan juni 200032 969 inlägg Missförstod jag din fråga två? Mitt svar två är i alla fall en lättare exemplifiering av användandet av arrayer.
plelkesMedlem sedan mars 2002823 inlägg Nja @nders, kanske var jag lit otydlig i min följdfråga...
Om jag använder lösningen:[KOD]Dim MyDays
MyDays = Array("Måndag", "Tisdag", "Onsdag", ....."Söndag")
Kan jag fortfarande göra kalendern? Vilka ändringar behöver jag göra i så fall?
Kanske förslag som kan sparka mig i rätt riktning?
solbulleMedlem sedan mars 20015 287 inlägg
plelkes skrev:
Förrestän om vi ändå är inne på aCalenderDays()=iLoop , så tycker jag att bokens koder är lite mysko, förstår inte riktigt de:
..........
Rad 12: säger: aCalenderDays(1 + 7 -2) = iLoop, dvs aCalenderDays(6)=iLoop
men med
Response.Write iLoop
får jag fram att iLoop egentligen är antalet dagar i aktuella månaden. Så vad säger de egentligen med den koden??? Hur kan jag "printa ut" aCalenderDays(6)?
Du missuppfattar lite där, denna kod:
For iLoop = 1 to iDaysInMonth
aCalendarDays(iLoop + iFirstWeekday - 1) = iLoop
Next
Detta gör ju att arrayen aCalendarDays fylls med värden.
Loopen kommer ju att snurra lika många varv som iDaysInMonth innehåller.
Anta att iFirstWeekday är lika med 4
Varv 1 blir då aCalendarDays(4) = 1, varv två blir
aCalendarDays(5) = 2 osv tills hela arrayen är fylld.
solbulleMedlem sedan mars 20015 287 inlägg
solbulle skrev:
plelkes skrev:
Förrestän om vi ändå är inne på aCalenderDays()=iLoop , så tycker jag att bokens koder är lite mysko, förstår inte riktigt de:
..........
Rad 12: säger: aCalenderDays(1 + 7 -2) = iLoop, dvs aCalenderDays(6)=iLoop
men med
Response.Write iLoop
får jag fram att iLoop egentligen är antalet dagar i aktuella månaden. Så vad säger de egentligen med den koden??? Hur kan jag "printa ut" aCalenderDays(6)?
Du missuppfattar lite där, denna kod:
For iLoop = 1 to iDaysInMonth
aCalendarDays(iLoop + iFirstWeekday - 1) = iLoop
Next
Detta gör ju att arrayen aCalendarDays fylls med värden.
Loopen kommer ju att snurra lika många varv som iDaysInMonth innehåller.
Anta att iFirstWeekday är lika med 4
Varv 1 blir då aCalendarDays(4) = 1, varv två blir
aCalendarDays(5) = 2 osv tills hela arrayen är fylld.
Hur kan jag "printa ut" aCalenderDays(6)?
response.write aCalenderDays(6)
plelkesMedlem sedan mars 2002823 inlägg Solbullen:
Så långt att
Detta gör ju att arrayen aCalendarDays fylls med värden.
fattar jag, men jag fattar inte själva konstruktionen dvs varför just
iLoop + iFirstWeekday - 1)
fyller på arreyen??
solbulleMedlem sedan mars 20015 287 inlägg Din array har ju ett antal platser.
aCalendarDays(1)
aCalendarDays(2) osv
Loopen gör ju att värdet: ( iLoop + iFirstWeekday - 1) ändras för varje varv loopen gör (iLoop räknas ju upp ett snäpp)
Då blir det ju som så att först får då (med de förutsättningar jag skrev i inlägget ovan):
aCalendarDays(4) sitt värde, nästa varv får aCalendarDays(5) sitt värde osv.
iLoop är ju själva räknaren som räknar upp, startar på 1, därav antar jag (utan att ha lusläst koden) dras det sen bort -1 , alternativet borde ju kunna vara att börja räkna från 0 i stället.
iFirstWeekday är ju med för att den inte ska börja räkna på första dagen i veckan, utan första dagen i månaden.
plelkesMedlem sedan mars 2002823 inlägg Det är tydligen en konst att ställa rätta frågor. Konst som jag inte behärskar än...
Tack solbulle :bire i
iLoop är ju själva räknaren som räknar upp, startar på 1, därav antar jag (utan att ha lusläst koden) dras det sen bort -1 , alternativet borde ju kunna vara att börja räkna från 0 i stället.
iFirstWeekday är ju med för att den inte ska börja räkna på första dagen i veckan, utan första dagen i månaden.
har jag äntligen fått sva på mina undringar
EclipseMedlem sedan juli 20003 825 inlägg 0 1 2
0 23 Eclipse Free
1 44 Sonya Free
2 32 Elin Bussy
3 88 Henke Bussy
Här har du en array, ett fisknät.
Låtsas att detta är svaret på en fråga, "SELECT * FROM [users]"
Koden för det blir så här:
SQL = "SELECT * FROM [users]"
set mySQL = Conn.Execute(SQL)
IF NOT mySQL.EOF THEN myRow = mySQL.GetRows()
***
Nu är fisknätet skapat. På plats 0,0 är alltså 23 vilket är ID nummret på den första posten.
response.write myRow(0,0)
***
IF IsArray(myRow) THEN
FOR i = 0 TO Ubound(myArray,2)
response.write myRow(1,j) & " " & myRow(2,j) & "<BR>"
NEXT
END IF
***
Med detta manér kan du alltså överst på sidan:
1. öppna databasen
2. ställa frågan
3. lägga in den i en array
4. stänga databasen
Sen skriver du resten av sidan och om din array innerhåller något så skriver du ut det där det får plats.