27. maj 2008 - 09:24Der er
55 kommentarer og 2 løsninger
Arrays - multidimensionelt hvad går galt
Hej, jeg sidder og er igang med at oprette et array som skal indeholde nogle forskellige informationer, men kan ikke lige få det til at fungere korrekt, så håber nogle herinde kan hjælpe mig
code: Dim filer(2,4) i = 0 ' Nu finder vi alle filerne der er i mappen, samt oplysninger omkring filen, og gemmer i arrayet For each file in objFolder.Files i = i
jeg får følgende fejl Fejltype: Der opstod en Microsoft VBScript-kørselsfejl (0x800A0009) Indekset er uden for området: '[number: 3]' /small_stuff/infoserv/fileoverview.asp, line 34
og linje 34 er denne filer(3,i) = File.DateLastModified
hej w13, jeg takker for dit hurtige svar :-D og det var ganske korrekt de bare skulle byttes rundt, nu køre den i hvert fald igennem, så har jeg dog et andet problem
som jeg håber du vil tage tiden til at hjælpe mig med også for nu er vi dernede hvor vi skal hente informationer fra et array
her får jeg følgende fejl Fejltype: Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D) Typer stemmer ikke overens: 'UBound' /small_stuff/infoserv/fileoverview.asp, line 69
jeg ved ikke hvorfor men får stadig følgende besked
Fejltype: Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D) Typer stemmer ikke overens: 'UBound' /small_stuff/infoserv/fileoverview.asp, line 69
jamen problemet er netop dette er jeg sikker på den kan... eftersom jeg har prøvet at køre det igennem med at sætte et recordset op, og der fanger den alle filoplysningerne korrekt :-S
det må simpelthen være, fordi jeg kalder den forkert ud af funktionen :-S her kalder jeg min funktion a = GetSortedFiles(strFolder) og derinde i bliver array'et lavet...
Du skal huske at returnre det array du lige har genereret i funktionen, da du erklærer det i funktionens scope, nytter det ikke noget at du har en global variabel som hedder filer, for det er den variabel som er erklæret i det nærmeste scope som benyttes. Derfor: slut din funktion med:
' Her lukker vi for objFolder, eftersom vi er færdig med denne ( spare hukommelse ) Set objFolder = Nothing
hvis jeg som du siger w13 føre dim filer(2,4) uden for funktionen skriver den Variant() i stedet for empty, men hvis jeg så forsøger at loope igennem får jeg denne fejl
Fejltype: Der opstod en Microsoft VBScript-kørselsfejl (0x800A0009) Indekset er uden for området: '3' /small_stuff/infoserv/fileoverview.asp, line 69
som er response.write "<td width='200px' align='left'>" &filer(t,0)& "</td>"
hvis jeg derimod gør som softspot siger med at indsætte GetSortedFiles = filer virker det ikke som om den har den store indflydelse, den fanger i hvert fald ingenting
og hvis jeg dertil retter a = GetSortedFiles("sti/sti") til filer = GetSortedFiles("sti/sti") siger den bare typerne ikke stemmer overens, gør jeg noget forkert her???
Det er jo fordi du itererer arrayets første dimension (som har 3 elementer) med ubound af anden dimension (som jo er 4, dvs. 5 elementer), men du skal jo tage ubound(filer,1) til den løkke.
Der er faktisk kun plads til 3 filer i dit array (upper bound er jo sat til 2).
Du har godt nok lagt op til at der optælles hvormange filer der er i resultatet (objFiles.Count), men du bruger det ikke til at dimensionere dit array. Jeg er ikke helt sikker på om dit array er skruet sådan sammen at man let kan dimensionere det, da jeg tror man kun kan redimensionere den sidste dimension af arrayet, men det er jo ikke det du vil ændre størrelse af - det er det første.
så rettes den lidt, så nu får jeg Fejltype: Der opstod en Microsoft VBScript-kørselsfejl (0x800A0005) Procedurekaldet eller argumentet er ugyldigt /small_stuff/infoserv/fileoverview.asp, line 11
Du kan lige starte med at response.write indholdet af: Server.CreateObject("Scripting.FileSystemObject").GetFolder("./files").files.count indtil vi har den rigtige.
Fejltype: Der opstod en Microsoft VBScript-kørselsfejl (0x800A0005) Procedurekaldet eller argumentet er ugyldigt /small_stuff/infoserv/fileoverview.asp, line 11
den melder jo denne fejl, så svært at skrive noget, når den ikke vil gå videre derfra
Jeg ville nok vælge en lidt anden tilgangsvinkel ifht. erklæring og brug af arrays i dit tilfælde. Jeg ville nok nøjes med en enkelt dimension og så vælge det variante array, samt putte filobjekterne direkte i arrayet i stedet for at overføre værdierne. Altså noget i stil med:
Function GetSortedFiles(mappen)
' Her starter vi Filsystemet Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
' Her definere vi, hvilken mappe scriptet skal finde filerne i Set objFolder = objFSO.GetFolder(mappen)
' Her lukket vi for filsystemet igen, eftersom dette er vi færdig med ( spare resourcer ) Set objFSO = Nothing
' Her tæller vi filerne i mappen, og bestemmer hvor meget indhold arrayet skal indeholde k = objFolder.Files.Count
Dim filer() ReDim filer(k-1)
' Nu finder vi alle filerne der er i mappen, samt oplysninger omkring filen, og gemmer i arrayet For each file in objFolder.Files set filer(i) = file Next
' Her lukker vi for objFolder, eftersom vi er færdig med denne ( spare hukommelse ) Set objFolder = Nothing
GetSortedFiles = filer End Function
Løkken ville jeg så lave således:
' Her køre den igennem de forskellige informationer gemt i arrayet for each file in filer response.write "<tr>" response.write "<td width='200px' align='left'>" &file.Name& "</td>" response.write "<td width='200px' align='left'>" &file.Type& "</td>" response.write "<td width='200px' align='left'>" &file.CreatedDate& "</td>" response.write "<td width='200px' align='left'>" &file.LastModified& "</td>" response.write "<td width='200px' align='right'>" &file,Size& " kb.</td>" response.write "</tr>" next
Der var også en lille fejl i den funktion jeg lavede til dig. Ret den til:
Function GetSortedFiles(mappen)
' Her starter vi Filsystemet Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
' Her definere vi, hvilken mappe scriptet skal finde filerne i Set objFolder = objFSO.GetFolder(mappen)
' Her lukket vi for filsystemet igen, eftersom dette er vi færdig med ( spare resourcer ) Set objFSO = Nothing
' Her tæller vi filerne i mappen, og bestemmer hvor meget indhold arrayet skal indeholde k = objFolder.Files.Count
Dim filer() ReDim filer(k-1)
' Nu finder vi alle filerne der er i mappen, samt oplysninger omkring filen, og gemmer i arrayet i = 0 For each file in objFolder.Files set filer(i) = file i = i + 1 Next
' Her lukker vi for objFolder, eftersom vi er færdig med denne ( spare hukommelse ) Set objFolder = Nothing
i har da gjort jer fortjent til dem :-) så mig der takker
Synes godt om
Ny brugerNybegynder
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.