Skeeve •---->


Anmeldedatum: 20.04.2006 Beiträge: 1067
|
Verfasst am: 30.05.2007 - 12:35 Titel: rekursives droplet |
|
|
Da ich es immer mal wieder brauche, hier ein allgemeines "rekursives" droplet.
"rekursiv" da es nicht wirklich rekursiv arbeitet sondern die Elemente, die noch abzuarbeiten sind, in einer Liste mitführt.
Dies ist natürlich nur ein Muster. Es müsssen an entsprechender Stelle natürlich noch Handler eingebaut werden.
Es fehlt zum Beispiel der Test, ob die entsprechende Datei überhaupt verarbeitet werden kann und die Verarbeitung selbst muß natürlich auch für den jeweiligen Verwendungszweck angepaßt werden.
Ich hoffe, daß es dennoch ab und an mal nützlich ist, das Muster hier zur Verfügung zu haben.
Zitat: | on run
set something to choose file with multiple selections allowed
-- oder
set something to choose folder with multiple selections allowed
display dialog process_recursively(something, true)
end run
on open something
display dialog process_recursively(something, true)
end open
to process_recursively(the_thing, signal_error)
-- eine liste?
if list is class of the_thing then
-- mit nur einem Element?
if (count of the_thing) is 1 and not folder of (info for first item of the_thing) then
-- Dann nur dieses Element behandeln
return process_recursively(first item of the_thing, signal_error)
end if
set zaehler to 0
-- ansonsten jedes Element behandeln
repeat while (count of the_thing) > 0
-- hol das erste
set element to first item of the_thing
-- und nimm es aus der Liste
set the_thing to the rest of the_thing
-- ist es ein folder?
if folder of (info for element) then
tell application "Finder"
-- dann hole alle files aus dem Folder
-- und stell sie vorne in die Liste
copy (every file of element) to the beginning of the_thing
-- stelle alle folder nach hinten
copy (every folder of element) to the end of the_thing
end tell
else
-- kein folder, dann behandeln
set zaehler to zaehler + process_recursively(element, false)
end if
end repeat
return zaehler
end if
-- hier die Behandlung der einzelnen Elemente
-- wenn gewünscht einen passenden Test eintragen
if das_kann_verarbeitet_werden(the_thing) then
-- und dann die Routine zur Behandlung
-- einzelner Dateien aufrufen
-- oder direkt hier einsetzen
process(the_thing)
return 1
end if
-- Sonst ein Fehler
if signal_error then
display alert "Keine Ahnung, wie ich damit umgehen soll: " & (displayed name of (info for the_thing)) as informational
error -128
end if
return 0
end process_recursively
|
_________________ "All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies") |
|