Avatar billede mini-me Nybegynder
21. marts 2005 - 17:40 Der er 18 kommentarer og
2 løsninger

Gruppering af filer via FSO

Hej,

Jeg har nogle filer kaldet type1-1 type1-2 type1-3, type2-1, type3-1,type3-2,type4-1,type4-2,type4-3

Det jeg ønsker er at kunne få dem grupperet i en tabel, hvor alle type1-x står på en række for sig og alle type2-x osv.

Jeg kan sagtens finde ud af at lave et kald hvor jeg løber samtlige af mine filer i det bibliotek igennem, men kan ikke få dem grupperet, nogle der har en god ide??



  <%
   
    Dim fso, f, files, folderspec
    folderspec = Server.Mappath("../template/")
   
    ' Start File System Objectet...
    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    Set rootFolder = fso.GetFolder(folderspec)
    Set files = rootFolder.Files
   
    parentFile = 1
   
    For Each file in files
        extension = fso.GetExtensionName(file)
        if extension = "asp" then
            fileToCheck = replace(file.name,"type","")
            fileToCheck = left(fileToCheck,1)
           
                if int(fileToCheck) = int(parentFile) then            
                imageFile = replace(file.name,".asp",".gif")
                response.Write(file.name & "<img src=../template/" & imagefile & ">")
                else
                response.Write("<br>")
                end if
           
            parentFile = fileToCheck
   
        end if
       
    next
   
    ' Ryd op..
   
    set fso = nothing
    set f = nothing
    set files = nothing
    set folderSpec = nothing
   
%>
Avatar billede skyggen2000 Nybegynder
21. marts 2005 - 19:00 #1
Hvad med at knalde dem ind i et stort dobbeltsidet array?

Når du har hentet alle dine filer ind, løber du dem igennem, og fjerner "type".
Herefter kan du lave en split på resten så du har dine koordinater.

Fx. støder du ind type1-1, vil det blive til (1,1) i dit array.

Hvis ikke du kender længen eller bredden af dit array, må du gemme max værdierne mens du kører dem igennem, og først indsætte dem bagefter. Dvs. du knalder først alle værdierne (modfificeret) ind i et tempArray (enkeltsidet).

Når du har fyldt dit array ud, kan du loope det igennem og så har du din tabelopbygning.
Avatar billede mini-me Nybegynder
21. marts 2005 - 21:39 #2
Hmmm kan du lave et eksempel som virker så er pointene dine :)
Avatar billede skyggen2000 Nybegynder
22. marts 2005 - 09:18 #3
Hehe, det vil tage tid at lave et eksempel, det ser ud  som om du sagtens kan skrive VB-Script, og man lærer bedst af at skrive det selv.

jeg bidrager med ideen, der var det du manglede. Du skal være velkommen til at fyre koden ind i dette spg. så skal jeg gerne hjælpe dig med problemer undervejs.

Jeg er ret sikker på det vil virke!
Avatar billede mini-me Nybegynder
22. marts 2005 - 11:41 #4
argh orker ikke at skulle til at sidde og rode med det ;-) Men okay.. jeg giver det et skud
Avatar billede mini-me Nybegynder
22. marts 2005 - 12:13 #5
Hmm ikke sikker jeg helt forstår... nu har jeg lavet nedenstående som hiver det ind i et array men hvordan gruppere jeg dem... forstår ikke helt hvordan jeg får det i en dbl. sidet arry ?

Dim fso, f, files, folderspec
    folderspec = Server.Mappath("../template/")
   
    ' Start File System Objectet...
    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    Set rootFolder = fso.GetFolder(folderspec)
    Set files = rootFolder.Files
   
    For Each file in files
        extension = fso.GetExtensionName(file)
       
        if extension = "asp" then
            fileToCheck = replace(file.name,"type","")
            fileToCheck = replace(fileToCheck,".asp","")
           
            ' Ligger filnavne ind i et dbl. array
            tempArry = fileToCheck & "," & tempArry
           
        end if
    next
   
    tempArry = split(tempArry,",")
   
    for each objItem in tempArry
       
        response.Write(objItem & "<br>")
    next
Avatar billede skyggen2000 Nybegynder
22. marts 2005 - 14:46 #6
Du skal have et midlertidigt array til at opbevare dine modificerede fil navne, eftersom du først er nødt til at tjekke hvor stort du skal dimensionere dit dobbeltsidet array og oprette det før du kan sætte værdierne derind.

Inden du kører værdierne i et temparray, skal du lige lave en split og tjekke om værdierne er højere end dem du starter med. Det er dem du skal bruge til at oprette dit dobbelt sidet array med.

Et dobbeltsidet array (3*3 Array), Oprettelse:
        Dim aryMenu(3)
   
    Dim aryMenu1(3)
   
    aryMenu(0) = aryMenu1
    aryMenu(1) = aryMenu1
    aryMenu(2) = aryMenu1
   
    aryMenu(0)(0)

Eftersom du ikke kender længden på dit array, skal du naturligvis sætte nogle værdier ind. Og iterere igennem dem.

Jeg har ikke sagt det var nemt...:) Der er bare ingen standard løsning på dit problem.
Avatar billede skyggen2000 Nybegynder
22. marts 2005 - 14:46 #7
Du tilgår værdier i dit dobbelt array sådan her, som jeg skrev:
aryMenu(0)(0)
Avatar billede mini-me Nybegynder
22. marts 2005 - 14:47 #8
For fanden da, min matematiske hjerne kan slet ikke bryde alt det der ;-)

Er der andre der evt. kan komme med et fuldt virkende eksempel så ville jeg være taknmmelige ;-)
Avatar billede mortendahl2003 Nybegynder
22. marts 2005 - 17:07 #9
skyggen: Jeg har ikke efterproevet det, men vil der i dit eksempel ikke gaelde at (0)(x) == (1)(x) == (2)(x) ??
Avatar billede mortendahl2003 Nybegynder
22. marts 2005 - 17:10 #10
BTW, et to-dimentionelt array kan ogsaa skrives med Dim aryMenu(3, 3)
Avatar billede ras2000 Nybegynder
23. marts 2005 - 09:32 #11
Du må da også kunne lave det i et hug med
redim preserve arr(n, m)
if n_1 > n then
  redim preserve arr(n_1, m)
end if
Avatar billede skyggen2000 Nybegynder
23. marts 2005 - 09:44 #12
Tænkte nok der var en bedre måde at oprette et dobbelt array, men kunne i lige komme i tanke om det:) Nice by the way!

mortendahl2003 >> Mener du med oprettelsen af arrayet eller hur?
Jeg har heller ikke efterprøvet det, men det funker inde i mit hovede, altså hele ideen:) Det jeg tilføjede var blot en mulig måde at oprette arrayet på ikke initialisere det.

ras2000 >> Det tror jeg du har fuldstændig ret i.

Så er der ikke langt til mål.
Avatar billede mortendahl2003 Nybegynder
23. marts 2005 - 13:48 #13
der staar vel ikke noget derinde, som ikke stod der igaar..
Avatar billede mortendahl2003 Nybegynder
23. marts 2005 - 13:48 #14
doh.. glem den sidste kommentar :D
Avatar billede mini-me Nybegynder
23. marts 2005 - 14:37 #15
Ras2000: Hvad står henholdvis n og m for ? i det stup kode du har smidt..
Avatar billede ras2000 Nybegynder
23. marts 2005 - 14:42 #16
Hvis du opretter et 2-dimensionel array, så står de for antal rækker og kolonner.
F.eks
redim arr(3, 3)
arr(0, 0) = "et eller andet"
arr(0, 1) = "noget nyt"
...
arr(3, 3) = "mere tekst"
...
Nu finder du så ud af at der skal være mere plads.

redim preserve arr(4, 3)
arr(4, 0) = "og så videre"
Avatar billede ras2000 Nybegynder
23. marts 2005 - 14:45 #17
I dit tilfælde ved du måske ikke hvor mange rækker og kolonner du har brug for. Men du klipper tallene ud af dit filnavn, og stopper navnene ind idit array. Altså
arr(0, 0) = "type0-0"
arr(0, 1) = "type0-1"
osv.
Men for at være sikker på at du ikke går udover grænserne for dit array, skal du redimensionere det, hvis et af tallene bliver for store.
Avatar billede mini-me Nybegynder
23. marts 2005 - 18:02 #18
ras2000: nu har jeg siddet og bøvlet med det, er det muligt at du kunne poste noget kode som virkede i forhold til det jeg har skrevet.. ?
Avatar billede mini-me Nybegynder
26. marts 2005 - 17:50 #19
Er der nogen der kan hjælpe mig færdig med det her??
Avatar billede mini-me Nybegynder
10. april 2005 - 22:31 #20
<%
    Dim fso, f, files, folderspec
    folderspec = Server.Mappath("../template/")
   
    ' Start File System Objectet...
    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    Set rootFolder = fso.GetFolder(folderspec)
    Set files = rootFolder.Files
   
   
   
    Const rows = 10
    Const cols = 10
   
    ReDim aryCells(rows, cols)

    For row = 0 To rows - 1
        For col = 0 To cols - 1
            aryCells(row, col) = ""
        Next
    Next
   
    For Each file in files
        extension = fso.GetExtensionName(file)
       
        If LCase(extension) = "asp" then
            filename = file.name
            fileToCheck = replace(filename, "type", "")
            fileToCheck = replace(fileToCheck, ".asp", "")
            aryNums = Split(fileToCheck, "-")
           
            If CInt(aryNums(0)) > rows Or CInt(aryNums(1)) > cols Then
                Response.Write("WTF! ERROR!" & aryNums(0) & " - " & aryNums(1))
                Response.End
            End If
           
            aryCells(aryNums(0) - 1, aryNums(1) - 1) = filename
        End If
    Next
   
    %><table border=0 cellpadding="0" cellspacing="4"><%
   
    For row = 0 To rows - 1
        %><tr><%
        For col = 0 To cols - 1
            %><td><%
            If aryCells(row, col) <> "" Then
                image = replace(aryCells(row, col),".asp",".gif")
                Response.Write("<input type=""radio"" name=""TemplateId"" value=""" & aryCells(row, col) & """><img src=""../template/" & image & """>")
            End If
            %></td>
           
        <%
        Next
        %></tr>
       
        <tr><td colspan="10" bgcolor="#000000"></td></tr>
    <%
    Next
   
    %></table><%   
   
   

   
    set fso = nothing
    set f = nothing
    set files = nothing
    set folderSpec = nothing
   
%>
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