Toon posts:

[VBA] Routine om een bestandenlijst te maken

Pagina: 1
Acties:
  • 397 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben een programma aan het schrijven om een lijst (in Excel) te maken waarin alle bestanden uit een bepaalde directory (EN subdirectories) komen te staan.

Ik kom nu 1 level diep en kan niet echt een slimme manier verzinnen om ook alle subdirectories door te spitten. Ik heb nu deze code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
    d = Dir(strDir & "\", vbDirectory)
    Do While d <> ""
        If (GetAttr(strDir & "\" & d) And vbDirectory) = vbDirectory Then
            If d <> "." And d <> ".." Then
                R = R + 1
                Cells(R, 1) = f
                Cells(R, 2) = FileLen(strDir & d)
                Cells(R, 3) = strDir
             End If
        End If
        d = Dir()
    Loop


Dit is experimentele code dus nog niet helemaal ok.

Het gaat me vooral om een routine om iedere keer een level dieper te gaan om te kijken of er subdirectories zijn en als die er zijn dan de files in de lijst zetten en vervolgens kijken of er weer subdirectories zijn enz....

Ik ben op het internet al aan het zoeken geweest want een dergelijke routine zal er vast al wel zijn maar ik heb em helaas nog niet kunnen vinden.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
recursie ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
Geef eens een voorzetje?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
code:
1
2
3
4
5
6
7
8
9
10
11
12
routine traverse_path ( path , level )

    while file == dir( path ) 
        
        if file == subdir 
            traverse_path( file, level + 1 )
        else
            /* doe je ding hier */
        end if
    end while 
 
end routine

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Tip: Ik zou trouwens een hoofdfunctie maken (die de dirs ophaalt) en een functie die alle files retourneert (of plempt in je werkblad).

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
BtM909 schreef op 22 juni 2004 @ 12:11:
Tip: Ik zou trouwens een hoofdfunctie maken (die de dirs ophaalt) en een functie die alle files retourneert (of plempt in je werkblad).
Hoe bedoel je dat?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
BtM909 schreef op 22 juni 2004 @ 12:11:
Tip: Ik zou trouwens een hoofdfunctie maken (die de dirs ophaalt) en een functie die alle files retourneert (of plempt in je werkblad).
Om welke reden ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
farlane schreef op 22 juni 2004 @ 11:03:
code:
1
2
3
4
5
6
7
8
9
10
11
12
routine traverse_path ( path , level )

    while file == dir( path ) 
        
        if file == subdir 
            traverse_path( file, level + 1 )
        else
            /* doe je ding hier */
        end if
    end while 
 
end routine
Farlane, is dit VBA code. Hij kent de traverse_path functie niet

Verwijderd

Topicstarter
Iemand?

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
Verwijderd schreef op 22 juni 2004 @ 15:09:
[...]
Farlane, is dit VBA code. Hij kent de traverse_path functie niet
Ik heb het idee dat dat pseudo-code is ;-)

Verwijderd

Topicstarter
Hmmm, in dat geval begrijp ik de code niet helemaal. Hoe kan ik nu op een eenvoudige manier een level dieper gaan maar ook weer terug zodat ik geen subdirectories ga missen?

Dat hier niet iets van een standaard routine voor is, pffffff

  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 21-05 22:25
Multiuser: Dit heet pseudo-code. Dit is code die uitlegt wat je moet doen en die je zelf moet omvormen naar echte code. In VBA zul je bijvoorbeeld
code:
1
2
routine traverse_path ( path , level )
end routine

moeten vervangen door:
code:
1
2
3
sub traverse_path(path, level)

end sub

of door
code:
1
2
3
function traverse_path(path, level)

end function


en zo zijn er nog wel meer dingen die je zelf zult moeten doen (while... end while vervangen door while... wend, if..else..end if vervangen door if..then..else..end if, /* doe je ding hier */ vervangen door de code in je startpost, etc.)

Op GOT wordt er van je verwacht dat je zelf de oplossing bedenkt aan de hand van tips! Die oplossing plaats je dan als afsluiting van je topic als dank aan iedereen die je geholpen heeft.

Mijn tip: Zoek eens verder op recursie en let daarbij op het tweemaal voorkomen van traverse_path in het voorbeeld van farlane.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Overzicht houden op je recursie :?

Ik doe het althans vaak zo, omdat ik dusdanig veel code heb, dat je dan door de vele recursies niet meer weet waar je bent (bijna OO in Excel ;))

Ik zal zo ff een voorbeeld maken.

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Erg geduldig uitgelegd _/-\o_
Overzicht houden op je recursie

Ik doe het althans vaak zo, omdat ik dusdanig veel code heb, dat je dan door de vele recursies niet meer weet waar je bent (bijna OO in Excel )

Ik zal zo ff een voorbeeld maken.
Ik had die level parameter erin zitten om je recursie(niveau) te bewaken, dat is toch behoorlijk overzichtelijk. ( Als je het overzicht kwijt bent door de vele recursies zou ik wat minder recursie gebruiken ;) Simpeler = Beter )

NB Overigens zie ik de link tussen recursie en OO niet zo.....

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1