vbscript-Programmierung Rekursion-Techniken
Ich bin auf der Suche nach Experten Einblick über Rekursion in vbscript.
Aus verschiedenen Beispielen, online gefunden habe ich den folgenden code, der funktioniert übrigens.
- http://saltwetbytes.wordpress.com/2010/05/04/vbscript-grabbing-subfolders-recursively/
- http://technet.microsoft.com/en-us/library/ee198872.aspx
Function GetAllSubFolders(RootFolder, ByRef pSubfoldersList) Dim fso, SubFolder, root Set fso = CreateObject("scripting.filesystemobject") set root = fso.getfolder(RootFolder) For Each Subfolder in root.SubFolders If pSubFoldersList = "" Then pSubFoldersList = Subfolder.Path Else pSubFoldersList = pSubFoldersList & "|" & Subfolder.Path End If GetAllSubFolders Subfolder, pSubFoldersList Next GetAllSubFolders = pSubFoldersList End Function
Meine Frage ist: Ist das eine gute Herangehensweise, wenn es um die Schaffung einer rekursiven Funktion (mit einem parameter für das speichern von vorherigen Ergebnissen)?
Ich lieber setzen diese in einem (self-contained) "- Funktion", so gibt die Prozedur den subsubfolders als das Ergebnis. Aber die meisten Beispiele gefunden, eine "sub" ich bin immer verwirrt, wenn es um die "sub" vs "Funktion" (ich verstehe, wenn Sie wollen, ein Verfahren, das zurückgeben muss, etwas, das Sie verwenden, eine Funktion, imho scheint dies der Fall zu sein, in diesem Beispiel)
Aber ich könnte auch ein "sub" und nur einfache Referenz der output-parameter (ByRef pSubfoldersList)
Also, was ist die beste Praxis-oder ist es besser einen ganz anderen Ansatz alle zusammen?
(die Funktion ist in diesem Beispiele ist auch sehr langsam im Vergleich zu [shell.exec "cmd /c dir RootFolder /s /b /a:d"], ich denke, das ist eine Nebenwirkung von der Rekursion oder vielleicht das FSO-Modell nur sehr langsam?)
InformationsquelleAutor user1348255 | 2012-04-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
ob es gut ist, die Praxis zu übergeben, das Ergebnis in eine rekursive Funktion, die ich nicht wirklich wissen, Sie können dies testen, indem Sie es auf diese Weise und die andere und vergleicht man die Zeit und den Speicher übernommen. Habe nicht versucht, diese mit Ihrer version dazu führen, dass ich die Fehlermeldung erhalten: "Microsoft VBScript runtime error: Permission denied", wenn ich starten Sie von der Wurzel des c:
Das eigentliche problem mit deiner Lösung ist die Verkettung, das dauert, weil das in Ihrem Fall GROßE variable wird jedes mal erstellt. Besser waren zum speichern des Ergebnisses in einem array oder in dem Fall von VBscript in einem Wörterbuch. Ich poste ein Beispiel.
Was der Unterschied zwischen sub und function betrifft: du hast Recht, über den Hauptunterschied, die Rückkehr zu einem Ergebnis, aber das ist optional, so dass ich immer mit Funktionen, der einzige Nachteil ist, dass wenn Sie nicht zuweisen den Wert einer Variablen zu, und verwenden Sie mehr als 2 Parameter, die Sie "call". Wenn du deinen Ansatz mit ByRef man könnte auch definieren, die var in den wichtigsten globalen Kontext, es ist vielleicht weniger gekapselt, aber besser lesbar und Sie lassen sich leichter wiederverwenden, oder Debuggen Sie die Ergebnisse.
Was die Geschwindigkeit betrifft: vbscript ist SEHR langsam in Datei-handling, wenn Sie die WMI-vielleicht könnten Sie die Geschwindigkeit ein wenig, aber nicht viel, in der Tat für einige Operationen ist es besser, zu berappen und lassen Sie das OS kümmern. Ich jetzt das Programm in Ruby gibt es die meisten Arbeitsplätze, wie Sie dies schreiben Sie in eine Zeile des Codes, und es ist viel schneller.
Sprechen über schnell, wenn Ihr einzige Zweck ist, um eine Liste der Dateien, um zu wissen, das tool "search everything", in weniger als einer Sekunde können Sie durchsuchen Sie Millionen von Dateien, wenn Sie nicht wissen, es check it out !
Hier ein Beispiel mit dem Wörterbuch
nun, es hängt davon ab, wie Sie definieren "self contained", in meiner Antwort oben habe ich verwenden iCount als Globale var die Sie zugreifen können, in Ihren Funktionen, sonst müssen Sie übergeben der variable an eine weitere Funktion (oder der gleichen im Falle von Rekursion) von Referenz, wie Sie es getan haben. Das gleiche gilt für alle Sprachen, die ich kenne, empfehle ich Ruby, weil es auch eine scripting-Sprache, sondern mit allen, die macht von kompilierten Sprachen und doch einfach zu bedienen und zu erlernen.
InformationsquelleAutor peter