---
title: "Förstår inte hur jag skapar och använder arrayer"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/77428-förstår-inte-hur-jag-skapar-och-använder-arrayer"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "plelkes"
published: "2003-05-19T16:54:53.000Z"
updated: "2003-05-21T11:29:14.000Z"
replies: 19
views: 730
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/77428-förstår-inte-hur-jag-skapar-och-använder-arrayer"
---

# Förstår inte hur jag skapar och använder arrayer

## #1 — plelkes, 2003-05-19T16:54Z

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](http://www20.brinkster.com/plelkes/calender1.asp)  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>&nbsp;</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](http://www20.brinkster.com/plelkes/calender2.asp)  Så börjar i denna kod på position (1,1)
Skall det vara så?

Permalänk: https://www.webforum.nu/p/77428

## #2 — Macce, 2003-05-19T17:32Z

börjar man tilldela värden på plats 1,1 så används ju inte 0,0

Permalänk: https://www.webforum.nu/p/1056078

## #3 — solbulle, 2003-05-19T17:35Z

Är det överhuvudtaget en tvådimensionel array det är frågan om?

Permalänk: https://www.webforum.nu/p/1056083

## #4 — plelkes, 2003-05-19T17:37Z

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?

Permalänk: https://www.webforum.nu/p/1056085

## #5 — solbulle, 2003-05-19T17:45Z

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?

Permalänk: https://www.webforum.nu/p/1056092

## #6 — plelkes, 2003-05-19T18:03Z

Tyvärr har även jag dålig, om inte obefintlig koll på arrays.
Men jag tycker att kalendern liknar till det [Vide visar](http://www.webeye.nu/default2.asp?que=asp/default.asp&exec=asp/artiklar/asp_12.asp#dimensioner) ....
Därför antog jag att det rör sig om en 2dim array

Permalänk: https://www.webforum.nu/p/1056116

## #7 — @nders, 2003-05-19T18:09Z

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

Permalänk: https://www.webforum.nu/p/1056125

## #8 — plelkes, 2003-05-19T18:28Z

> 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...

Permalänk: https://www.webforum.nu/p/1056151

## #9 — plelkes, 2003-05-19T18:54Z

Glömde ställa 2 viktiga följdfrågor:

1. varför lagras i exemplet data i en array?
2. kan detta göras på annat sätt och i såfall hur?
3. när, hur och varför används en 2dim array?

Permalänk: https://www.webforum.nu/p/1056196

## #10 — @nders, 2003-05-19T19:15Z

1) Jag vet faktiskt inte. Jag hade exemplifierat det lättare.
2) 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!")
```

3) 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

Permalänk: https://www.webforum.nu/p/1056222

## #11 — Macce, 2003-05-19T20:11Z

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
```

Permalänk: https://www.webforum.nu/p/1056307

## #12 — plelkes, 2003-05-20T05:37Z

Macce: tack för det - funkar cannon

@nders:

> Jag hade exemplifierat det lättare

 

- Hur då?

 

> 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

1. 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???
2. Hur kan jag "printa ut" aCalenderDays(6)?

Permalänk: https://www.webforum.nu/p/1056525

## #13 — @nders, 2003-05-20T05:50Z

Missförstod jag din fråga två? Mitt svar två är i alla fall en lättare exemplifiering av användandet av arrayer.

Permalänk: https://www.webforum.nu/p/1056538

## #14 — plelkes, 2003-05-20T06:12Z

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?

Permalänk: https://www.webforum.nu/p/1056554

## #15 — solbulle, 2003-05-20T17:01Z

> **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.

Permalänk: https://www.webforum.nu/p/1056992

## #16 — solbulle, 2003-05-20T17:02Z

> **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)

Permalänk: https://www.webforum.nu/p/1056993

## #17 — plelkes, 2003-05-20T18:29Z

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??

Permalänk: https://www.webforum.nu/p/1057039

## #18 — solbulle, 2003-05-20T19:28Z

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.

Permalänk: https://www.webforum.nu/p/1057070

## #19 — plelkes, 2003-05-21T05:41Z

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

Permalänk: https://www.webforum.nu/p/1057234

## #20 — Eclipse, 2003-05-21T11:29Z

```
	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.

Permalänk: https://www.webforum.nu/p/1057427

---

Tråden på webben: https://www.webforum.nu/amne/asp/77428-förstår-inte-hur-jag-skapar-och-använder-arrayer
