Hallo an alle,
ich habe ein - möglicherweise - unlösbares Problem mit dem scripting.dictionary., ja hab ich, werde aber nicht wirklich schlau daraus.
Aufgabenstellung:
Ich lese einen ganzen Verzeichnisbaum ein, durchwandere diesen (anhand vom scripting.dictionary) top down, drucke verschiedene Dateitypen aus (xls,doc,pdf,jpg - alle andere werden übergangen). Jedesmal wenn das Verzeichnis wechselt wird ein Zwischenblatt (aus einem anderem Druckerschacht mit andersfarbigem Papier) mit dem Verzeichnisnamen (letzter Verzeichnisnamenteil des Pfades) in groß drauf, ausgedruckt.
Ein Statusfenster sowie eine Logdatei werden mitgeführt.
Ich verwende das um sehr große Dokumentationen (> 30.000 Seiten) über Nacht auszudrucken (deshalb auch die Log-Funktion ..).
Funktioniert auch soweit ... ABER: die Reihenfolge stimmt nicht ganz.
Ich bekomme:
C:\1AA\2bb,
C:\1AA\2bb\3ab,
C:\1AA\2bb\3ab\verweis auf andere stelle in der doku.pdf, 4 kB
C:\1AA\2bb\3ab\verweis auf externe doku.pdf, 5 kB
C:\1AA\2bb\3bb, 5 kB
C:\1AA\2bb\3bb\4bb, 5 kB
C:\1AA\2bb\3bb\4bb\5ab, 5 kB
C:\1AA\2bb\3bb\4bb\5ab\verweis auf externe doku.pdf, 5 kB
C:\1AA\2bb\3bb\4bb\5bb, 5 kB
C:\1AA\2bb\3bb\4bb\5bb\verweis auf andere stelle in der doku.pdf, 4 kB
C:\1AA\2bb\3bb\verweis auf andere stelle in der doku.pdf, 4 kB
c:\1AA\2bb\3bb\verweis auf externe doku.pdf, 5 kB
C:\1AA\2bb\verweis auf externe doku.pdf, 5 kB
möchte aber:
C:\1AA\2bb,
C:\1AA\2bb\verweis auf externe doku.pdf, 5 kB
C:\1AA\2bb\3ab,
C:\1AA\2bb\3ab\verweis auf andere stelle in der doku.pdf, 4 kB
C:\1AA\2bb\3ab\verweis auf externe doku.pdf, 5 kB
C:\1AA\2bb\3bb, 5 kB
C:\1AA\2bb\3bb\verweis auf externe doku.pdf, 5 kB
C:\1AA\2bb\3bb\verweis auf andere stelle in der doku.pdf, 4 kB
C:\1AA\2bb\3bb\4bb, 5 kB
C:\1AA\2bb\3bb\4bb\5ab, 5 kB
C:\1AA\2bb\3bb\4bb\5ab\verweis auf externe doku.pdf, 5 kB
C:\1AA\2bb\3bb\4bb\5bb, 5 kB
C:\1AA\2bb\3bb\4bb\5bb\verweis auf andere stelle in der doku.pdf, 4 kB
hier habe ich den entscheidenden Schnipsel der das Einlesen - scripting.dictionary - erledigt:
; damit bekommen alle Pfade (ohne Dateien) hinten einen \ dazu - damit weiß ich das das ein Directory ==> Verzeichniszwischenblatt, ist
; Function Name: _FileListToDict($vFolder[, $bRec[, $iFileInformation[, $bRelative[, $iMaxDepth[, $iFilesAndOrFolders]]]]])
; Description: Speichert Dateien, optional mit einer gewählten Eigenschaft, in einerm Dictionary-Objekt.
; Parameter(s): $vFolder = Ein Startverzeichnis oder ein eindimensionales Array von Startverzeichnissen für die Dateisuche.
; $iMaxDepth = Anzahl der ausgelesenen Unterverzeichnisse unterhalb der/des Startverzeichniss(es) (Standardwert = 100).
; $iFilesAndOrFolders = $oFiles.Keys haben relativem Dateipfad bei $bRelative = True (Standardwert = False).
; Return Value(s): Zurückgegeben wird ein Objekt mit den kompletten oder relativen Dateipfaden als Key (abhängig von $bRelative)
Func _FileListToDict($vFolder, $bRec = True, $iFileInformation = -1, $bRelative = False, $iMaxDepth = 100, $iFilesOrFolders = 0)
If @extended And $bRec And $iDepth < $iMaxDepth Then ; Wenn es sich um ein Ordner handelt wird in diesem weiter gesucht - solange max. Rekursionstiefe nicht erreicht.
If $iFilesOrFolders = 1 And StringInStr(FileGetAttrib($sFolder & "\" & $sFile), "D") Then ContinueLoop
If $iFilesOrFolders = 2 And Not StringInStr(FileGetAttrib($sFolder & "\" & $sFile), "D") Then ContinueLoop
If Not StringInStr(FileGetAttrib($sFolder & "\" & $sFile), "D") Then $iInfo = FileGetSize($sFolder & "\" & $sFile)
Ist das mit dem Objekt scripting.dictionary überhaupt möglich (ohne Umwege über dictionary -> array und wieder zurück zu nehmen)?
Mit _filetoarrayrec würde es funktionieren (getestet ) aber da verliere ich ein paar Möglichkeiten und müßte vor allem das ganze Programm ändern. Natürlich ist mir die Sortierung erst aufgefallen als alles fertig war
.
Ich bin schon für Hinweise - geht/geht nicht - dankbar.
Grüße
GML