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

laaange liste schnell verarbeiten

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


Anmeldedatum: 05.02.2010
Beiträge: 39

BeitragVerfasst am: 09.04.2012 - 21:11    Titel: laaange liste schnell verarbeiten Antworten mit Zitat

Hallo zusammen,

es geht mal wieder um's Taggen von Bilddateien (diesmal tifs)

und ich habe eine "Datenbank" (text-Datei), deren Inhalt ungefähr so aussieht:

028825_F3420001
033717_S4ACC0016A
299962_T9070010
299973_T9070010
299980_T9070010
305632_T9070006
305633_T9070006
305665_T9070006
312390_F8990004
608849_F7CA0024
619995_S7440004
625326_F6990002
657345_F0SW004A
657346_F0SW004A


es sind ca 2500 Zeilen.
Momentan stehen die Daten in einer Text-Datei. Diese wird am Anfang des Scripts einmal eingelesen, dann jeweils eine Zeile als Liste definiert und wenn der Dateiname dem ersten Item der jeweiligen Liste entspricht, wird das zweite Item der Liste in die Metadaten geschrieben.

Das funktioniert auch soweit so gut.

Bei einer Datei dauert das nicht allzu lang, jetzt hab ich aber mehrere Dateien (mittels on open handler) übergeben und warte und warte und es dauert ca 1 Minute bis eine Datei aktualisiert ist. (Liegt sicherlich an der Länge der Liste bzw, wie ich darauf zugreife)

Die Frage ist jetzt, ob man das lange durchsuchen der Liste verkürzen könnte, in dem man sie anders durchsucht oder anders speichert oder ähnliches?

Hier das aktuelle Script, (hatte auch schon versucht, das Einlesen der Txt außerhalb der ersten Repeatschleife machen zu lassen, half nichts)


________________

on open (some_things)

repeat with datei in some_things
tell application "Finder"
set open_file to "50GB_system:Users:tim:Desktop:art-nr-working-nr.txt" as alias
set myList to every paragraph of (read open_file)
set anzahl to (count of paragraphs of (read open_file))

-- set datei to choose file


set endung to name extension of datei
--display dialog endung
set alias_information to info for datei

set file_name to text 1 thru (-2 - (length of name extension of alias_information)) of name of alias_information
-- display dialog file_name
set artikelnummer to text 1 thru 6 of file_name
--display dialog artikelnummer

repeat with i from 1 to anzahl

set zieh to paragraph i of (read open_file)

set oldDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to "_"
set Farbliste to every text item of zieh
set AppleScript's text item delimiters to oldDelimiters
get Farbliste





if artikelnummer is item 1 of Farbliste then
set workingnumber to item 2 of Farbliste
--display dialog workingnumber
do shell script "exiftool -overwrite_original -IntellectualGenre=" & workingnumber & " " & quoted form of POSIX path of datei
else
tell application "Finder" to set label index of datei to 2
end if




end repeat


end tell
end repeat
end open


Falls jemand bis hier unten gekommen ist: schönen Dank für's Lesen, vielleicht fällt euch ja was ein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hubionmac
•--->
•--->


Anmeldedatum: 26.02.2004
Beiträge: 245
Wohnort: Münster

BeitragVerfasst am: 10.04.2012 - 16:03    Titel: Antworten mit Zitat

via awk vielleicht... man könnte es auch auf einen Versuch mit egrep ankommen lassen. Zudem wird in Deine Skript die Repeat-Schleife nicht beendet, nachdem die passende Artikelnummer gefunden wurde, so durchläuft die Routine für jede Datei grundsätzlich alle 2500 Zeilen.

Anbei eine Lösung mit awk
Code:
on run
   enter_exif_info({choose file})
end run
on open these
   enter_exif_info(these)
end open

on enter_exif_info(thefiles)
   --Pfad zur Text-Datei mit Inhalt Artikelnummer_WorkingNumber
   set data_file to quoted form of POSIX path of (((path to "desk") & "art-nr-working-nr.txt" as text) as alias)
   repeat with thefile in thefiles
      set thefile_unquoted to POSIX path of thefile
      set thefile to quoted form of thefile_unquoted
      ## lese den Dateinamen aus der Pfadangabe aus und daraus die Artikelummer
      set artikelnummer to characters 1 through 6 of (do shell script "basename " & thefile) as text
      ## suche Dir die workingnumber zu der Artikelnummer aus dem Datafile
      set workingnumber to do shell script "awk -F _ '/^" & artikelnummer & "/ {print $2}' " & data_file
      --display dialog workingnumber
      ##trage die Workingnumber via exiftool in die Datei ein, sofern es überhaupt eine gibt
      if workingnumber as text is not "" then
         do shell script "exiftool -overwrite_original -IntellectualGenre=" & workingnumber & " " & thefile
      else
         ##bei einem Fehler die Datei mal rot markieren
         tell application "Finder" to set label index of file (POSIX file thefile_unquoted as alias) to 2
      end if
   end repeat
end enter_exif_info

_________________
hubionmac.com akzeptiere Paypal und Pizza
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
grenzli
•-->
•-->


Anmeldedatum: 05.02.2010
Beiträge: 39

BeitragVerfasst am: 11.04.2012 - 19:40    Titel: Antworten mit Zitat

besten dank hier auch nochmal. funktioniert an 10.5 und 10.7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hubionmac
•--->
•--->


Anmeldedatum: 26.02.2004
Beiträge: 245
Wohnort: Münster

BeitragVerfasst am: 11.04.2012 - 22:32    Titel: Antworten mit Zitat

Hat vielleicht jemand ein 10.6 zur Hand und könnte mal den awk-Befehl testen, ob es vielleicht an der Art der Definition des Trennzeichens liegt oder ob awk bei keinem Fund statt eines lehren Strings einen Fehler ausgibt? Question
_________________
hubionmac.com akzeptiere Paypal und Pizza
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 18.04.2012 - 21:38    Titel: Antworten mit Zitat

Mal zum Verständnis. In der Textdatei inputliste.txt steht:
Code:
028825_F3420001
033717_S4ACC0016A
299962_T9070010
299973_T9070010
299980_T9070010
305632_T9070006
305633_T9070006
305665_T9070006
312390_F8990004
608849_F7CA0024
619995_S7440004
625326_F6990002
657345_F0SW004A
657346_F0SW004A

Und Du hast verschiedene Biddateien die z.B. heißen:
Code:
028825.jpg
033717.jpg
299962.jpg
299973.jpg
299980.jpg
305632.jpg
305633.jpg
305665.jpg
312390.jpg
608849.jpg
619995.jpg
625326.jpg
657345.jpg
657346.jpg

Und nun soll jede der JPGs einen exifeintrag mit dem Teil hinter dem _ bekommen. Im Prinzip willst Du also haben:

Code:
exiftool -overwrite_original -IntellectualGenre='S4ACC0016A' '033717.jpg'
exiftool -overwrite_original -IntellectualGenre='T9070010'   '299962.jpg'
exiftool -overwrite_original -IntellectualGenre='T9070010'   '299973.jpg'
exiftool -overwrite_original -IntellectualGenre='T9070010'   '299980.jpg'
exiftool -overwrite_original -IntellectualGenre='T9070006'   '305632.jpg'
exiftool -overwrite_original -IntellectualGenre='T9070006'   '305633.jpg'
exiftool -overwrite_original -IntellectualGenre='T9070006'   '305665.jpg'
exiftool -overwrite_original -IntellectualGenre='F8990004'   '312390.jpg'
exiftool -overwrite_original -IntellectualGenre='F7CA0024'   '608849.jpg'
exiftool -overwrite_original -IntellectualGenre='S7440004'   '619995.jpg'
exiftool -overwrite_original -IntellectualGenre='F6990002'   '625326.jpg'
exiftool -overwrite_original -IntellectualGenre='F0SW004A'   '657345.jpg'
exiftool -overwrite_original -IntellectualGenre='F0SW004A'   '657346.jpg'


Das würde ich doch mit einem shell script (genretag) lösen:
Code:


#!/bin/sh
while read line ; do
   fname=`echo $line | cut -d_ -f1`
   info=`echo $line | cut -d_ -f2`
   if [ -e "$fname.jpg" ] ; then
      exiftool -overwrite_original -IntellectualGenre="$info" "$fname.jpg"
   fi
done



Aufgerufen im Terminal mit z.B.:
Code:

./genretag < inputliste.txt

_________________
"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
hubionmac
•--->
•--->


Anmeldedatum: 26.02.2004
Beiträge: 245
Wohnort: Münster

BeitragVerfasst am: 18.04.2012 - 21:42    Titel: Antworten mit Zitat

elender Code-Verbesserer Wink

Ne im Ernst, cooles Beispiel für die Effizienz eines Shell-Scripts im Vergleich zu einer AppleScript-Lösung... Embarassed Respekt!
_________________
hubionmac.com akzeptiere Paypal und Pizza
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
grenzli
•-->
•-->


Anmeldedatum: 05.02.2010
Beiträge: 39

BeitragVerfasst am: 19.04.2012 - 07:45    Titel: Antworten mit Zitat

Ja genau, Skeeve, komplett richtig verstanden und ich werds dann mal versuchen, mit dem shell script.

und falls ich undankbar wirkte, bin ich nicht, es war nur stressig die letzten tage und deshalb kam ich nicht recht dazu, hier vorbeizuschauen, zumal meine mail-benachrichtigungen bei neuen antworten deaktiviert war, tztztz..

also nochmal danke und ich teste.

grüße
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 -> AppleScript X 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