Avatar billede roadrunr Nybegynder
09. november 2000 - 09:22 Der er 10 kommentarer og
2 løsninger

Flere dim. Array(x,y) - kan ikke udskrive

Jeg har et array som følgende, hvor jeg indsætter nogle oplysninger på baggrund af nogle filer som ligger i en mappe.
----------------------------------------
Dim fileArray()
ReDim fileArray(4096, 3)

\' Vælger mappe
Path = Server.Mappath(\"..\\files\\billeder\")

Set objFSO = CreateObject(\"Scripting.FileSystemObject\")
Set objFolder = objFSO.GetFolder(Path)
Set objFilesCollection = objFolder.Files

\' Indsætter filer i array
i = 0
For Each objFile in objFilesCollection
    fileArray(i, 0) = objFile.Name
    fileArray(i, 1) = objFile.Type
    fileArray(i, 2) = objFile.Size
    i = i + 1
Next

ReDim fileArray(i-1, 3)

\' Her skal den udskrive arrayet
For i = 0 To UBound(fileArray)
    Response.Write fileArray(i, 1) & \"<br>\"
Next
---------------------------------------
Hvorfor vil den ikke udskrive indholdet af mig array(se sidst i koden)?????
Avatar billede stig3 Mester
09. november 2000 - 09:41 #1
Jeg skyder i tågen, men kan du godt bruge Ubound på et flerdimensionalt array ?

Prøv at udskrive UBound(filearray) og se om den giver den ønskede værdi.
Avatar billede erikjacobsen Ekspert
09. november 2000 - 09:44 #2
Prøv
      ReDim Preserve fileArray(i-1, 3)
Avatar billede roadrunr Nybegynder
09. november 2000 - 09:46 #3
Det gør den - den udskriger \"10\" - hvilket svaret til det antal filer som ligger i mappen/array\'et

Når jeg udskriver den, så kører den på rigtigvis løkken igennem, men den udskriver bare kun \"<br>\" og ikke selve værdien i arrayet.

Hvis jeg der i mod udskriver arrayet inde i den løkke hvor arrayet bliver genereret, så virker det fint. Altså:
------------------------------------

For Each objFile in objFilesCollection
    fileArray(i, 0) = objFile.Name
    fileArray(i, 1) = objFile.Type
    fileArray(i, 2) = objFile.Size
    Response.Write fileArray(i,2) & \"<br>\"
    i = i + 1
Next

------------------------------------
Så derfor kan jeg ikke rigtig forstå at jeg ikke kan udskrive værdierne længere nede i koden.
Avatar billede zogu Nybegynder
09. november 2000 - 09:48 #4
Ikke et skud i tågen.

Du skriver:
Ubound(fileArray,1) vil give 4096
Ubound(fileArray,2) vil give 3

Thats the way.

Med venlig hilsen
Zogu
Avatar billede erikjacobsen Ekspert
09. november 2000 - 09:52 #5
Man kan jo kun redimme med preserve på den sidste dimension. Prøv:

Dim fileArray()
ReDim fileArray(3,4096)

\' Vælger mappe
Path = Server.Mappath(\"..\\files\\billeder\")

Set objFSO = CreateObject(\"Scripting.FileSystemObject\")
Set objFolder = objFSO.GetFolder(Path)
Set objFilesCollection = objFolder.Files

\' Indsætter filer i array
i = 0
For Each objFile in objFilesCollection
  fileArray(0,i) = objFile.Name
  fileArray(1,i) = objFile.Type
  fileArray(2,i) = objFile.Size
  i = i + 1
Next

ReDim preserve fileArray(3,i-1)

\' Her skal den udskrive arrayet
For i = 0 To UBound(fileArray)
  Response.Write fileArray(1,i) & \"<br>\"
ext
Avatar billede erikjacobsen Ekspert
09. november 2000 - 09:53 #6
Ups, 3. sidste linie er jo nu (naturligvis!!):

  For i = 0 To UBound(fileArray,2)
Avatar billede zogu Nybegynder
09. november 2000 - 10:23 #7
Her er løsningen.

Du kan ikke redime på første dimension, hvorfor ved jeg ikke. Men det her virker.

Dim fileArray()
Dim total
Dim Path
Dim i
Dim objFSO
Dim objFolder
dim objFilesCollection

ReDim fileArray(3, 4096)

Set objFSO = CreateObject(\"Scripting.FileSystemObject\")
Set objFolder = objFSO.GetFolder(server.mappath(\"..\\\"))
Set objFilesCollection = objFolder.Files

\' Indsætter filer i array
i = 0
For Each objFile in objFilesCollection
    fileArray(0,i) = objFile.Name
    fileArray(1,i) = objFile.Type
    fileArray(2,i) = objFile.Size
  \' Response.Write fileArray(i, 1) & \"<br>\"
    i = i + 1
Next

Redim Preserve fileArray(3,i-1)

\' Her skal den udskrive arrayet
For i = 1 To ubound(fileArray,2)
    Response.Write i & \" : \"  fileArray(1,i) & \"<br>\"
Next

Med venlig hilsen
Zogu
Avatar billede zogu Nybegynder
09. november 2000 - 10:25 #8
He he, erika. Havde ikke lige fået opdateret. :o)
Avatar billede erikjacobsen Ekspert
09. november 2000 - 10:30 #9
Når vi nu er enige zogu, så er det nok rigtigt ... hehe
Avatar billede roadrunr Nybegynder
09. november 2000 - 10:33 #10
Zogu: Ja det virker fint nu...
Der er 60 point mere hvis du evt kan hjælp mig lidt med hvordan man sortere arrayet. Så at man med udgangspunkt i ovenstående kan sortere arrayet i Alfabetisk orden på objFile.name - og efter størrelse på objFile.size.
Jeg har allerede lidt kode, men det virker ikke på det nye:
---------------------------------------
\' Sorterer filer i array
i = 0
For i = 0 to (UBound(fileArray)-1)
    min  = i
    For j = (i + 1) to UBound(fileArray)
        If UCase(fileArray(0, i)) < UCase(fileArray(0, min)) Then
            min = j
        End if
        temp = fileArray(0, min)
        fileArray(0, min) = fileArray(0, i)
        fileArray(0, i) = temp
    Next
Next
---------------------------------------
jeg kan ikke lige gennemskue det.
Avatar billede zogu Nybegynder
10. november 2000 - 10:18 #11
Jeg har ikke testet om den kan køre. Men du skal huske at angive den dimension du ønsker Ubound skal returnere.

Jeg har også lige sat den til at flytte de sidste 2 felter, ellers er det kun fil navnene du bytter rundt på. :o)

Her kommer det :
-----------------------------------
\' Sorterer filer i array
i = 0
For i = 0 to (UBound(fileArray,2)-1)
    min  = i
    For j = (i + 1) to UBound(fileArray,2)
        If UCase(fileArray(0, i)) < UCase(fileArray(0, min)) Then
            min = j
        End if
        temp0 = fileArray(0, min)
    temp1 = fileArray(1, min)
    temp2 = fileArray(2, min)
        fileArray(0, min) = fileArray(0, i)
        fileArray(1, min) = fileArray(1, i)
        fileArray(2, min) = fileArray(2, i)
        fileArray(0, i) = temp0
        fileArray(1, i) = temp1
        fileArray(2, i) = temp2
    Next
Next
----------------------------------------
Med venlig hilsen
Zogu
Avatar billede roadrunr Nybegynder
27. maj 2001 - 12:18 #12
Takker for hjælpen
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