1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

String suchen und ersetzen

Dieses Thema im Forum "AppleScript" wurde erstellt von Fabolu, 27.10.07.

  1. Fabolu

    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
    
    
     
    #1 Fabolu, 27.10.07
    Zuletzt von einem Moderator bearbeitet: 28.10.07
  2. Hobbes_

    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?
     
  3. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Wenn Du nurt löschen willst, sollte das hier reichen (ungetestet)
     
  4. Fabolu

    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.
     
    #4 Fabolu, 27.10.07
    Zuletzt von einem Moderator bearbeitet: 27.10.07
  5. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Die Variable "delete_comment" ist nicht definiert. Aber wie gesagt: Zum reinen löschen reicht, was ich Dir geantwortet habe.
     
  6. Fabolu

    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.
     
  7. Hobbes_

    Hobbes_ Gast

    Was funktioniert von Deinem Script und was funktioniert noch nicht?
     
  8. Fabolu

    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?
     
  9. Hobbes_

    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...
     
    #9 Hobbes_, 27.10.07
    Zuletzt von einem Moderator bearbeitet: 27.10.07
  10. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    mach ein "my replace_chars" draus
     
  11. Fabolu

    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.
     

Diese Seite empfehlen