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

Programm: AppleScript - Funktion: suchen/ersetzen

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> Classic-Snippets
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Snow
Administrator
Administrator


Anmeldedatum: 21.11.2000
Beiträge: 1955
Wohnort: Deiningen

BeitragVerfasst am: 28.04.2003 - 17:31    Titel: Programm: AppleScript - Funktion: suchen/ersetzen Antworten mit Zitat

Beschreibung:
Um alle Vorkommen eines bestimmtes Zeichens in einem Text auf einen Rutsch durch ein anderes Zeichen zu ersetzen, braucht man nicht unbedingt die Hilfe einer Scripting Addition. Allein mit AppleScript-Mitteln ist dies machbar.

Code:

set myText to "Dieser Text möchte gern ohne ö's auskommen können."
set mySearch to "ö"
set myReplace to "oe"

textReplace(myText, mySearch, myReplace)

--
----------------------------------------------------------------------------

on textReplace(theText, srchStrng, replStrng)
tell (a reference to AppleScript's text item delimiters)
set { od, contents } to { contents, { srchStrng } }
try
set { textList, contents } to { (text items of theText), { replStrng } }
set { newText, contents } to { (textList as text), od }
return item 1 of result
on error errMsg number errNbr
set contents to od
error errMsg number errNbr
end try
end tell
end textReplace



Anmerkung: Der 'textReplace'-Handler stammt in dieser Form von Marc K. Myers. Er ist zwar nicht besonders leicht zu verstehen, dafür ist der Code jedoch recht kompakt und effizient.
_________________
Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Armin Egginger
•-->
•-->


Anmeldedatum: 04.05.2002
Beiträge: 96
Wohnort: Germering (b. München)

BeitragVerfasst am: 10.05.2003 - 17:37    Titel: Antworten mit Zitat

Hier mal andere Möglichkeiten, die Buchstaben auszutauschen.

Dieses Script tauscht die einzelnen Buchstaben
- im ASCII Code gekennzeichnet oder
- als direkter Buchstabe gekennzeichnet
gegen einen eingestellten Buchstaben aus. Der erste Teil ist mit Schleife, so daß auch gleich mehrere Buchstaben ausgetauscht werden. Der Handler ist auch bei mehreren Aufrufen in verschiedenen Stellen des Skripts sinnvoll.

Code:
set xEmail to "DerTester <info@derTester.de>"
-- 62, 60, 64 sind die größer/kleiner und das @ Zeichen
set charList to {62, 60, 64}
-- 32, 32, 45 sind Leerzeichen und Bindestrich
set cList to {32, 32, 45}
repeat with n from 1 to (count every item in charList)
   set prevTID to AppleScript's text item delimiters
   set AppleScript's text item delimiters to ASCII character (item n of charList)
   set xEmail to text items of xEmail
   set AppleScript's text item delimiters to ASCII character (item n of cList)
   set xEmail to xEmail as text
   set AppleScript's text item delimiters to prevTID
end repeat
display dialog xEmail


-- oder als Handler
set xtex to "Ein Text, bei dem das -@- getauscht werden soll!"
set xChar to "@"
set xCharRepl to "at"
set xtex to TIDsearchReplace(xtex, xChar, xCharRepl) of me
display dialog xtex

on TIDsearchReplace(xtex, xChar, xCharRepl)
   set oldTID to AppleScript's text item delimiters
   set AppleScript's text item delimiters to xChar
   set xtex to text items of xtex
   set AppleScript's text item delimiters to xCharRepl
   set xtex to xtex as text
   set AppleScript's text item delimiters to oldTID
   return xtex
end TIDsearchReplace


Viel Spaß

Armin
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Yahoo Messenger
UliTs
•->
•->


Anmeldedatum: 26.06.2011
Beiträge: 3
Wohnort: Aachen

BeitragVerfasst am: 26.06.2011 - 14:48    Titel: Antworten mit Zitat

Hallo,

vielen Dank für die beiden Script-Funktionen (oder sagt man Script-Handler?).
Wenn ich z.B. "Jahrgang" durch "||" ersetzen möchte, funktionieren beide Funktionen.
Ich möchte aber das Zeilenendesymbol (#13#10) durch "||" ersetzen, damit ich bei einem mehrzeiligen Text nur noch eine Zeile habe:
Code:
-- in aNote steht der mehrzeilige Text.
set findThis to (ASCII character 13) & (ASCII character 10)
set replaceWith to "||"
set aNote2 to textReplace(aNote, findThis, replaceWith) of me

Hier versagen beide Funktionen. Auch wenn ich nur #13 oder nur #10 ersetzen möchte, passiert nichts. Was mache ich falsch?

Uli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

BeitragVerfasst am: 29.06.2011 - 09:58    Titel: Antworten mit Zitat

Ob es funktioniert oder nicht, hängt davon ab wo Dein Text herkommt. Das MAC OS X verwendet als UNIX-System den LF (ASCII character 10), das MAC OS Classic den CR (ASCII character 13) und auf WINDOWS-Systemen wird CRLF verwendet. Die verschiedenen Möglichkeiten kannst Du sehen, wenn Du im AppleSkript-Editor ein File im Text-Format speicherst.

Auf dem Mac OS X sollte es so gehen:
Code:
set findThis to ASCII character 10


Jedenfalls habe ich es damit probiert und es hat geklappt.

Noch eine Bemerkung: Anstelle von ASCII character 13 kannst Du auch die AS-Konstante return verwenden, das ist kürzer. Der Ausdruck id of return ergibt also auch 13.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
UliTs
•->
•->


Anmeldedatum: 26.06.2011
Beiträge: 3
Wohnort: Aachen

BeitragVerfasst am: 29.06.2011 - 11:29    Titel: Antworten mit Zitat

Hallo woodpecker,

vielen Dank für Deine Hilfe! Genau Deinen Code hatte ich schon mehrfach getestet. Da klappte es nicht. Wahrscheinlich hatte ich da noch andere Fehler drin ...
Nachdem ich es jetzt noch einmal mit Deiner Codezeile probiert habe, funktionierte es auf Anhieb! Super und vielen Dank! Very Happy
--
Jetzt habe ich noch ein kleines Problem: die Zeichensätze...
Hat jemand einen Tip, wie ich die Umlaute in der CSV-Datei (ANSI-Code) richtig hinbekomme?

Uli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

BeitragVerfasst am: 30.06.2011 - 11:03    Titel: Antworten mit Zitat

Hallo Uli,
könntest Du Dein Problem etwas präzisieren? Was willst Du erreichen, was hast Du probiert und was funktioniert nicht so wie Du es willst?

Gruß woddpecker
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
UliTs
•->
•->


Anmeldedatum: 26.06.2011
Beiträge: 3
Wohnort: Aachen

BeitragVerfasst am: 30.06.2011 - 12:26    Titel: Antworten mit Zitat

Hallo Woodpecker,
vielen Dank für die Nachricht.
Ich möchte mit einem Applescript mein Adressbuch in Form einer CSV-Datei anderen zur Verfügung stellen. Das klappt inzwischen sehr gut bis auf die Umlaute, da die "Windows-Welt" ANSI-Code erwartet.
Ich bin in der Lage, die Umlaute Dank der hier vorliegenden beiden Funktionen zu konvertieren (für jeden Umlaut 1 x die Funktion aufrufen), z.B. für das kleine "ü":
Code:
set findThis to ASCII character 159 -- kann ich hier auch Hex 9F angeben?
set replaceWith to ASCII character 252   -- kann ich hier auch Hex FC angeben?
Aber vielleicht gibt es eine elegantere Lösung oder eine Standard-Funktion? Question
Uli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

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

Zitat:
Aber vielleicht gibt es eine elegantere Lösung


Vielleicht mit einem sed-Aufruf? Damit kannst Du alle 3 Umlaute in Gross- und Kleinschreibung auf einmal erschlagen. Das könnte ungefähr so aussehen:
Code:
set txt to "Müller-Lüdenscheid
Möller-Krömelhagen
Räufel-Rätzelstein"

do shell script "sed 'y/äöüÄÖÜ/öüäÖÜÄ/' <<+++
" & txt



Das y-Subkommando des sed-Kommandos übersetzt einzelne Zeichen eines Textes in andere Zeichen. Die beiden Strings müssen immer dieselbe Länge haben (ist irgendwie klar, oder?).
Ich habe jetzt beispielhaft mal alle ä gegen ö, alle ö gegen ü und alle ü gegen ä getauscht. Du musst auf der rechten Seite natürlich die richtigen Zeichen einsetzen. In meinem Beispiel kommt das raus:
Code:
"Mäller-Lädenscheid
Müller-Krümelhagen
Röufel-Rötzelstein"


Versuch's mal so.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 30.06.2011 - 20:03    Titel: Antworten mit Zitat

Besser wär's UliTs, Du wüßtest die benötigten Zeichensätze. Perl kann Konvertierungen von Zeichensätzen von Haus aus.
_________________
"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
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> Classic-Snippets 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