| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	 
	
	
		| Autor | 
		Nachricht | 
	 
	
		giesskanne •->
  
 
  Anmeldedatum: 18.11.2004 Beiträge: 17
 
  | 
		
			
				 Verfasst am: 18.11.2004 - 13:34    Titel: Leerzeichen zw. Wörtern selektieren und durch "_" | 
				     | 
			 
			
				
  | 
			 
			
				Hallo,
 
 
es sollte eigentlich ganz einfach sein, aber ich mach schon gut ne Stunde dran rum:
 
 
Ich möchte zwischen Wörtern das Leerzeichen durch einen Underscore (_) ersetzen. Mein Versuch:
 
 
 	  | Code: | 	 		  
 
set myWords to "Ich bin frustriert"
 
set myCharacters to characters of myWords
 
set mySel to characters of myWord whose contents is " "
 
 | 	  
 
Später soll dann so etwas wie diese Zeile rein:
 
 	  | Code: | 	 		  
 
set contents of mySel to "_"
 
 | 	  
 
 
Aber ich scheitere eben schon am 
 
'set mySel to characters of myWord whose contents is " "'
 
 
Hab's auch mit "items" und "text items" statt "characters" versucht.
 
 
Ich schäme mich fast, so was hier zu posten, aber ich stehe wirklich ziemlich auf dem Schlauch.
 
 
Ciao Martin | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Folker •---->
  
  
  Anmeldedatum: 11.12.2000 Beiträge: 649 Wohnort: Holsteinische Schweiz
  | 
		
			
				 Verfasst am: 18.11.2004 - 13:52    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Moin,
 
 
könnte dies der Ansatz sein?
 
 
set theTextString to "eins zwei drei vier fünf"
 
set theL to every word of theTextString
 
set {theOldDelim, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {"_"} }
 
set theTextString to theL as string
 
set AppleScript's text item delimiters to theOldDelim
 
get theTextString
 
 
Leider nur auf OS X getestet (AS-Version "D1-1.9.3") _________________ Gruß,
 
Folker Brandt
 
=============================
 
Systemberatung · Datenbanken · Webdesign | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		giesskanne •->
  
 
  Anmeldedatum: 18.11.2004 Beiträge: 17
 
  | 
		
			
				 Verfasst am: 18.11.2004 - 16:11    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hallo Folker,
 
 
das sieht klasse aus und macht, was es tun soll.
 
Raffiniert.  
 
Herzlichen Dank.
 
 
Aber wenn wir schon dabei sind ...
 
hast Du auch eine Lösung für das Ersetzen anderer Zeichen als dem Leerzeichen (also "ss" statt "ß" oder "ae" satt "ä")?
 
 
 
Martin | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Folker •---->
  
  
  Anmeldedatum: 11.12.2000 Beiträge: 649 Wohnort: Holsteinische Schweiz
  | 
		
			
				 Verfasst am: 18.11.2004 - 16:50    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Ja - habe da mal fix ein altes Script rausgesucht - kann als Programm abgespeichert werden - ob es allerdings unter allen AS-Versionen ohne kleinere Anpassungen läuft vermag ich nicht zu sagen (habe eben noch fürs 10er OS 'ne kleine Anpassung vorgenommen, bei mir lief der Test gut. Du musst halt schauen, was Du benötigst, aber eigentlich sollte anhand des Scriptes die Vorgehensweise klar werden ... (sonst fragen  
 
 
 
--© Folker Brandt 2001-2004
 
-- getestet mit AS 1.9.3 , Mac OS X 10.3.6
 
(*Version mit Sonderzeichen! Kann auch für andere Späße gebraucht werden siehe auch < nicht mehr online da OS 9 Krempel  >
 
Weitere Möglichkeit wäre es gewesen, mathematisch ranzugehen also 'ASCII character ((ASCII number  A) + 32)' -> a - aber da haben wir
 
mit Sonderzeichen o.ä. Probleme. Untere Lösung läßt sich auch für andere Sonderzeichen verwenden - einfach die properties the_oldChar und the_newChar anpassen
 
*)
 
property the_oldChar : {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Ä", "Ö", "Ü", "ß", "ä", "ö", "ü", " "} (* hier werden dann auch kleine Sonderzeichen berücksichtigt - deshalb nochmal ä,ö,ü am Ende der Liste - diese Liste ließe sich noch für weitere Sonderzeichen erweitern - allerdings müssen dann immer der Groß- und der Kleinbuchstabe als einzelnes List-Item berücksichtigt werden und in der Liste the_newChar doppelt aufgeführt sein. Auch alle weiteren Sonderzeichen lassen sich so bereinigen - aber stelle sicher, dass item x of the_oldChar immer mit item y of the_newChar korrespondiert - das die Listen gleiche Länge (Anzahl items) haben müssen versteht sich von selbst *)
 
 
property the_newChar : {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "ae", "oe", "ue", "ss", "ae", "oe", "ue", "_"}
 
 
(* Bei zu langen Dateinamen wg. ä,ö,ü,ß Umsetzung, siehe Handler get_newName(DerString) im unteren Teil, wird der Property the_Fuellsel benötigt.
 
Bei zu langen Namen (> 31 characters) wird der Dateiname wird nach dem Schema "erste 10 Zeichen & the_Fuellsel & letzte 20 Zeichen" aufgebaut *)
 
property the_Fuellsel : "…"
 
property the_Zaehler : 0
 
 
on run -- Doppelklick
 
   try
 
      set the_Fold to (choose folder with prompt "Ordner auswählen:")
 
      set the_Zaehler to 0
 
      do_Job(the_Fold as string)
 
      the_Meldung()
 
   on error errmsg number num
 
      if not (num = -128) then theerror(errmsg, num)
 
   end try
 
end run
 
 
on open these_items -- drag and drop
 
   try
 
      set the_Zaehler to 0
 
      if class of these_items is not list then set these_items to {these_items}
 
      repeat with i from 1 to (count items of these_items)
 
         set temp to (info for item i of these_items)
 
         if (folder of temp) and not (package folder of temp) then
 
            --Ordner gefunden
 
            do_Job((item i of these_items) as string)
 
         else
 
            -- kein Ordner, Datei!
 
            tell application "Finder"
 
               set the_Fold to folder of (item i of these_items)
 
            end tell
 
            set_newName(name of temp, the_Fold as string)
 
         end if
 
      end repeat
 
      the_Meldung()
 
   on error errmsg number num
 
      theerror(errmsg, num)
 
   end try
 
end open
 
 
on theerror(errmsg, num)
 
   activate
 
   beep
 
   set AppleScript's text item delimiters to {""}
 
   display dialog errmsg buttons {"Aargh…"} default button 1 with icon 0
 
end theerror
 
 
on the_Meldung() -- Dateien im Ordner umbenannt
 
   activate
 
   beep
 
   display dialog ((the_Zaehler as string) & " Dateien bearbeitet!") buttons {"Danke"} default button 1 with icon 401
 
end the_Meldung
 
 
on do_Job(the_Fold) -- hier werden einzelne Ordner abgearbeitet
 
   activate
 
   -- Dateien auflisten OHNE invisibles! (wenn auch die gewünscht, einfach vor 'without' auskommentieren (--)
 
   set the_FolderList to list folder the_Fold without invisibles
 
   -- Zähler für die Anzahl berücksichtigter Dateien eines Ordners
 
   -- Schleife durch einen Ordner
 
   repeat with i in the_FolderList
 
      set temp to (info for ((the_Fold & ":" & (i as string)) as alias))
 
      if (folder of temp) and not (package folder of temp) then
 
         do_Job(the_Fold & (i as string) & ":")
 
      else
 
         set_newName(i, the_Fold)
 
         -- Zähler um 1 heraufsetzen
 
      end if
 
   end repeat
 
   -- wenn mehrere Ordner (drag and drop) bearbeitet werden den Zähler eines Ordners merken
 
end do_Job
 
 
on set_newName(i, the_Fold)
 
   -- Datei umbenennen
 
   tell application "Finder"
 
      set name of file (the_Fold & (i as string) as alias) to (get_newName(i as string) of me)
 
   end tell
 
   set the_Zaehler to (the_Zaehler + 1)
 
end set_newName
 
 
--Dateinamen auf Kleinbuchstaben umsetzen
 
on get_newName(DerString)
 
   set {oldDelims, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {""}}
 
   considering case, white space, diacriticals, hyphens, expansion and punctuation
 
      repeat with i from 1 to (count items of the_oldChar)
 
         if (item i of the_oldChar is in DerString) then
 
            set AppleScript's text item delimiters to {item i of the_oldChar}
 
            set DerString to (text items of DerString)
 
            set AppleScript's text item delimiters to {item i of the_newChar}
 
            set DerString to (DerString as string)
 
         end if
 
      end repeat
 
   end considering
 
   
 
   --Prüfung der Dateinamenlänge wg. Zeichenverdoppelung wg der Umsetzung von ä,ö,ü,ß
 
   -- Die Prüfung kann auskommentieren werden wenn keine Zeichenverdopplung stattfindet (siehe property the_Fuellsel)
 
   if (count text items of DerString) > 31 then
 
      set {oldDelims, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {""}}
 
      set DerString to (text items 1 thru 10 of DerString & the_Fuellsel & text items -1 thru -20 of DerString) as string
 
      set AppleScript's text item delimiters to oldDelims
 
   end if
 
   -- bis hier kann auskommentiert werden 
 
   
 
   set AppleScript's text item delimiters to oldDelims
 
   return DerString
 
end get_newName
 
 _________________ Gruß,
 
Folker Brandt
 
=============================
 
Systemberatung · Datenbanken · Webdesign
  Zuletzt bearbeitet von Folker am 21.11.2004 - 12:29, insgesamt 9-mal bearbeitet | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		giesskanne •->
  
 
  Anmeldedatum: 18.11.2004 Beiträge: 17
 
  | 
		
			
				 Verfasst am: 18.11.2004 - 16:57    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hallo Folker,
 
 
jetzt hast Du mich geradezu erschlagen.
 
 
Aber bevor ich anfange, das Skript zu verstehen, bleißt sich der Compiler an der Zeile "if class of these_items ? list then set these_items to {these_items}" fest.
 
Hast Du ne Idee, was das Fragezeigen da zu suchen hat?
 
 
Martin | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Folker •---->
  
  
  Anmeldedatum: 11.12.2000 Beiträge: 649 Wohnort: Holsteinische Schweiz
  | 
		
			
				 Verfasst am: 18.11.2004 - 17:16    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Ja, das soll ein "Ungleich" sein (is not)
 
 
Da ist aber irgendwie ein Wurm in der Rekursion - war damals ein Hack in der Mittagspause (war wahrscheinlich nicht wirklich vorgesehen  
 
 
Das bastel ich aber gerade um ...
 
 
 
Nachtrag - (20:30 Uhr): Das erste Script habe ich direkt im oberen Posting geändert - es kann jetzt auch Rekursion - erhebt aber keinen Anspruch auf Perfektion! Auch mag die ein oder andere Formulierung einer anderen AS-Version sauer aufstoßen - ich habe das jetzt mit AS 1.9.3 unter OS 10.3.6 getestet. Da klappt jetzt nach einiger Überarbeitung eigentlich alles in dem Script aus seligen OS 9 Zeiten. Sollte trotzdem ein Fehler drin sein, bitte posten  
 
Die Funktionsweise, insbesondere was den Zeichentausch angeht, sollte klar sein. _________________ Gruß,
 
Folker Brandt
 
=============================
 
Systemberatung · Datenbanken · Webdesign | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		giesskanne •->
  
 
  Anmeldedatum: 18.11.2004 Beiträge: 17
 
  | 
		
			
				 Verfasst am: 19.11.2004 - 01:59    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hallo Folker,
 
 
hab' Dein Script für meine Zwecke etwas umgebaut.
 
 	  | Code: | 	 		  
 
property myOldChar : {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Ä", "Ö", "Ü", "ß", "ä", "ö", "ü", " "}
 
property myNewChar : {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "ae", "oe", "ue", "ss", "ae", "oe", "ue", "_"}
 
 
set myString to "Weiß der Teufel, was in der Hölle los ist."
 
set myNewString to get_newName(myString)
 
 
on get_newName(theString)
 
   set {oldDelims, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {""}}
 
   considering case, white space, diacriticals, hyphens, expansion and punctuation
 
      repeat with i from 1 to (count items of myOldChar)
 
         if (item i of myOldChar is in theString) then
 
            set AppleScript's text item delimiters to {item i of myOldChar}
 
            set theString to (text items of theString)
 
            set AppleScript's text item delimiters to {item i of myNewChar}
 
            set theString to theString as string
 
         end if
 
      end repeat
 
   end considering   
 
   set AppleScript's text item delimiters to oldDelims
 
   return theString
 
end get_newName
 
 | 	  
 
Die Geschichte mit den "text item delimiters" fand ich spannend.
 
 
Meine frühere Alternative (Schleifenmethode) wird bei längeren strings ziemlich langsam:
 
 	  | Code: | 	 		  
 
set myOldString to characters of "Weiß der Teufel, was in der Hölle los ist."
 
set myOldChar to {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Ä", "Ö", "Ü", "ß", "ä", "ö", "ü", " "}
 
set myNewChar to {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "ae", "oe", "ue", "ss", "ae", "oe", "ue", "_"}
 
repeat with myOldCharCount from 1 to length of myOldChar
 
   repeat with i from length of myOldString to 1 by -1
 
      tell myOldString
 
         if item i is item myOldCharCount of myOldChar then
 
            set item i to item myOldCharCount of myNewChar
 
         end if
 
      end tell
 
   end repeat
 
end repeat
 
set myNewString to myOldString as string
 
 | 	  
 
 
Danke für Deine Unterstützung.
 
Die Sache mit den delimiters werde ich mir merken.  
 
 
Martin | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		giesskanne •->
  
 
  Anmeldedatum: 18.11.2004 Beiträge: 17
 
  | 
		
			
				 Verfasst am: 19.11.2004 - 13:32    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hallo Folker,
 
 
hab noch etwas wesentlich Einfacheres entdeckt: 
 
 
 	  | Code: | 	 		  
 
set myOldString to "Weiß der Teufel, was in der Hölle los ist."
 
set myOldChar to {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Ä", "Ö", "Ü", "ß", "ä", "ö", "ü", " "}
 
set myNewChar to {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "ae", "oe", "ue", "ss", "ae", "oe", "ue", "_"}
 
set myNewString to myOldString
 
 
repeat with myCounter from (length of myOldChar) to 1 by -1
 
   set mySearchChar to (item myCounter of myOldChar)
 
   set myReplaceChar to (item myCounter of myNewChar)
 
   set myNewString to change mySearchChar into myReplaceChar in myNewString as string
 
end repeat
 
 | 	  
 
 
Warum bin ich da nicht schon früher draufgekommen?
 
Wahrscheinlich gibt's noch einiges zu verbessern, aber mir gefällt die change-Methode jetzt auch nicht schlecht.
 
 
Martin | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Snow Administrator
  
  
  Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
  | 
		
			
				 Verfasst am: 19.11.2004 - 14:52    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hallo Martin,
 
 
wenn du mit 'change' arbeitest, brauchst du die Satimage-OSAX. Anscheinend hast du die ja installiert. Dann kann man zum Umsetzten der Dateinamen in Kleinbuchstaben aber auch schon den Befehl 'lowercase' benutzen und braucht dann danach nur noch die Leerzeichen durch den Unterstricht per 'change' ersetzen. _________________ Peter
 
-
 
Fischer-Bayern.de|Shadetreemicro.com | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		giesskanne •->
  
 
  Anmeldedatum: 18.11.2004 Beiträge: 17
 
  | 
		
			
				 Verfasst am: 19.11.2004 - 15:31    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hallo Peter,
 
 
in der Tat habe ich mir heute das Satimage-OSAX installiert und angeschaut. Glaubte es auch deinstalliert zu haben, als ich prüfte, ob der change-Befehl in seiner einfachen Verwendung ein Bordmittel von AppleScript ist.
 
 
Entweder war die Satimage-OSAX noch im Arbeitsspeicher geladen (ist das möglich) ode sie war nicht richtig deinstalliert.
 
 
By the way:
 
Ich habe Dein Script OAXen installieren ausprobiert.
 
Die Zeile 
 
 	  | Code: | 	 		  | property tC_list : {MT Digit String 123 digit 2, uppercase "abc", the ticks} | 	  
 
erzeugt bei mir die Fehlermeldung
 
 	  | Code: | 	 		  | Expected “, ” or “}” but found identifier. | 	  
 
 
Hast Du ne Idee, woran das liegt?
 
 
Martin | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Folker •---->
  
  
  Anmeldedatum: 11.12.2000 Beiträge: 649 Wohnort: Holsteinische Schweiz
  | 
		
			
				 Verfasst am: 20.11.2004 - 12:33    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hallo Martin,
 
 
ja, zum change-Befehl hat Peter ja schon was geschrieben. I.d.R. versuche ich immer, wo möglich, auf "Fremd"-Scripting Additions zu verzichten. Allerdings verwende ich seit Jahren auch den Editor Smile und habe immer die Satimage-Addition auf dem Rechner installiert. Mittlerweile ist Apples ScriptEditor richtig gut geworden - kein Vergleich zu früheren Versionen und so verwende ich Smile nur noch selten.
 
 
Ja, der im ersten Moment naheliegende Weg (Deine Schleifenmethode) ist natürlich erheblich langsamer als der Weg über die text item delimiters, allerdings kann man sich da auch Probleme einhandeln. Bei zu langen strings (ca. 4000 Zeichen) erhält man, zumindest war das früher so, einen "Stack overflow".
 
 
@Snow
 
 
dufte, der Code Formatter braucht ja gar kein Tex-Edit mehr! Das ist super, denn neben BBEdit und TextEdit braucht es nicht wirklich noch einen weiteren Text Editor - 10 $ gespart   _________________ Gruß,
 
Folker Brandt
 
=============================
 
Systemberatung · Datenbanken · Webdesign | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
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 
		 |