[GastForen Programmierung/Entwicklung AppleScript finder-befehl fuer "finger weg"

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

finder-befehl fuer "finger weg"

Anonym
Beiträge gesamt: 22827

15. Okt 2003, 14:40
Beitrag # 1 von 6
Bewertung:
(1780 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo forum, hallo hans ;-)

ich haette hier noch mal eine etwas wueste konstruktion:

property PSpath : alias "Mac HD 4015ns (Mac OS 9):Adobe® Photoshop® 5.5:Adobe® Photoshop® 5.5"

on adding folder items to thisFolder after receiving itemList
 
 repeat with aFile in itemList
  if (aFile as string) contains ".eps" then
   tell application "Finder" to count file
  else
   if (aFile as string) contains "4c" then
    tell application "Finder" to open file aFile using PSpath
   else
    tell application "Finder" to open file aFile using PSpath
    tell application "Adobe® Photoshop® 5.5" to «event miscdosc» "sw"
   end if
  end if
  if (aFile as string) does not contain ".eps" then
   tell application "Finder" to delete file aFile
  end if
 end repeat
end adding folder items to


in der ersten abfrage nach ".eps" soll der finder einfach die finger von der datei lassen, da ich aber keinen befehl fuer "nichtstun" gefunden habe, lasse ich ihn zaehlen. das schien mir ungefaehrlich ;-). in der zweiten schleife loescht der finder die geoeffnete datei -> besteht da eventuell ein risiko, das der finder eine falsche datei loescht?

cu

hans
X

finder-befehl fuer "finger weg"

Hans Haesler
  
Beiträge gesamt: 5826

15. Okt 2003, 18:11
Beitrag # 2 von 6
Beitrag ID: #418353
Bewertung:
(1779 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

der Befehl für "Nichtstun": ganz einfach nichts befehlen. Auf die Zeile mit 'if (aFile as string) contains ".eps" then' sogleich die Zeile 'else' folgen lassen. Damit wird, wenn die Bedingung zutrifft, nichts ausgeführt:
---
    if (aFile as string) contains ".eps" then
    else
---
So wie ich den Code interpretiere, werden nur Dateien, deren Namen nicht '.eps' enthalten, geöffnet und dann gelöscht. Das Zeitschinden mit dem Nichtstun bringt also nichts. Und Dateien, welche '.eps' enthalten, werden gar nicht beachtet.

Zudem glaube ich, dass eine Zeile fehlt, weil 4farbige Bilder zwar geöffnet, aber nicht von Photoshop behandelt werden.

Vielleicht verstehe ich die Aufgabe falsch, aber man könnte das Script so umschreiben:
---
property PSpath : alias "Mac HD 4015ns (Mac OS 9):Adobe® Photoshop® 5.5:Adobe® Photoshop® 5.5"

on adding folder items to thisFolder after receiving itemList
  repeat with aFile in itemList
    if (aFile as string) does not contain ".eps" then
      if (aFile as string) contains "4c" then
        tell application "Finder" to open file aFile using PSpath
        tell application "Adobe® Photoshop® 5.5" to «event miscdosc» "4c"
      else
        tell application "Finder" to open file aFile using PSpath
        tell application "Adobe® Photoshop® 5.5" to «event miscdosc» "sw"
      end if
      tell application "Finder" to delete file aFile
    end if
  end repeat
end adding folder items to
---

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418352]

finder-befehl fuer "finger weg"

Anonym
Beiträge gesamt: 22827

15. Okt 2003, 21:21
Beitrag # 3 von 6
Beitrag ID: #418354
Bewertung:
(1779 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo hans!

danke fuer den hinweis zum "nichts tun" &#133;

am ende brauche ich also die eps-abfrage auch nicht mehr um das geoeffnete file zu identifizieren.

die 4c-aktion faellt tatseaechlich aus, weil ich ein farbbild mit standardschritten  leider nicht optimal kofigurieren kann. ->also nur oeffnen und offen im ps-fenster stehen lassen.

einer der server auf dem viele bild-rohdaten enlaufen ist so langsam (nt-server -> clients alles mac-rechner), das die scripte staendig fehlermeldungen produzieren (z.b. 101). gibt es eine moeglichkeit irgendwie einen zeitpuffer oder eine wiederholungsschleife, falls ein befehl nicht ausgefuehrt werden kann, in ein script einzubauen? momentan behelfe ich mir so,  dass ich nur den befehl zum moven der dateien auf ein anderes volume an den ordner anhaenge, aber selbst dann kommt es hin und wieder bei staerkerer frequentierung zu fehler "101", und damit zu einer endlosschleife in der das script versucht die datei zu verschieben &#133;

freundlichst


hans-gerd classen


als Antwort auf: [#418352]

finder-befehl fuer "finger weg"

Hans Haesler
  
Beiträge gesamt: 5826

15. Okt 2003, 23:04
Beitrag # 4 von 6
Beitrag ID: #418355
Bewertung:
(1779 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans-Gerd,

also &#133; da ist wieder einmal guter Rat teuer. Weil ich unmöglich Deine Umgebung nachstellen kann.

Einen Zeitpuffer könnte man mit dem 'delay'-Befehl einbauen. Mit folgendem Beispiel wird das Script um zwei Sekunden angehalten &#133;
Code
delay 2 

&#133; ohne dass Rechenleistung verlorengeht. Ausgelöste Prozesse werden weitergeführt. Der Wert muss eine Ganzzahl sein. Bruchteile werden akzeptiert, aber nicht eingehalten. Der kleinste Wert ist also eine ganze Sekunde.

Zweiter Nachteil: Man muss ziemlich genau wissen, wie lange die Pause dauern soll. Ist man zu "grosszügig", dann dauert die Ausführung unnötig länger. Ist man zu knauserig, kann es ab und zu vorkommen, dass die Pause nicht ausreicht und das Problem somit nicht vermieden wird.

Eine andere Möglichkeit wäre, mit dem 'busy status' zu prüfen, ob eine Datei bereit ist. Aber erstens macht dies mit Photoshop keinen Sinn, da geöffnete Dateien ohne weiteres gelöscht werden können. Und zweitens soll die 'busy'-Methode nicht sehr zuverlässig sein.

Am besten versuchst Du es mal mit einem 'flag' (= Flagge), welcher auf Null gesetzt wird. Dessen Name wird wie bei einer normalen Variablen vergeben. Ich verwende dabei häufig 'okay'. Dann wird eine Repeat-Schleife solange ausgeführt ('repeat while okay is 0') wie der Wert von 'okay' Null ist. Innerhalb der Repeat-Schleife ist ein 'try wrapper', welcher als erste Zeile den zeitkritischen Befehl enthält. Die zweite Zeile ist das Setzen des 'flags' auf 1. Solange die erste Zeile einen Fehler verursacht, wird die zweite nicht ausgeführt, der Wert von 'okay' bleibt auf Null, die Repeat-Schleife wird nicht verlassen.
---
-- andere Befehle, eventuell auch
-- in einer Repeat-Schleife
set okay to 0
repeat while okay = 0
  try
    tell application "Finder" to move file aFile to &#133; (usw. usf.)
    set okay to 1
  end try
end repeat
-- wenn nötig weitere Befehle
-- eventuelle 'end's von 'tell'- oder 'if'- oder 'repeat'-Zeilen
Code
Das Problem dieser Methode hast Du sicher erkannt: wenn es dem Finder nicht gelingt, die Datei zu verschieben, z.B. weil sie nicht existiert, dann dreht das Script ewig Runden. Man könnte eine Zähler-Variable einfügen, diese bei jedem Umgang um eins erhöhen und dann bei einem gewissen Wert einen Dialog anzeigen und mit 'exit repeat' die Repeat-Schleife verlassen. 

set ctr to 0
set okay to 0
repeat while okay = 0
  try
    tell application "Finder" to move file aFile &#133; (usw. usf.)
    set okay to 1
  end try
  set ctr to ctr + 1
  if ctr > 20 then
    display dialog "Problem mit der Datei
" & (aFile as string) buttons "OK" default button 1 with icon 2
    exit repeat
  end if
end repeat
---
Aber &#133; wie legt man den Grenzwert für 'ctr' fest? Hier sind wir wieder bei der Problematik wie oben bei 'delay' erwähnt :-(.

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418352]

finder-befehl fuer "finger weg"

Hans Haesler
  
Beiträge gesamt: 5826

16. Okt 2003, 08:10
Beitrag # 5 von 6
Beitrag ID: #418356
Bewertung:
(1779 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Noch etwas &#133; Manchmal ist es der langsame Finder, welcher eine Datei noch nicht "sieht".

Manchmal hilft es, an der richtigen Stelle folgenden Befehl einzufügen:
Code
tell application "Finder" to update 

Hans Haesler <hsa@ringier.ch>


als Antwort auf: [#418352]

finder-befehl fuer "finger weg"

Anonym
Beiträge gesamt: 22827

16. Okt 2003, 20:55
Beitrag # 6 von 6
Beitrag ID: #418357
Bewertung:
(1779 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo hans!

delay hatte ich mit einigen werten schon selbst getestet, das brachte aber keinen fortschritt.

die letzten beiden moeglichkeiten werde ich morgen testen &#133;

besten dank

cu

hans-gerd classen


als Antwort auf: [#418352]
X