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

string replace

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
mucho
•->
•->


Anmeldedatum: 16.03.2011
Beiträge: 2
Wohnort: Zürich

BeitragVerfasst am: 16.03.2011 - 14:38    Titel: string replace Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
hubionmac
•--->
•--->


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

BeitragVerfasst am: 16.03.2011 - 22:22    Titel: Antworten mit Zitat

Kann gar nicht sagen wie oft ich die Funktion schon verwendet habe Arrow
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 18.03.2011 - 10:15    Titel: Antworten mit Zitat

hubionmac hat Folgendes geschrieben:
Kann gar nicht sagen wie oft ich die Funktion schon verwendet habe Arrow

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
Benutzer-Profile anzeigen Private Nachricht senden
hubionmac
•--->
•--->


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

BeitragVerfasst am: 18.03.2011 - 11:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 18.03.2011 - 13:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
mucho
•->
•->


Anmeldedatum: 16.03.2011
Beiträge: 2
Wohnort: Zürich

BeitragVerfasst am: 21.03.2011 - 15:33    Titel: Antworten mit Zitat

Herzilein, Sonnenschein, Liebes.....

vielen Dank für Eure Bemühungen
Mucho
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 449
Wohnort: Geldern

BeitragVerfasst am: 17.08.2011 - 18:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 19.08.2011 - 21:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 449
Wohnort: Geldern

BeitragVerfasst am: 19.08.2011 - 22:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum 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