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

windos .eml Darteien zu Eudora (Sys 8.6) konvertieren

 
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
WiLi
•-->
•-->


Anmeldedatum: 30.11.2000
Beiträge: 42

BeitragVerfasst am: 24.01.2005 - 01:15    Titel: windos .eml Darteien zu Eudora (Sys 8.6) konvertieren Antworten mit Zitat

Hallihallo!

Vorweg: Gratulation zur sehr gelungenen Aufmachung des Forums. Bin schon Jahrelang nichtmehr hiergewesen, zuletzt im alten Forum (Macscripter hieß es?) und stelle erstaunt und erfreut fest, daß sogar meine Zugangsdaten noch funktionieren. Saubere Arbeit.

Meine derzeitige Aufgabenstellung ist, mit Eudora auf dem Mac mit System 8.6 regelmäßig exportierte Windows-eMails zu beantworten. Dazu ist folgendes nötig:

1.Nimm die .eml Datei, füge vor den Anfang ein "from ???@??? " und ein festes Datum ein (Dies kann alles zusammen als Konstante rein, das Datum wird von Eudora sowieso überschrieben). Eudora erkennt daran seine ORDNER.
2.Sind noch weitere Dateien da, so hänge sie nach obiger Ergänzung an den Schluß der ersten Datei an. Wiederkehrende Header "from ???@??? und Datum" trennen die eMails im Eudora Ordner
3.Tausche sämtliche "x" gegen nix aus (x ist ein Linefeed, glaube ich. Eudora kann damit nichts anfangen, es provoziert Fehler)
4. Speichere die Datei unter dem Namen "Import yyyy.mm.dd Zeit" in den Eudora Ordner "xy" im Systemordner als TEXTdatei mit dem Creator-Code "uvwx" ab.

Die so erstellten eMails sind in Eudora beantwortungsfähig. Das heißt: ich kann HIER auf REPLY drücken und die Antwort geht raus, als hätte ICH die eMail bekommen, obwohl sie auf einem anderen Rechner entgegengenommen wurde.

Für Hinweise zur Umsetzung bin ich natürlich dankbar.

Bislang mache ich diese Schritte "zu Fuß", d.h. mit einem Textprogramm (Applescriptfähig) und einem Droplet zur Creatoranpassung.

Meine Vorstellung ist, alle obige Funktionen in ein Droplet zu packen, auf welches ich dann die mehreren Dateien zugleich drauflege.

Vielen Dank für Eure Tips!

Wittrich Lindenthal

(selbst ein Nordlicht, allerdings momentan in Europas sonnigem Süden)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Snow
Administrator
Administrator


Anmeldedatum: 21.11.2000
Beiträge: 1946
Wohnort: Deiningen

BeitragVerfasst am: 26.01.2005 - 01:12    Titel: Antworten mit Zitat

Hallo WiLi,

schön, dass du den Weg hierher wieder gefunden hast.

Diese .eml Dateien, sind das einzelne Mails?

Ich würde das ganze als Droplet realisieren.
Alle, auf das Droplet gezogenen Dateien landen in einer Liste.
Diese Liste wird in einer Schleife abgearbeitet.

Jede einzelne Datei wird per 'read' in eine Variable eingelesen.
Dann kannst du den neuen Text zusammenbauen.

set newText to "from ???@???? + Datumsangabe" & VariableDieMailEnthaelt

Dann legst du eine neue Textdatei an und schreibst den Inhalt der Variable newText hinein (siehe Workshop-Artikel "Write-Befehl (1) & (2)).

Solltest du mehrere Mails auf das Droplet gezogen haben, kannst du deren Inhalt an die neu erstellte Textdatei anhängen (siehe Workshop-Artikel).

Nachdem der Schreibvorgang abgeschlossen ist, muss lediglich der Creator geändert werden, was ja wohl kein Problem darstellen sollte.

Ein Problem gibt es noch mit den "x". Wenn sich der Inhalt der Mail in einer Variable befindet, kannst du diesen Inhalt natürlich bearbeiten. D.h. du kannst auch bestimmte Textwerte ersetzen lassen. Allerdings dürfte es wenig Sinn machen, alle "x" durch nix zu ersetzen, da ja wohl auch normale Wörter vorkommen können, die ein "x" enthalten. Befinden sich die von dir bezeichneten "x" jeweils am Zeilenende? Dann könnte man das hinbekommen. Oder wie löst du das manuell im Textverarbeitungsprogramm?

Aber ich würde sagen, gehen wir's mal Schritt für Schritt an. Wenn ein konkretes Problem auftaucht, meldest du dich hier.
_________________
Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
WiLi
•-->
•-->


Anmeldedatum: 30.11.2000
Beiträge: 42

BeitragVerfasst am: 26.01.2005 - 03:58    Titel: Antworten mit Zitat

Och, Du bist ja noch auf?
Zitat:

Diese .eml Dateien, sind das einzelne Mails?
ja, einfach der exportierte blanke Text.
Zitat:

Ich würde das ganze als Droplet realisieren.
Alle, auf das Droplet gezogenen Dateien landen in einer Liste.
Diese Liste wird in einer Schleife abgearbeitet.
Jede einzelne Datei wird per 'read' in eine Variable eingelesen.
Dann kannst du den neuen Text zusammenbauen.

set newText to "from ???@???? + Datumsangabe" & VariableDieMailEnthaelt

ja, das gefällt mir schonmal ganz gut. Ich hab allerdings meine Anfangsschwierigkigkeiten mit AS. Variablenübergabe macht mir "Schmerzkopf".
Zitat:

Dann legst du eine neue Textdatei an und schreibst den Inhalt der Variable newText hinein (siehe Workshop-Artikel "Write-Befehl (1) & (2)).
Solltest du mehrere Mails auf das Droplet gezogen haben, kannst du deren Inhalt an die neu erstellte Textdatei anhängen (siehe Workshop-Artikel).
Nachdem der Schreibvorgang abgeschlossen ist, muss lediglich der Creator geändert werden, was ja wohl kein Problem darstellen sollte.

Ein Problem gibt es noch mit den "x".


nein, kein Problem, Ich hatte mich mißverständlich ausgedrückt. Was ich hier "x" nante, ist in wirklichkeit eine Zeichen, welches nur als leerer Kasten angezeigt wird, und es ist nur eines, stets dasselbe und verändert sich nicht. Es muß ein Linefeed sein.


so sieht mein Code momentan aus, aber da gips noch manches zu ändern. Ich hab schon ganz kurzgekaute Fingernägel.

Code:

property fileType : "TEXT" -- change to whatever you want
property creatorType : "CSOm" -- change to whatever you want ttxt = simpletext, CSOm = Eudora

set ZielDatei to (open for access file ¬
 "Mac HD:eMail Konversion" with write permission)

on open {theList}
 try
  tell application "Finder"
   repeat with theItem in theList
    write "???@???" to ZielDatei
    read theItem
    write to ZielDatei
    set file type of ZielDatei to fileType
    set creator type of ZielDatei to creatorType
   end repeat
  end tell
 on error
  close access ZielDatei
 end try
end open

close access ZielDatei
set file name of ZielDatei to "testxxx"
set file type of ZielDatei to fileType


Der Nachteil von AS ist einfach, daß vieles so einfach geht, daß man sich nicht wirklich mit der Materie auseinandersetzen muß. Und dann bleibt keine Prägung in den grauen Zellen. Und daß es keine strenge Syntax gibt wie bei manch anderer Programmiersprache. "Du kannst es so ausdrücken, aber auch von allen Begriffen das Gegenteil nehmen. Es komt dasselber bei raus" (ich übertreibe natürlich)

Ich bin halt ein blutiger Anfänger. Haste ma 'n Flaster?


Vielen Dank schonmal vorweg!

Bei uns ist momentan auch seeehhr kalt.

WiLi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Snow
Administrator
Administrator


Anmeldedatum: 21.11.2000
Beiträge: 1946
Wohnort: Deiningen

BeitragVerfasst am: 29.01.2005 - 16:04    Titel: Antworten mit Zitat

Hi WiLi,

das Ändern des Type- und Creator-Codes innerhalb der Schleife ist überflüssig. Es genügt, wenn du es hinterher machst.

Beginnst sofort mit dem Schreiben in die Zieldatei. Beim ersten Mal ist das ja noch OK, da die Datei ja jungfräulich ist. Solange der 'access' auf die Datei nicht geschlossen wird, ist's auch noch OK. Was aber wenn du später nochmal was in die Datei schreiben willst? Dann wird der neue Text an den Dateianfang geschrieben und überschreibt den bereits vorhandenen Text (siehe Workshop-Artikel zum Write-Befehl).

Die Daten, die du ausliest, werden nicht weiterverwendet. Direkt nach dem 'read'-Befehl müsstest du 'result' abfragen und in eine Variable verfrachten. Oder du schreibst gleich so:

set alterText to read theItem

Somit landet das Ergebnis des 'read'-Befehls in der Variablen alterText.

Diesen kannst du dann anschließend in deine Datei schreiben.

write alterText to ZielDatei

Bevor du den Text in die ZielDatei schreibst, sollen aber die LineFeeds ersetzt werden. Dazu suchst du dir in den Snippets-Foren das geniale Skript zum Suchen/Ersetzen per Text Item Delimiters und integrierst es in dein Skript. Du legst fest, welches Zeichen gesucht und durch welches es ersetzt werden soll, und übergibst diese Daten zusammen mit deinem Text an den Handler. Dieser liefert den korrigierten Text zurück, den du dann in deine ZielDatei schreiben kannst.

Den Tell-Block an den Finder brauchst du für die Lese-/Schreiboperationen nicht, erst dort wo Type und Creator geändert werden. Da dies ja erst nach der Schleife sinnvoll ist, kannst du den Tell-Block also aus der Schleife verbannen. Die 'read' und 'write'-Befehle müssen sonst nämlich erst vom Finder weitergeleitet werden, da sie ja von den Standard Additions zur Verfügung gestellt werden und nicht vom Finder.

Der Aufbau deines Skripts stimmt auch noch nicht so ganz. Der open-Handler wird aktiv, wenn man Dateien oder Ordner auf ein Droplet zieht. Alles was außerhalb dieses Handlers steht, also auf oberster Skriptebene gehört zum impliziten run-Handler. Implizit deshalb, weil kein 'on run' deklariert wurde. Der run-Handler wird aber nur ausgeführt, wenn das Skript per Doppelklick gestartet wurde oder die Ausführung aus dem Skripteditor heraus erfolgt.

Folglich bleiben diese Befehle unberücksichtigt, wenn du das Skript als Droplet verwendest.

Die Festlegung der Zieldatei solltest du also gleich an den Anfang des open-Handlers verlegen oder in einen extra Handler, der vom open-Handler aus aufgerufen wird.

Ganz wichtig ist auch, 'close access Zieldatei' zu aktivieren, sobald der Schreib-/Lesevorgang erfolgreich abgelaufen ist. Also unbedingt innerhalb des Try-Blocks und zwar gleich nach der Schleife.

Namen, Type und Creator werden zum Schluß geändert. Diese Anweisungen auch in einen extra Handler (Tell-Block an den Finder nicht vergessen) verfrachten und den Handler vom open-Handler aus aufrufen.
Mehr fällt mir im Augenblick nicht dazu ein. Jetzt lasse ich dich mal basteln.
_________________
Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
WiLi
•-->
•-->


Anmeldedatum: 30.11.2000
Beiträge: 42

BeitragVerfasst am: 24.02.2005 - 01:56    Titel: bastel, bastel .... Antworten mit Zitat

vielen Dank, Peter, für Deine Mühe. Ich hab jetzt schon so manche Stunde über meinem Skript gebrütet und es tut mittlerweile sogar das, was ich mir davon versprach:

mehrere eMails mit eingefügter Kopfzeile aneinanderhängen und in eine Datei schreiben.

Das ändern des Creatorcodes funktioniert wohl in einem on-open Handler in der Schleife, aber wenn ichs NACH der Schleife mit

tell application "Finder"
set creator type of (" HD 5 GB:--Applescript: eMailsZumAntworten " & DateiLaufNr) to CreatorTyp
end tell

versuche, bekomme ich die Fehlermeldung:

--> Can't set «class fcrt» of " HD 5 GB:--Applescript: eMailsZumAntworten 3" to "CSOm".

Was muß ich da ändern?



Heute wurde ich (mehr zufällig) fündig auf der Suche nach einer Beschreibung zur Variablenübergabe. Die Google-Suche (!!!) führte mich in den Workshop "Handler" wo alles wunderbar erklärt wird.

Erst jetzt fällt mir auf, daß Google mich da zu einer Seite

http://www.fischer-bayern.de/applescript/html/handler.html

geführt hat, die NORMAL gar nicht zugreifbar ist. Sicherlich nicht beabsichtigt.

In der normalen Workshop-Übersicht erscheint nur "Rekursive Handler"

Mein Tip zur Benennung in der Übersicht:

Handler (und dann in grau weiter:) Variablenübergabe, Droplet, Applet
(Dies sind nämlich alles Themen, nach denen ich schon suchte, die ich aber erst jetzt fand)

Übrigens ist unten in dem Workshop Droplet/Applet der Link zum deutschen Artikel tot. Sicherlich auch nicht so beabsichtigt.

Ich arbeite sonst auch viel mit Filemaker und wundere mich, daß manche der Dinge, die FM mit der Linken Hand aus dem Ärmel schüttelt, hier in AS so kompliziert sind:

Austauschen(Text;Suchtext;Ersatztext)

und Datumausgabe in kurzem Format, oder noch besser
Jahr(Datum),Monat(Datum),Tag(Datum),
wobei "Datum" aus einer Variable oder Formel oder auch explizit "1.April 2005" angegeben werden können.


Übrigens ist es mir auch noch nicht gelungen, den Finder eine Datei umbenennen zu lassen.

property ZielDatei : " eMailsZumAntworten 3"
tell application "Finder"
set name of ZielDatei to "testxxx"
end tell

Hier sagt er mir als Fehlermeldung:
Laufzeitfehler:
--> Can't set name of " eMailsZumAntworten 3" to "testxxx".

Was muß ich hier ändern?

Ja ja, so muß man sich Millimeter für Millimeter vorwärtshangeln.

Nun denn, bei meinem ersten Basic Programm gabs auch reichlich Syntaxfehler, aber letztlich gings schneller vorwärts.

Danke!

WiLi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
spirigwi
•----->
•----->


Anmeldedatum: 10.07.2003
Beiträge: 1517
Wohnort: Olten-CH

BeitragVerfasst am: 24.02.2005 - 10:42    Titel: Re: bastel, bastel .... Antworten mit Zitat

WiLi hat Folgendes geschrieben:
AS so kompliziert sind:

Austauschen(Text;Suchtext;Ersatztext)
=FM`s Einfachlösung fragt spirigwi

war ich bisher auch dieser Meinung bis mir SNOW geholfen hat im Moment noch diese Funktion des FM direkt als SNIPPET für AS umzubauen:
Vorteil: in AS bist du an der frischen Luft beim Skripten, im FM drinnen komme ich mir vor wie unsere Tamilen: ganzer Tag in einer dampfenden Küche im Keller unten Kunstlicht ihr Asyl abarbeitend und dann als meine hautkranken Patienten...
vielleicht hilfst du auch mit beim SNIPPET- bau und wir machen dem FileMaker beim suchenersetzen den Garaus
http://www.fischer-bayern.de/phpBB2/viewtopic.php?t=1347

Ps.
Von wegen einfach! FM.s: Austauschen(Text;Suchtext;Ersatztext)
kann ganz leicht bei konkreter anwendung zu folg. werden :
Razz aus irgend einem Grund platzt Snows Forum aus allen Nähten, es wird so furchtbar breit...ich zestückle mit zeilen schlägen das folgende Beispiel einer "einfachen" FM-formel: ein Müsterli der einfachheit sozusagen:


Austauschen
(Austauschen
(Austauschen(Austauschen(Austauschen(Austauschen(Austauschen
(Austauschen(Austauschen(Austauschen(Austauschen(Austauschen
(Austauschen(Austauschen(Austauschen(Austauschen(VaKeBericht; "•"; "-"); "€"; " "); "¶Vorbefund "; "*Vorbefund"); "¶B "; "*Berichtheader"); "Pat.-Nr. "; "*Pat.-Nr."); "¶Labor Eingang: "; "*Labor Eingang"); "¶Entnahmedatum: "; "*Entnahmedatum"); "¶PD Dr. med. W. Kempf"; "*"); "¶Kopien "; "*Kopien"); "¶Kommentar "; "*Kommentar"); "¶Mikroskopie "; "*Mikroskopie"); "¶Makroskopie "; "*Makroskopie"); "¶Klinische Angaben "; "*Klinische Angaben"); "¶Exzisionsstelle "; "*Exzisionsstelle"); "¶Diagnose "; "*Diagnose"); "¶"; " ")

Da scheint mir dann Snows Vorschlaghammer-Plattwalzenprodukt auf meinen SNIPPET-versuch wesentlich einfacher. Viva AS!
_________________
 Skript-Fan => ein � -Fan =>Scr¿¿-KongFuSius_Kurpfusius
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Snow
Administrator
Administrator


Anmeldedatum: 21.11.2000
Beiträge: 1946
Wohnort: Deiningen

BeitragVerfasst am: 24.02.2005 - 21:16    Titel: Re: bastel, bastel .... Antworten mit Zitat

WiLi hat Folgendes geschrieben:
Das ändern des Creatorcodes funktioniert wohl in einem on-open Handler in der Schleife, aber wenn ichs NACH der Schleife mit

tell application "Finder"
set creator type of (" HD 5 GB:--Applescript: eMailsZumAntworten " & DateiLaufNr) to CreatorTyp
end tell


Das liegt daran, dass du in einem "on open"-Handler eine Referenz verwendest, die in einer Variablen gespeichert ist. In deinem obigen Beispiel hast du lediglich einen Textwert (Pfadangabe) - du brauchst aber eine Referenz zu der Datei.

Versuch's mal so:

tell application "Finder"
    set creator type of alias (" HD 5 GB:--Applescript: eMailsZumAntworten " & DateiLaufNr) to CreatorTyp
end tell


Zitat:

Heute wurde ich (mehr zufällig) fündig auf der Suche nach einer Beschreibung zur Variablenübergabe. Die Google-Suche (!!!) führte mich in den Workshop "Handler" wo alles wunderbar erklärt wird.

Erst jetzt fällt mir auf, daß Google mich da zu einer Seite

http://www.fischer-bayern.de/applescript/html/handler.html

geführt hat, die NORMAL gar nicht zugreifbar ist. Sicherlich nicht beabsichtigt.

In der normalen Workshop-Übersicht erscheint nur "Rekursive Handler"

Mein Tip zur Benennung in der Übersicht:

Handler (und dann in grau weiter:) Variablenübergabe, Droplet, Applet
(Dies sind nämlich alles Themen, nach denen ich schon suchte, die ich aber erst jetzt fand)


Danke für den Hinweis und Tipp. Ich muss erst mal schauen, ob ich den Artikel überhaupt fertig geschrieben habe. Wink

Zitat:

Übrigens ist unten in dem Workshop Droplet/Applet der Link zum deutschen Artikel tot. Sicherlich auch nicht so beabsichtigt.


Der Link zu meinem Posting in der AppleScript-Mailinglist ist tot (der steht aber oben), da Apple anscheinend das Archiv geändert hat. - Ich muss erst mal suchen, ob die alten Sachen überhaupt noch wo archiviert sind.

Zitat:

Übrigens ist es mir auch noch nicht gelungen, den Finder eine Datei umbenennen zu lassen.

property ZielDatei : " eMailsZumAntworten 3"
tell application "Finder"
set name of ZielDatei to "testxxx"
end tell

Hier sagt er mir als Fehlermeldung:
Laufzeitfehler:
--> Can't set name of " eMailsZumAntworten 3" to "testxxx".

Was muß ich hier ändern?


Erst mal sollte die Pfadangabe zur Zieldatei komplett sein, also mit dem Festplattennamen beginnen usw. Dann brauchst du auch hier eine Referenz.

file "Pfadangabe"

oder

"Pfadangabe" as alias
_________________
Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
WiLi
•-->
•-->


Anmeldedatum: 30.11.2000
Beiträge: 42

BeitragVerfasst am: 25.02.2005 - 01:22    Titel: 99 Taler Antworten mit Zitat

Ein reicher Kaufmann fuhr über Land, als in einer einsamen Gegend der Motor anfing zu spucken und schließlich stehenblieb. Do konnte er plötzlich die Lerchen auf dem Felde singen hören, und der Bauer auf dem Acker verriet ihm sogar, daß es im nächsten Nest einen Schmied gebe.
Also machte er sich auf Schusters Rappen zum Schmied, um ihn zu seinem Gefährt zu holen. Der Schmied sah sich die Sache an, nahm einen Nagel aus der Tasche, setzte ihn an eine Bestimmte Stelle des Motors und mit einen Stein vom Acker gabe er einen kräftigen Schlag.

Siehe da! Der Motor startete wieder und lief von da an ohne Mucken.

"Was bekommen Sie dafür?" fragte der Kaufmann.
"100 Taler" sprach der Schmied.

"Waaas, hundert Taler? für einen Klopp?"

"Nein, der Klopp kost nur einen Taler, aber gewußt wo, das kostet 99"



Lieber Peter,
Du siehst, das "Gewußt wo" ist keine Erfindung des Applescript-Zeitalters.
Nimm bitte hier diese symbolischen 100 Taler als kleine Anerkennung für Deine Geduld und Mühe. Es war nicht fruchtlos, daß Du mich das letztemal erstmal basteln ließest (statt mir die Torte fertig zu servieren), und ich hab mich in der Welt ein wenig umgesehen.

Zwar hab ich Deinen Rat noch nicht probiert, aber ich bin mir sicher, daß es mir weiterhilft.

Übrigens bin ich auf der Suche nach Search and Replace auf zwei elegante Fährten gestoßen:

Dier eine benutzt das Suchwort als Textitemdelimiter und die andere benutzt eine Regular Expression Scripting Addition. Ich lasse beide zwecks Übersicht in einem Folgebeitrag erscheinen.

Dank!

WiLi

Ich sehe, der fehlende Verweis auf den "Handler" hier rechts an der Kante ist schon repariert, ganz schön fix!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
WiLi
•-->
•-->


Anmeldedatum: 30.11.2000
Beiträge: 42

BeitragVerfasst am: 25.02.2005 - 02:15    Titel: Suche und ersetze: zwei elegante Lösungen Antworten mit Zitat

Lieber spirigwi,

bisch wohl in dr Zäntralschwiiz zhuus? Fuwoo bisch dää. Fo Zürrii odr?

Ach, wie groß wär doch die Schweiz geworden, wenn man nicht alles hochkant gestellt hätte!


Ja, das mit der undendlichen Austauschen-Geschichte ist mir auch schon aufgefallen.

Dazu fällt mir ein passendes Zitat eines Perl-Programmierers ein:

Perl tends to appear possibly somehow cryptic, depending who created the code and how.
Fear not. If the compiler can understand the code, you should also not have any trouble with understanding it.

auf deutsch:
Perl Code erscheint je nach Programmierer und Gepflogenheit möglicherweise ein wenig kryptisch.
Fürchtet Euch nicht. Wenn der Compiler den Durchblick schafft, sollte es für Euch auch ein Leichtes sein.

FM lädt manchmal zu "quick and dirty programming" ein: Huuch, wie bin ich denn hierher geraten, gibs da auch nen Weg zurück?
Nichtsdestotrotz ist man mit FM stets innerhalb des Geländers, und es ist NICHT einfach, durch dessen Maschen zu schlüpfen.

Bei AS ist es eigentlich auch gar nicht so einfach, durch die Maschen zu schlüpfen. Der feine Unterschied liegt darin, daß wir uns hier außerhalb des Geländers befinden und im Nebel.


Das Thema heißt "Suche und ersetze", gefunden in einer Skriptsammlung von Apple


--Replacing Characters in a String
--The following sub-routine can be used to
--replace specific characters in a string. The sub-routine has
--three passed parameters:
--1) the text to alter, 2) to text to search for, 3) the replacement text


set the message_text to ¬
"On Tuesday I told you to have the report ready by next Tuesday."
set the message_text to replace_chars(message_text, "Tuesday", "Friday")
--> Returns: "On Friday I told you to have the report ready by next Friday."

on replace_chars(this_text, search_string, replacement_string)
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 ""
return this_text
end replace_chars



Die nun folgende Lösung ist wirklich kompakt, bedarf aber einer Scriptingaddition.
Diese heißt
RegEx Commands 1.0
by Leonard Rosenthol & Lindsey Dubb

und besteht aus vier Modulen, eines davon fürs Suchen und Ersetzen:

REReplace: Replaces any substring that matches the pattern with the replacement string
REReplace string -- text to be matched
with string -- replacement text
pattern string -- regular expression pattern
[ignoreCase boolean] -- Should the match be done ignoring case?
[separator string] -- line separator character (default is carriage return/CR)
Result: string -- the new version of the text



Beispiele:

-- ** REReplace **
-- This converts the text to uppercase.
REReplace searchedText pattern ".*" with "\\u&"

-- A line numberer
REReplace searchedText pattern ".*" with "# &"

-- A sentence capitalizer
-- (The null separator is necessary, since \r won't do here)
REReplace searchedText pattern "([.
?!:]\\W+|^\\W*)\\<(.)" with "\\1\\u\\2" separator ""

-- Number nonblank lines
REReplace searchedText pattern "^.*\\S" with "% &"

-- Remove Duplicates
-- (from idea by Peter Hartmann)
-- This only works if you first sort the lines of the text.
-- It doesn't matter how you sort the lines, so long as all identical
-- lines are grouped together.
-- This pattern will fail if the last items in the list are
-- repeated. You can append a return to the end of the list before
-- running this command in order to fix that.

set cleanedList to (REReplace sortedList pattern "([^
]+)\\r(\\1\\r)+" with "\\1\\r" separator "")

alles klar?

Hier wird das \ benutzt wie auch sonst bei Regulären Ausdrücken. Weil aber AS dieses \ in genau gleicher Weise verwendet, muß es eben durch ein \ maskiert werden. Daher rührt es also, daß die \ hier stets paarweise erscheinen. Ansonsten scheinen RegExe hier benutzt zu werden wie von woanders gewohnt. Das könnte für manch einen Programmierer eine große Erleichterung zum Einstieg in Applescript bedeuten.

Heppi Skripting!

WiLi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
spirigwi
•----->
•----->


Anmeldedatum: 10.07.2003
Beiträge: 1517
Wohnort: Olten-CH

BeitragVerfasst am: 25.02.2005 - 09:12    Titel: Antworten mit Zitat

hm, eins hab ich schon gelernt von diesem verfluchten OSX:
meide alle OSAXEN im OS9 wo du nur kannst. Also:
schreibe AS nackt, pur, gnadenlos:

füdliblutt

(Mitte der Schweiz heisst nicht Zentralschweiz! ich komme aus Olten und das wäre die Mitte)
deshalb turne ich mich noch in folg. SNIPPET aus :

http://www.fischer-bayern.de/phpBB2/viewtopic.php?t=1347

meine Einladung lässt dir die Wahl:
bringst du die Austauschkaskade von FileMaker "un-dirty" hin?
oder willst du lieber deine eleganten AS-suche-ersetzen ohne OSAX uns zeigen?
ich freu mich drauf, im Moment hab ich mit FileMaker-s lösung big-probplems mit AS nur noch mikrige problemli, snow hat mich soweit gebracht

Laughing
_________________
 Skript-Fan => ein � -Fan =>Scr¿¿-KongFuSius_Kurpfusius
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
WiLi
•-->
•-->


Anmeldedatum: 30.11.2000
Beiträge: 42

BeitragVerfasst am: 25.02.2005 - 16:16    Titel: a noo, hier wird NIX exgüsé Antworten mit Zitat

Austauschkaskade

Ja, da hast Du wieder was angefangen.

Wenn es Dir wirklich um die *Kaskade* geht, gibt es in FM nur diese und noch die folgende Lösung:
FM arbeitet extrem effektiv mit dem "Ersetzen"-Befehl, da spielt es dann auch keine große Rolle, ob Du die Austausch-Taschen ineinandersteckst oder nacheinander abbummelst.

Austauschen(Text; "a";"A")
Austauschen(Text; "b";"B")
Austauschen(Text; "c";"C")

Dies wäre eine schöne saubere und übersichtliche Lösung.

Wenns denn die Kaskade sein soll, so behlfe ich mich damit, die Taschen zwar INeinander, aber optisch NACHeinander zu drapieren.

also anstelle:
Austauschen(Austauschen(Austauschen(Text; "c";"C"); "b";"B"); "a";"A")

dann so:
Austauschen(Austauschen(Austauschen(
Text;
"c";"C");
"b";"B");
"a";"A")

DA kann man auch leicht noch die Reihenfolge variieren oder weiter Taschen anstelle von "Text" einfügen

Was auch sehr übersichtlich, aber etwas langsamer abläuft, dafür aber extrem flexibel auch "on the Fly" verändert werden kann (nämlich vom Bediener!), ist eine Schleife, die Variableninhalte abfragt

Schleife
Schleifenzähler = Schleifenzähler + 1
Austauschen(Text; WörterMitte(SuchVar;Schleifenzähler);
WörterMitte(ErsatzVar;Schleifenzähler))
EndSchleife

Dies ist für den Anwender DANN eine Katastrophe, wenn er in der einen Variable Einträge zuviel oder zuwenig hat. (Die Jacke sozusagen mit dem zweiten Knopf aufs erst Loch knöpft)

Dagegen wäre die PAARWEISE Anordnung der Such/Ersatzwörter in EINER Variablen die übersichtliche und logische Abhilfe. Sie birgt dann noch die Gefahr, daß die Paare Versatz haben, daß dann also Arsatztext gesucht wird und Suchtext eingesetzt wird.

Aber fürchtet Euch nicht. Auch hier kann man mit FM sehr elegante Lösungen zaubern, indem man mit Satztrennern arbeitet:
Such1 Ersatz1 ; (<- oder ein anderes markantes Zeichen, auch RETURN möglich)
Such2 Ersatz2 ;
Such3 Ersatz3 ;

Dies also alles in EINER Variablen, die dann eben auch vom Bediener verändert werden kann, falls gewünscht.
(die Satztrenner werden dann als Delimiter behandelt, die dazwischenliegenden Buchstaben als eine Austauschsequenz bearbeitet.
Fehleingaben (zuviele Wörter oder zuwenige zwischen den ";")haben dann nur auf DIESE Austauschgruppe Wirkung ("Ein Knopf fehlt an der Jacke")


So, jetzt bist Du an der Reihe.

Grüße von WiLi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
spirigwi
•----->
•----->


Anmeldedatum: 10.07.2003
Beiträge: 1517
Wohnort: Olten-CH

BeitragVerfasst am: 25.02.2005 - 22:11    Titel: Antworten mit Zitat

Confused mal so fürs erste: ein Selbstporträt, ich heisse Willy..

geht schon wieder nach deinen //¿¿¿¿ wurde der Mund irgendwie schräg Confused (wie fig. ziegt), jedenfalls konnte ich noch nichts EINFACHES an FileMakers-ERSATZ-Funktion sehen:

WiLi hat Folgendes geschrieben:

Austauschen(Text; "a";"A")
Austauschen(Text; "b";"B")
Austauschen(Text; "c";"C")

kein Zweifel dass das nett ausschaut aber so bringt mans ja auch nirgends hin nicht einmal ins Filemaker

ZB: um aus WiLi einen richtigen Willy zu machen:

Austauschen(Text; "Li";"lly")--das wäre ja wiederum nur die Hälfte
Austauschen(Text; "b";"B")--wäre hier dann schon Feierabend oder eine zweite Formel nötig?
Austauschen(Text; "c";"C")--wie bringst dies dann in die schachtel?

Weisch, ich bin ein optischer Typ und verstehe nur Bahnhof und ringe nach einem
EINGABE-MASKEN-ERSATZ für SUCH/ERATZ-Parameter
für konkrete, jeweils riesige oder auch mikrigkleine SuchenErsatz-Stücke, aber immer mehrere seiend für einen komplexen herauszukopierenden Gesamttext , somit werden die dazwischen liegenden Brocken als jeweilige Feldinhalte datenbankfähig.
einen EINGABE-MASKEN-ERSATZ , den sollte man auf biegen und brechen in AS einfacher hinkriegen als in FM , da bin ich überzeugt.

WiLi hat Folgendes geschrieben:

dann so:
Austauschen(Austauschen(Austauschen(
Text;
"c";"C");
"b";"B");
"a";"A")


das sieht auch nett aus und funktioniert auch in einer Formel oder Feld-angeben Funktion des FM
aber als Eingabemaske in einem Text-programm (oder Variablen-Feld des FM, Z.B.) als Muster plaziert erinnert es mich vom Schiff aus wiederum an mein Gestümper auf SNIPPET und hat mir ehrlich gesagt dort auch als Inspiration (hier ist Nebel schon eher angebracht) gedient die EINGABE-MASKE mit Propertys zu lösen:
http://www.fischer-bayern.de/phpBB2/viewtopic.php?t=1347
(schau mal dort vorbei zum helfen)
ich zeige:
-- ==================================================
property TEXTINHALT : "Jetzt bist du wieder an der Reihe WiLi"
property SuchText_1 : "li"
property ErsatzText_1 : "lly"
property SuchText_2 : "ä"
property ErsatzText_2 : "ae"
property SuchText_3 : "ü"
property ErsatzText_3 : "ue"
property SuchText_4 : "@"
property ErsatzText_4 : "at"
property SuchText_5 : "Affe"
property ErsatzText_5 : "Kuh"
property SuchText_6 : "spirigwi"
property ErsatzText_6 : "Willy ein Voll-Trottel falls Skript nicht soweit kommt"
--...müsste dann heissen wenns SNIPPET mal fertig ist
--ohne dass der Willy wöti gern oder Aff mit @ schreibt(was als rest der vorherigen Eingabemaske halt noch übrig bliebe.. sondern:

"Jetzt bist du wieder an der Reihe Willy"


aber guck mal weiter unten wie dieser SNOW mit AS-trampel_trampel_bums_zack dann eine idioten-sichere EINGABE-MASKEN-ERSATZ-Liste in elegantester Art für einen hobby-quadrat-FM-Asser wie mich hinschmeisst:
nix Schachtel, schachteln am schachtelsten von Filemaker ist mehr zu sehen, on shot, pum ins schwarze.
Es gibt bei AS zwei Dinge hab ich gelernt: AS das ist eine Sache, recht kompliziert, AS aber in der Hand eines Virtuosen wie Snow wird alles ganz bubig

WiLi hat Folgendes geschrieben:

So, jetzt bist Du an der Reihe.

Gruss von spirigwi, kurz Willy (das wär ich dann)
_________________
 Skript-Fan => ein � -Fan =>Scr¿¿-KongFuSius_Kurpfusius
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
WiLi
•-->
•-->


Anmeldedatum: 30.11.2000
Beiträge: 42

BeitragVerfasst am: 28.02.2005 - 02:33    Titel: Antworten mit Zitat

Ja, Willy, ich geb Dir recht:

bei so monströsen Eingaben, wie Du sie veranstaltest, ist die Lösung mit Datensätzen in AS eine elegante und übersichtliche Angelegenheit. Man darf nur nicht in die Verlegenheit kommen, das ganze solle auf dem PeeZeh zum Laufen gebracht werden. Für solchnen Fall würde ich evtl auf eine ReferenzDB in FM ausweichen, wo dann SUCH und ERSATZ Felder drin sind, die dann von der Hauptdatei ausgefragt werden.

(übrigens kann man sowas selbstverständlich auch mit EINER DB lösen, wenn auch etwas unsauber, da dann solche SUCH/ERSATZ DS zwischen den andren DS rumhängen wie die Pelle de Maiskolbens zwischen den Zähnen. . Auf Dauer aber eigentlich mehr zu empfehlen als ZWEI DB, meiner Erfahrung nach.
EINE DB kann man leichter beckappen, kopieren, verschieben ...
Man kann nicht vergessen, daß noch Hilfsgerüst nötig ist (es ist ja alles im Kofferraum dabei)

Freilich muß man dann bei Suchabfragen etwas komplexer denken und weiter ausholen, aber das kann eigentlich nur nützlich sein, denn es kommt auf jeden Fall dem Produkt zugute.

Äh ja..., ich hatte und habe mit FM auch schonmal zu tun. (Falls Du übrigens das Forum von http://www.filemaker-magazin.de/ noch nicht kennst: Du wirst es nicht bereuen, dort mal hinzuspazieren. Erste Sahne.)

An Snow:

Danke für Deine Unterstützung, alles klappt jetzt wie am Schnürchen. Ich hab viel gelernt (und hoffe, es bleibt was haften, denn das nächst Projekt in PERL wartet schon ...)
Klar ist, daß ich ohne Eure geduldige Hilfe aufgeschmissen wäre. Zuviel ist zu beachten und zu lernen, da reicht die Zeit einfach nicht für. Wenn AS auch mit eine der mächtigsten Programmierumgebungen ist, so ist sie durch ihre Offenheit auch eine der schwierigsten zum Schreiben. Den Code verstehen (wenn man ihn liest), das ist wiederum meist viel einfacher als selbst FM oder Basic.

Grüße nach Bayern und in den Südzipfel der Nordschweiz, wo die Löcher am Sonntag in den Käse geschossen werden. (Wo bekommt Ihr bloß immer so unterschiedlich dicke Kugeln her?)

Morgen werden wir nochmal gegen Sturmflut geimpft.

Grüße von WiLi
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