[GastForen Programmierung/Entwicklung AppleScript Anleitung für ein rekursives Droplet

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Anleitung für ein rekursives Droplet

Hans Haesler
  
Beiträge gesamt: 5816

11. Jan 2004, 21:51
Beitrag # 1 von 1
Bewertung:
(544 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Auf wiederholtes "Drängen" ( ;-) von RaBa ( http://www.page-online.de/page/forum/viewthread/2109 ) habe ich mich endlich näher mit der rekursiven Technik befasst. "Rekursiv" bedeutet, dass eine Subroutine (oder Handler) wiederholt aus einer Schleife aufgerufen wird, welche sich in derselben Subroutine befindet.

Dies ist ziemlich heikel, weil sich leicht ein Überlaufen des Speichers ergeben kann. Aber ich habe zufälligerweise ein Skelett gefunden, welches ich beim Namen-Säuberungs-Droplet erfolgreich einsetzen konnte.

Das Muster-Script benutzt den 'info for'-Befehl, um herauszufinden, ob das aktuelle Objekt eine Datei oder ein Ordner ist. Das Resultat von 'info for' ist eine Liste, welche allerlei Wissenwertes über das Objekt enthält. Unter anderem den Namen, das Modifikationsdatum und die Anzahl Bytes. Aus diesem Grunde sollte man
'info for' vermeiden, wenn ein Ordner anvisiert ist. Je nach Anzahl und Schwere der Dateien, welche sich im Ordner befinden, kann es dauern, bis alle Bytes zusammengezählt sind.

Diese Bremse kann vermieden werden, indem nur der Pfad im Textformat (nicht als 'alias') angeschaut wird. Wenn dieser mit einem Doppelpunkt endet, dann ist das Objekt ein Ordner, sonst ist es eine Datei.

Nachstehend ein kommentiertes Skelett. Achtung: so wie es hier steht, führt das Script nichts aus. Es soll nur den Ablauf darstellen. Wer sich ein funktionierendes Script ansehen möchte, kann bei mir das ebenfalls kommentierte Namen-Säuberungs-Droplet verlangen.
---
-- einen Dialog zeigen, falls der Anwender einen Doppelklick auf das Droplet macht
on run
  display dialog "Dateien und Ordner auf dem Icon
dieses Droplets deponieren." buttons "OK" default button 1 with icon 0
end run

-- der 'open handler', welcher auf das Fallenlassen von Objekten reagiert
on open allObjects
  -- Wiederholschleife, welche alle gedroppten Objekte zum Handler 'processObject' schickt
  repeat with aObject in allObjects
    processObject(aObject)
  end repeat
end open

-- im folgenden Handler wird festgestellt, ob das Objekt ein Ordner oder eine Datei ist.
-- Bei Ordnern wird eine Liste des Inhalts erstellt und die Elemente rekursiv behandelt (d.h. zum aktuellen Handler geschickt)
-- Dateien werden zum Handler 'processFile' gesandt
on processObject(aObject)
  -- die Variable 'aFolder' wird auf 'nicht wahr' gesetzt
  set aFolder to false
  -- wenn der Pfad mit einem Doppelpunkt endet, wird die Variable 'aFolder' auf 'wahr' gesetzt
  if (aObject as string) ends with ":" then
    set aFolder to true
  end if
  -- der Test stellt den Wert der Variable fest und die entsprechende Aktion wird ausgelöst
  if aFolder is true then
    -- die Liste der Objekte wird erstellt (ohne unsichtbare Dateien)
    set contentsList to list folder aObject without invisibles
    -- dies ist das rekursive Teil: die Wiederholschleife schickt alle Objekte zum Handler, in welchem sie sich selbst befindet
    repeat with anItem in contentsList
      set objPath to ((aObject as string) & anItem)
      processObject(objPath as alias)
    end repeat
   
    -- falls der Ordner untersucht werden muss: den Pfad zum Handler 'processFolder' schicken
    processFolder(aObject as string)
    -- wenn das Objekt eine Datei ist, dann wird der Pfad dem Handler 'processFile' übergeben
  else
    processFile(aObject as string)
  end if
end processObject

-- in diesem Handler wird die Datei behandelt
on processFile(aFile)
  -- entsprechende Befehle hier einfügen 
end processFile

-- in diesem Handler wird der Ordner behandelt
on processFolder(aFolder)
  -- entsprechende Befehle hier einfügen 
end processFolder
---

Hans Haesler <[email protected]>
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022
Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022