Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

rekursives droplet

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> OS X-Snippets
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 30.05.2007 - 12:35    Titel: rekursives droplet Antworten mit Zitat

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")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> OS X-Snippets Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter