[VB] Dir("C:\*.*") - meerdere extensies

Pagina: 1
Acties:

  • supermidget
  • Registratie: Juni 2002
  • Niet online
Code om een lijst met files in een listbox te krijgen:

Visual Basic:
1
2
3
4
5
6
7
Private Sub cmd1_click()
    temp = Dir("C:\" & txt_filter)
    Do Until temp = VbNullstring
        lst_files.AddItem temp
        temp = Dir()
    Loop
End Sub


txt_filter is een textbox. Als je daar *.jpg invult dan zal hij alleen jpg's laten zien. Als je *file* invult showt ie alleen bestanden met "file" in hun naam.

Wat ik dus wil is dat je meerdere extensies kan invullen, maar ik weet niet op wat voor manier dat moet ingevuld worden. De help van VB zegt dit:
Dir supports the use of multiple character (*) and single character (?) wildcards to specify multiple files.
Ik heb alles al geprobeerd en overal gezocht: "*.jpg, *.gif" of "*.jpg?*.gif" of "*.jpg?gif" enzovoort

[ Voor 0% gewijzigd door supermidget op 01-10-2002 17:50 . Reden: help quote ]


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 30-08 17:59

Gerco

Professional Newbie

Dan moet je je lusje meerdere keren draaien, steeds met 1 van die extensies. Bij mijn weten heeft Dir() hier geen ingebouwde ondersteuning voor (het moet niet TE gek worden natuurlijk).

Gewoon de filters splitsen op spatie en voor elke filter de lus doorlopen.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • supermidget
  • Registratie: Juni 2002
  • Niet online
:'( maar ik heb geen zin om dat te programmeren 8) ik ben misschien wel lui, maar t leek me gewoon wel makkelijk als t simpel kon. Je kan namelijk wèl bij elke Open Dialog in windows "*.jpg;*.bmp" invullen en dat werkt. Dit werkt dus niet in een vbprog(of zouden ze het allemaal ook handmatige hebben gedaan?).

En wat bedoelt die Help dan met "? for multiple files"?

ik begin wel vast met het maken van een loopje en ik hoop dat iemand het zich ineens herinnerd :)

  • Bigs
  • Registratie: Mei 2000
  • Niet online
Dat '? for multiple files' is gewoon wat jij ook doet met *file*. ? is een wildcard die 1 teken vervangt, dus als je zoekt op "f?le" krijg je zowel "file" als "fale" terug.
Die dir functie zal inderdaad niet zo geavanceerd zijn dat ie ook op meerdere extensies kan zoeken. Ik bedoel, hey, tis maar Visual Basic :)

  • Primal
  • Registratie: Augustus 2001
  • Laatst online: 07:40
supermidget schreef op 01 oktober 2002 @ 18:09:
:'( maar ik heb geen zin om dat te programmeren 8) ik ben misschien wel lui, maar t leek me gewoon wel makkelijk als t simpel kon. ...
ik begin wel vast met het maken van een loopje en ik hoop dat iemand het zich ineens herinnerd :)
* Primal wilde eerst een heel verhaal ophangen over de tijd dat hij nog low-level Assembler/C programmeerde (tegenwoordig C/C++) en welke problemen daar om de hoek kwamen kijken. * Primal denkt daarnaast (met weemoed ;) ) aan zijn HTS-schooltijd waar een dergelijke instelling beloond werd met een "volgend jaar ben jij de eerste". * Primal heeft het idee dat het denk- en inspanningsniveau van sommige aankomende c.q. wannabee "programmeurs" dalende is.

Als men zulke simpele problemen al moeilijk vind of van het graad "ik wil het simpel". Tjonge jonge, Wake up!. Dit is VB = Visual Basic!! Makkelijker kan het niet! Enige inspanning mag wel verwacht worden of wil men zijn niveau nog verder verlagen?! No offense, maar VB is al klik-en-sleep. Alle (design-time) objecten, runtime-objecten trouwens ook, barsten van de properties die je heel simpel kunt initialiseren/uitlezen en methods die je makkelijk kunt accessen. De taal is een eitje. Indien deze taal nog te veel inspanning vereist, een schande eigenlijk, dan dient men toch eens op zoek te gaan naar een auto-generate-application programma.

LET OP: Met dit laatste doel ik dus op mensen die een dergelijk simpel probleem het allemaal teveel moeite vinden zoals supermidget die ik quote en niet op de mensen die het niveau niet kunnen halen (daar heb ik gewoon respect voor).

Ik kon het niet laten.

"The fastest code, is the code that is never called."


  • ddkiller0900
  • Registratie: Juli 2001
  • Laatst online: 22-08 19:34
probeer anders met een fuctie dat je een parameter meegeeft die de extensie bevat :? is toch heel simpel om te maken

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub cmd1_click()
    dim arrTmp as Variant
    dim lCnt as Long
    arrTmp = Array("*.jpg","*.bla","*.pff")

    For lCnt = 1 to UBound(arrTmp)
        temp = Dir("C:\" & arrTmp(lCnt))
        Do Until temp = VbNullstring
             lst_files.AddItem temp
             temp = Dir()
        Loop
    Next lCnt
End Sub


uit het blote bolletje . .

  • supermidget
  • Registratie: Juni 2002
  • Niet online
Primal schreef op 01 oktober 2002 @ 18:26:
[...]

Ik kon het niet laten.
ik ben liever lui als het makkelijker kan. Als het niet makkelijk kan neem ik heus wel de moeite om de fulllength code te maken. Als ik iets (een functie) wil dan zal ik alles doen om dat te bereiken (binnen t redelijke). Dus mijn luiheid beperkt niet mijn creativiteit of de features in mijn programma. Soms ben je bijvoorbeeld al zolang bezig met allerlei lastige codes dat je na een tijdje effe hoopt dat t makkelijk is. Zoals nu...
ik ben nog een beginnend programmeur (sinds een half jaar oid) dus voor ècht moeilijke klussen heb ik nooit gestaan.. al is het natuurlijk zo dat een klus die voor mij "echt moeilijk" is, voor iemand die op hoger niveau natuurlijk makkelijker is. Dus wat dat betreft zal nextlevel klus altijd ongeveer evenveel moeilijker zijn als de vorige (wie begint er nou aan het moeilijkste? je begint toch altijd met makkelijk?)

ik vat niet meer wat nou de kern is wat ik heb gezegd maar iig... ik ben dus niet een programmeer wannabe die geen enkele moeite wil doen om een codemaster te worden.

even ter bewijs (neem maar aan dat ik t niet geript heb), helemaal zelf bedacht, mijn code om txt_1old te vervangen door txt_1new in 't textvak str_current
Visual Basic:
1
2
3
4
5
6
7
8
9
10
    If txt_1old <> "" Then
    Dim str_start1 As String
    str_start1 = "1"
        Do Until InStr(str_start1, str_current, txt_1old, 3) = "0"
            str_current.SelStart = InStr(str_start1, str_current, txt_1old, 3) - 1
            str_current.SelLength = Len(txt_1old)
            str_current.SelText = txt_1new
            str_start1 = str_current.SelStart + str_current.SelLength
        Loop
    End If


eerst was de bug dat hij bij het vervangen van ":" door bijvoorbeeld ":)" eeuwig bleef doorgaan omdat hij telkens controleert of er niet nog ergens ":" staat
(ps: kom nou niet met "ik had dat heel anders gedaan" of "wat een lompe code", t gaat erom dat ik best wel zelf codes bedenk)

===
edit:

Skizmo, je code doet het niet :'( out of range ofzo


PS: Er blijkt geen functie in vb te zitten die dit soort multifilefiltering kan ofzo dus zal ik zelf een maken.. bedankt voor de hulp allemaal :d

Verwijderd

Grote jongen... ;)
Pagina: 1