• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

String suchen und ersetzen

Fabolu

Gast
Hallo,

ich möchte einen Textstring suchen und ersetzen, ich habe jetzt schon so viele Vorschläge im Web gefunden, aber alle bekomme ich nicht implementiert.

Ziel ist es, die Kommentare von iPhoto zu verändern. Ich habe Kommentare an alle Fotos angehängt und möchte dies wieder löschen.

Vielen Dank schon einmal ...

Hier der korrigierte Code:

Code:
(*	Search and Replace Comments within iPhoto. 

	This script should be placed in $HOME/Library/Scripts/Applications/iPhoto/
	
	Fabian Stutzki, October 2007, adapted from Dan Lowe

*)


tell application "iPhoto"
	
	activate
	set photo_list to selection
	
	(* If the first item in this list is an album, it's likely that we have no photos selected. Exit. *)
	
	if class of item 1 of photo_list is album then
		display dialog "You must select two or more photos before running this script." buttons {"Quit"} default button 1 with icon caution
		return
	end if
	
	(* This script only makes sense if we have more than one photo selected. If fewer, exit. *)
	
	if number of items of photo_list is less than 2 then
		display dialog "You must select two or more photos before running this script." buttons {"Quit"} default button 1 with icon caution
		return
	end if
	
	(* Get search string, which will be searched within the iPhoto comments *)
	
	set search_text_dialog to display dialog "Enter a search string." default answer "" with icon note
	set search_text to text returned of search_text_dialog
	
	(* Is search string empty? *)
	
	if search_text is "" then
		display dialog "ERROR: You didn't enter a comment!" buttons {"Quit"} default button 1 with icon caution
		return
	end if
	
	(* Get replace string, which will replace the search string. *)
	
	set replace_text_dialog to display dialog "Enter a replace string, leave empty to delete search string." default answer "" with icon note
	set replace_text to text returned of replace_text_dialog
	
	(* Iterate over photos, then search and replace comments *)
	
	repeat with the_photo in photo_list
		
		set the_comment to comment of the_photo
		set the_comment_replace to my replace_chars(the_comment, search_text, replace_text)
		set comment of the_photo to the_comment_replace
		
	end repeat
	
	display dialog "Done!" buttons {"Quit"} default button 1 with icon note
	
end tell


on replace_chars(txt, srch, repl)
	set AppleScript's text item delimiters to the srch
	set the item_list to every text item of txt
	set AppleScript's text item delimiters to the repl
	set txt to the item_list as string
	set AppleScript's text item delimiters to ""
	return txt
end replace_chars
 
Zuletzt bearbeitet von einem Moderator:

Hobbes_

Gast
Ich sehe, Du hast Dir schon Apples Routine zum Ersetzen von Strings geholt. Schon vor einiger zeit habe ich auch mal ein Script geschrieben zum ersetzen von Teilstrings (siehe Link). Vielleicht hilft es Dir weiter...

Im Moment ist mir das genaue Problem auf das Du eine Lösung suchst nicht ganz klar geworden: Welcher Teil Deines Scripts funktioniert nicht und wo suchst Du eine Lösung?
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Wenn Du nurt löschen willst, sollte das hier reichen (ungetestet)
tell application "iPhoto"
   
   activate
   set photo_list to selection
   
   (* If the first item in this list is an album, it's likely that we have no photos selected. Exit. *)
   
   if class of item 1 of photo_list is album then
      display dialog "You must select two or more photos before running this script." buttons {"Quit"} default button 1 with icon caution
      return
   end if
   
   (* This script only makes sense if we have more than one photo selected. If fewer, exit. *)
   
   if number of items of photo_list is less than 2 then
      display dialog "You must select two or more photos before running this script." buttons {"Quit"} default button 1 with icon caution
      return
   end if
   
   (* Collect the comment string to be added to the selected photos. *)
   
   repeat with the_photo in photo_list
      
      set comment of the_photo to ""
      
   end repeat
   
   display dialog "Done!" buttons {"Quit"} default button 1 with icon note
   
end tell
 

Fabolu

Gast
Hi,

schonmal danke für deine Antwort.

Also bei mir kommt ein Fehler beim Aufruf der Unterfunktion -> Fortfahren nicht möglich: replace_chars(the_comment, delete_comment, "")

Die Kommentare werden scheinbar richtig abgefragt. Muss ich die Unterfunktion irgendwie einbauen, ich dachte Applescript findet das selbständig.

@Skeeve: Nein ich möchte den Kommentar nicht löschen. Ich habe zum Beispiel als Kommentar "Urlaub 2007 Deutschland, China" und jetzt möchte ich das China löschen. Sprich immer nur ein Teil des Kommentars soll gelöscht werden.
 
Zuletzt bearbeitet von einem Moderator:

Fabolu

Gast
Danke, aber die Variable war nicht das Problem, auch wenn dort noch die falsche eingetragen war.

Ich habe den Code oben noch einmal aktualisiert, und dann will ich die Kommentare nicht komplett löschen, sondern nur z.B. ein Wort aus einem ganzen Satz.
 

Hobbes_

Gast
Was funktioniert von Deinem Script und was funktioniert noch nicht?
 

Fabolu

Gast
Ich wähle in iPhoto ein paar Fotos aus, es kommt nach Start des Skripts ein Dialog, in den ich einen Suchstringe ingebe und dann kommt ein Fehler: "iPhoto hat einen Fehler erhalten: Fortfahren nicht möglich: replace_chars."

Ich weiß nicht, weshalb das Skript an dieser Stelle abbricht. Handelt es sich bei einem Kommentar vielleicht nicht um einen einfachen String? Findet er die Unterfunktion nicht, wenn diese einfach irgendwo im Skript steht? Muss ich diese vielleicht mit "global" oder ähnlichem noch verfügbar machen?
 

Hobbes_

Gast
Einen groben Fehler fand ich jetzt nicht gerade im Aufbau Deines Scripts...

Aufgrund der Fehlermeldung, die Du erhälst könnte es schon sein, dass das Script versucht, die Funktion replace_chars an iPhoto zu senden, da das ganze im tell Bereich ist. Es wäre einen Versuch wert, das Script nicht innerhalb der tell-Schleife laufen zu lassen, sondern nur an den stellen im script einen tell-Bereich einzubauen, wo wirklich etwas an iPhoto mitgeteilt/kommandiert werden soll, mmhh? Whs funktionierend, doch unnötig kompliziert.

EDIT: Ich wusste doch, dass es noch etwas gab... Siehe Skeeves Post unten...
 
Zuletzt bearbeitet von einem Moderator:

Fabolu

Gast
Ahhh super! Vielen Dank!!!

Den Code werde ich noch etwas verschönern, dann stelle ich Ihn hier wieder online, falls ihn noch jemand nutzen kann.