• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

gesorteerd Array

Status
Niet open voor verdere reacties.

pasan

Terugkerende gebruiker
Lid geworden
6 nov 2010
Berichten
1.110
Van de site van snb http://www.snb-vba.eu/VBA_Dictionary.html
heb ik volgend stukje code gebruikt om csv bestanden uit een folder op te halen
Code:
Sub M_integratie_csv()
sn = Split(CreateObject("wscript.shell").exec("cmd /c Dir ""G:\OF\*.csv"" /b").stdout.readall, vbCrLf) 

With CreateObject("scripting.dictionary")
For j = 0 To UBound(sn) 
.Item(sn(j)) = GetObject("G:\OF\" & sn(j)).Sheets(1).UsedRange.Value
GetObject("G:\OF\" & sn(j)).Close False
Next

Sheets.Add.Name = "totaal"

For Each it In .items
Sheets("totaal").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(UBound(it), UBound(it, 2)) = it
Next
End With
End Sub

de bestand namen in mijn folder hebben een numerieke oplopende waarde
nu is mijn vraag of bij de volgende regel de bestandsnamen altijd gesorteerd weergegeven worden (het lijkt er wel op maar wil toch graag zeker weten)
Code:
sn = Split(CreateObject("wscript.shell").exec("cmd /c Dir ""G:\OF\*.csv"" /b").stdout.readall, vbCrLf)
 
Laatst bewerkt:
Volgens mij staan ze al gesorteerd in je map, en zullen in de array net zo komen.
Als dat niet het geval is kun je altijd nog gebruik maken van:
Code:
with CreateObject("System.Collections.ArrayList")
de elementen die je gebruikt zijn:
Code:
if not .contains    'als niet bestaat in array
.add                'voeg toe
.sort               'sorteer
.toarray          'de array
 
ik had de bestanden op verschillende manieren gesorteerd neer gezet in de map en het lijkt erop dat de SPLIT regel elke keer alles gesorteerd op naam weer geeft.
De volgende code ook van de hand van snb had ik er bij gezet om te sorteren, maar wellicht overbodig
Wegens gebrek aan ervaring deze vraag gesteld.

Code:
  With CreateObject("ADODB.recordset") 'sorteer de lijst op naam
   .Fields.Append "item", 200, 30
   .Open

    For j = 0 To UBound(sn)
    .AddNew
     .Fields("item") = sn(j)
     .Update
      Next
      
    .Sort = "item"
  a_sp = Split(.GetString, vbCr)       
  End With
 
Als je die Dir opdracht uit die Split regel even met de hand uitvoert in een command box zie je direct wat de sortering is. Dus:
Dir G:\OF\*.csv /b
 
Mag ik dan stellen dat zolang alle bestand namen numeriek oplopend blijven dat de sortering kloppend blijft in de toekomst en is die extra sorteer stap overbodig?
 
of:
Code:
MsgBox Join(Split(CreateObject("wscript.shell").exec("cmd /c Dir ""G:\OF\*.csv"" /b").stdout.readall, vbLf), vbLf)
 
Tik in die commandbox eens de opdracht DIR /?
Dan zie je precies welke switches er allemaal zijn en wat ze doen.
 
wat is het nut van een ouderwets DOS DIR-commando zonder sorteerfunctie ;)

Code:
sn = Split(CreateObject("wscript.shell").exec("cmd /c Dir ""E:\Users\user name\Documents\AUTOHOTKEY\*.csv"" [COLOR="#FF0000"]/o:n[/COLOR] /b").stdout.readall, vbCrLf)

bron: http://www.computerhope.com/dirhlp.htm
 
Precies :)
Daar kun je ook de uitleg zien van wat alphamax zei.
Die uitleg staat trouwens ook op de pagina waar hij naar verwijst.
 
Laatst bewerkt:
Bedankt allemaal voor de uitleg het is me weer een stukkie duidelijker en uiteraard fijne feestdagen alvast
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan