Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
mucho •->
![•-> •->](/phpBB2/images/ranks/ranki0.gif)
Anmeldedatum: 16.03.2011 Beiträge: 2 Wohnort: Zürich
|
Verfasst am: 16.03.2011 - 14:38 Titel: string replace |
|
|
Hallo Zusammen!
Ich wäre froh um Eure Hilfe. Ich habe eine Apple script das den Pfad eines Ordners in dei Zwischenablage kopiert. Auf dem Mac lässt sich der Pfad dann auch problemlos klicken und der ordner öffnen.
Das format für den PC muss jedoch anders sein (ander slashes /).
Beide Pfade sollen nun in die ZA kopiert werden, beim PC eben mit dem ersetzen slash
Hier mal das script so weit wie ich bin:
Code: | try
tell application "Finder"
set currentPath to (POSIX path of (target of front window as alias))
# strWin = ReplaceText("script", "script", "re") of me
# strString = currentPath
# strString = Replace(strString, "/", vbcrlf)
set the clipboard to "file://" & currentPath & "
P:\\" & currentPath
end tell
on error
display dialog "Unable to copy a path to the clipboard. Make sure Finder is referencing a directory/folder within the file system." buttons {"Ok"} with icon caution with title "Error"
end try |
Danke für Eure Hilfe
Mucho |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
hubionmac •--->
![•---> •--->](/phpBB2/images/ranks/ranki2.gif)
![](images/avatars/11620746094208fbfddcc75.gif)
Anmeldedatum: 26.02.2004 Beiträge: 245 Wohnort: Münster
|
Verfasst am: 16.03.2011 - 22:22 Titel: |
|
|
Kann gar nicht sagen wie oft ich die Funktion schon verwendet habe
Zitat: | try
tell application "Finder"
set currentPath to (POSIX path of (target of front window as alias))
# strWin = ReplaceText("script", "script", "re") of me
# strString = currentPath
# strString = Replace(strString, "/", vbcrlf)
set the clipboard to "file:/" & currentPath & "
P:\\" & my replace_chars(currentPath, "/", "\\")
end tell
on error
display dialog "Unable to copy a path to the clipboard. Make sure Finder is referencing a directory/folder within the file system." buttons {"Ok"} with icon caution with title "Error"
end try
on replace_chars(this_text, search_string, replacement_string)
if this_text contains the search_string then
set AppleScript's text item delimiters to the search_string
set the item_list to every text item of this_text
set AppleScript's text item delimiters to the replacement_string
set this_text to the item_list as string
set AppleScript's text item delimiters to ""
end if
return this_text
end replace_chars
|
_________________ hubionmac.com akzeptiere Paypal und Pizza |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Skeeve •---->
![•----> •---->](/phpBB2/images/ranks/ranki3.gif)
![](images/avatars/109842322644abb04db262b.gif)
Anmeldedatum: 20.04.2006 Beiträge: 1067
|
Verfasst am: 18.03.2011 - 10:15 Titel: |
|
|
hubionmac hat Folgendes geschrieben: | Kann gar nicht sagen wie oft ich die Funktion schon verwendet habe
|
Und es hat nie Probleme gegeben, weil Du den ursprünglichen Wert von "Applescript's Text Item Delimiters" nicht gesichert hast?
Die wird es allerdings spätestens dann gebe, wenn Dein replace Handler von anderen Handlern aufgerufen wird, die auch mit den Delimitern hantieren. _________________ "All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies") |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
hubionmac •--->
![•---> •--->](/phpBB2/images/ranks/ranki2.gif)
![](images/avatars/11620746094208fbfddcc75.gif)
Anmeldedatum: 26.02.2004 Beiträge: 245 Wohnort: Münster
|
Verfasst am: 18.03.2011 - 11:13 Titel: |
|
|
Guten Morgen Sonnenschein.
In der Tat, es gab bisher nie Probleme... könntest Du die Routine mal nach Deinem Gusto verbessern? Dann wissen alle, was Du damit meintest =) _________________ hubionmac.com akzeptiere Paypal und Pizza |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Skeeve •---->
![•----> •---->](/phpBB2/images/ranks/ranki3.gif)
![](images/avatars/109842322644abb04db262b.gif)
Anmeldedatum: 20.04.2006 Beiträge: 1067
|
Verfasst am: 18.03.2011 - 13:21 Titel: |
|
|
Ach Herzilein!
Das ist doch ganz simpel:
Code: | on replace_chars(this_text, search_string, replacement_string)
if this_text contains the search_string then
set oastid to AppleScript's text item delimiters
set AppleScript's text item delimiters to the search_string
set the item_list to every text item of this_text
set AppleScript's text item delimiters to the replacement_string
set this_text to the item_list as string
set AppleScript's text item delimiters to oastid
end if
return this_text
end replace_chars |
_________________ "All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies") |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
mucho •->
![•-> •->](/phpBB2/images/ranks/ranki0.gif)
Anmeldedatum: 16.03.2011 Beiträge: 2 Wohnort: Zürich
|
Verfasst am: 21.03.2011 - 15:33 Titel: |
|
|
Herzilein, Sonnenschein, Liebes.....
vielen Dank für Eure Bemühungen
Mucho |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Wolle-77 •--->
![•---> •--->](/phpBB2/images/ranks/ranki2.gif)
![](images/avatars/605472814474548d48692f.gif)
Anmeldedatum: 25.02.2003 Beiträge: 449 Wohnort: Geldern
|
Verfasst am: 17.08.2011 - 18:02 Titel: |
|
|
Holla,
habe diesen Thread gerade erst entdeckt – war ja auch monatelang nicht mehr hier.
Aber da muß ich doch mal einschreiten. Also der austauschen-handler (Wer hat's erfunden? Ein Schweizer, egal wo Ihr ihn herhabt und wie er sonst noch heißen mag …) ist einer meiner absoluten Lieblinge. Ich habe ihn wirklich schon hundertfach in meinen Scripten und Programmen eingebaut und benutzt habe ich ihn millionenfach.
Hier, falls jemand den historischen Hintergrund genau haben möchte:
http://betabug.ch/austauschen.html
So, und verkürzt – mehr ist wirklich nicht notwendig – sieht das gute Stück dann so aus:
Code: | on austauschen(suchen, ersetzen, theString)
set my text item delimiters to suchen
set theList to every text item of theString
set my text item delimiters to ersetzen
return theList as string
end austauschen |
Also, man braucht weder die Millisekunden verschwenden, um die Delimiters zu sichern und wiederherzustellen, und noch schwachsinniger finde ich die if-Abfrage.
Die Delimiters, in der Form in nicht vielen Sprachen vorhanden (oder ist AppleScript die einzige?) sind dermaßen schnell und performant, daß die if-Abfrage mehr Zeit in Anspruch nimmt als eine Wandlung in eine Liste und zurück! Also weg mit dem if in dem Fall.
Und jetzt aber zur eigentlichen Crux – ist es sinnvoll, die Delimiters vorher zu sichern und dann wieder herzustellen? Ich sage: Nein.
Wer nur ein einziges Mal sich in seinem Script dieses Tricks bedient, für den mag es sinnvoll erscheinen, den Zustand wiederherzustellen.
Ich aber nutze diesen handler in manchen Projekten aber zigfach hintereinander, beispielsweise, um Platzhalter in Quelltexten auszutauschen. Und da ist es schwachsinnig, zwischendurch etwas ebenso zigfach wieder zu sichern, was iterativ nie mehr gebraucht wird (eben nur einmal).
Man vergleiche die von jedem benutzen Delimiters mal mit einem öffentlichen Raum; beispielsweise ein Gemeindehaus oder so mit einer bestimmten Bestuhlung.
Da hat es früher auch viele Gemeinden gegeben, die dann entschieden haben, daß es eine gewisse Grundordnung gibt (beispielsweise Tische in Reihen oder eine U-Form) und jede Gruppe am Ende (wenn sie denn die Tische in Vierergruppen oder sonstwie gestellt haben) die Ordnung bitte wiederherstellen sollen.
Was passiert? Die Möbel litten. Heute machen es viele anders: Jeder stellt die Tische so, wie er sie gerade braucht. Oft genug kommt es vor, daß die Gruppe mit der gerade vorhandenen Ordnung zufrieden ist – die Möbel werden viel seltener verstellt, die Lebenserwartung steigt.
Was die Lebenserwartung bei Möbeln, ist die Laufzeit in unseren Scripten.
Ihr meint, das würde doch keine Zeit fressen?
Dann macht mal den folgenden Test:
Code: | repeat 100000 times
set my text item delimiters to "-"
set my text item delimiters to "+"
end repeat |
Auf meinem iMac, 2,8 GHz C2D brauchen diese zweihunderttausend Fixwechsel eine halbe Sekunde … Und da werden keine Variablen in den Speicher geschrieben … _________________ Martin Wolter
--
Apple rocks the planet! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Skeeve •---->
![•----> •---->](/phpBB2/images/ranks/ranki3.gif)
![](images/avatars/109842322644abb04db262b.gif)
Anmeldedatum: 20.04.2006 Beiträge: 1067
|
Verfasst am: 19.08.2011 - 21:51 Titel: |
|
|
Wenn die Mieter (der Scripter) immer wieder die Möbel VOR Benutzung passend hinstellt (die delimiter passend setzt), selbst wenn sie schon passend stehen (richtig gesetzt sind), ist es kein Problem.
So machst Du es.
Wenn er es aber nicht macht, kommt es z.b. hier zu einem Problem:
Code: |
set text item delimiters to ":"
set betraege to text items of einnahmen
repeat with betrag in betraege
set summe to summe + euro(betrag)
end
set betraege to text items of ausgaben
repeat with betrag in betraege
set summe to summe - euro(betrag)
end
|
Wo ist das Problem?
Das Problem ist der Handler "euro" den DU geschrieben hast und der dummerweise text item delimieters auf "," setzt und nicht den alten Wert ":" wieder herstellt.
Leider ist der Nutzer Deines Handlers nicht erfahren genug, daß zu erkennen und darf jetzt erstmal debuggen. _________________ "All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies") |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Wolle-77 •--->
![•---> •--->](/phpBB2/images/ranks/ranki2.gif)
![](images/avatars/605472814474548d48692f.gif)
Anmeldedatum: 25.02.2003 Beiträge: 449 Wohnort: Geldern
|
Verfasst am: 19.08.2011 - 22:37 Titel: |
|
|
Hi Skeeve,
also erstmal zu Deinem Codeausschnitt – den kenne ich nicht. Ich wüßte auch nicht, welchen handler namens euro() ich geschrieben haben soll.
Aber zur Sache. Du hast recht; auch ich bin schon mal über die delimiters gestolpert und habe mal sehr lange gesucht, bis ich gemerkt habe, an welcher Kleinigkeit die seltsamen Fehler auftauchten.
Und ja, seitdem habe ich mir angewöhnt, mich bei jeder wichtigen Sache, die ich damit mache, die stets so zu setzen, daß ich mich auch darauf verlassen kann – gleich welcher handler evtl. dazwischengefunken kann.
Insgesamt komme ich damit aber keinesfalls auf mehr "set text item delimiters" im Quelltext als mit der Methode, sie immer zu sichern und wieder (zurück) zu setzen … _________________ Martin Wolter
--
Apple rocks the planet! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
|
|
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
|
|
|