Forenindex » Programmierung/Entwicklung » AppleScript » Reguläre Ausdrücke: Was ist "re-compile"?

Reguläre Ausdrücke: Was ist "re-compile"?

Goar
Beiträge gesamt: 395

12. Jul 2004, 20:54
Bewertung:

gelesen: 1852

Beitrag als Lesezeichen
Hallo Scripter,

in der Bedienungsanleitung der Scripting Addition "Satimage" (ermöglicht u.a. Finden und Suchen/Ersetzen mit regulären Ausdrücken) wird an einer Stelle "re-compile" erwähnt; leider nicht näher erklärt.
Im Befehlsverzeichnis steht:

re_compile: compile a regular expression
 re_compile  plain text  -- the regular expression
  [case sensitive  boolean]  -- default true
  [regexpflag  plain text]  -- a subset of {"EXTENDED","NEWLINE","ICASE","NOSUB"}; default {"EXTENDED","NEWLINE"}
 Result:  re_pattern  -- an opaque pattern which may be used as the search string for "find text" and "change"

Aber hier kommt wieder meine berühmte lange Leitung zum Vorschein. Ich habe eine vage Vorstellung, worum es hier geht, mehr aber auch nicht. Erste Versuche, etwas hinter re_compile einzusetzen endeten damit, dass dieses Eingesetzte die message "re_compile" nicht versteht.

Kann jemand in groben Zügen erklären, was es mit diesem Befehl auf sich hat, wo und wie man ihn einsetzt und vielleicht noch ein kleines Beispiel dazugeben?

Danke, Goar

Reguläre Ausdrücke: Was ist "re-compile"?

Hans Haesler
  
Beiträge gesamt: 5826

13. Jul 2004, 00:23
Bewertung:

gelesen: 1851

Beitrag als Lesezeichen
Hallo Goar,

auch ich habe es nicht geschafft, mit 're_compile' etwas anfangen zu können. Dieses Verb ist keine Erfindung
von Satimage, sondern wird seit langem für sehr spezielle Regex-Konstruktionen gebraucht.

Wenn Du im Textfeld der "Google"-Website "re_compile" (mitsamt Anführungszeichen) eingibst, dann bekommst
Du innert Kürze eine Menge Resultate. Aber ein halbe Stunde später bist Du "so klug als wie zuvor" …

>Re_compile returns a pointer to a regex structure. This information is also kept in the static area used by
>re_comp(); If the fold variable is true, the compiled regular expression will match either upper or lower case.

Anregung: Frage doch bei Satimage direkt an. Der Emmanuel Lévy ist sehr auskunftsfreudig. Vielleicht kann
er Dir ein verständliches Beispiel liefern.

Hans Haesler <hsa@ringier.ch>

Reguläre Ausdrücke: Was ist "re-compile"?

Goar
Beiträge gesamt: 395

14. Jul 2004, 21:32
Bewertung:

gelesen: 1851

Beitrag als Lesezeichen
Hallo Hans,

meine Recherche hatte zu ganz ähnlichen Ergebnissen geführt, wie Du sie beschreibst. Aber jetzt:

Emmanuel hat mir eine Erklärung geschickt, die ich kurz übersetzt habe:
===
Du hast Recht, die beste Dokumentation ist derzeit &#133; das Verzeichnis der Satimage osax.

Wenn Du "find text" mit einem regex-Pattern benutzt, kompiliert der Befehl Dein Pattern zunächst in irgendwas Internes der regex-Maschine (es baut Tabellen und all so Sachen), dann lässt es diesen kompilierten Ausdruck ablaufen.

Mit "re_compile" kannst Du Dein Pattern ein für alle Mal kompilieren. "find text" akzeptiert als Pattern entweder einen String oder das Ergebnis von "re_compile".

Der Gebrauch von "re_compile" empfiehlt sich, wenn Du das Pattern häufig benutzt und wenn es auf Geschwindigkeit ankommt. Und natürlich, je komplizierter der reguläre Ausdruck, desto deutlicher beschleunigt "re_compile" das Script.

Also bei einem einfachen Beispiel können wir keinen besonderen Unterschied erkennen.

---
set x to "6000000"
set theRE to "^[0-9]+"

chrono
repeat 1000 times
 find text theRE in x with regexp
end repeat
quietmsg(chrono)

set theRE to re_compile theRE

chrono
repeat 1000 times
 find text theRE in x with regexp
end repeat
quietmsg(chrono)

0.28 second without re_compile
0.25 second with re_compile
---

===
Das hört sich doch interessant an. Ich habe mir jetzt einmal Jon&#146;s Commands besorgt und Deine Bedienungsanleitung zu "the ticks". ;-)

Gruß, Goar

Reguläre Ausdrücke: Was ist "re-compile"?

Hans Haesler
  
Beiträge gesamt: 5826

15. Jul 2004, 00:41
Bewertung:

gelesen: 1851

Beitrag als Lesezeichen
Hallo Goar,

vielen Dank für Deine Nachforschungen und das Weiterleiten von Emmanuels Erklärung.

Zwei Anmerkungen zu den "Jon's Commands":
1. Leider ist der gute Jon allzu hilfreich und seine Scripting Addition konvertiert
im Hintergrund Pfade. Plötzlich findet man gewollt oder aus Versehen heraus, dass man
den Ausdruck 'file' weglassen kann. Und dann gibt man solch ein Script weiter und
prompt kommt ein Mail: "He, Dein Script funktioniert nicht!".

Um dieses Problem zu vermeiden, aktiviere ich "Jon's Commands" nur, wenn ich eine
Zeitmessung vornehmen will. Danach ab in den Papierkorb damit. Zum erneut Aktivieren:
die Datei auf den geschlossenen Systemordner ziehen, die Frage "Wollen Sie usw" mit
"OK" bestätigen. Dann in einem Skripteditor-Fenster die Rechnung 1 + 1 eintippen
und dieses Scriptchen ausführen. Damit aktualisiert das Scripting System den Inhalt
des Scripting-Additions-Ordners.

2. Die Ticks sind gut und recht, aber schon weniger präzise als die "MilliSecs.osax"
(unter Mac OS X). Zudem müssen mehrere Testläufe durchgeführt, das beste und das
schlechteste Resultat gestrichen werden, damit man einen verbindlichen Durchschnitt
ausrechnen kann. Und je nach Aufbau der Aufgabe stellt man öfters fest, dass jede
weitere Ausführung ein bisschen länger dauert.

Dennoch: ich habe dieses Hilfsmittel schon oft beigezogen, um ein Script zu optimieren.
Es ist auch möglich, die Ticks an mehreren Stellen zu messen, damit nicht relevante
Abschnitte oder auch das Anzeigen eines Dialoges (und die Reaktions-Zeit des Anwenders)
ausgeklammert werden können und so das Resultat nicht verfälschen.

Hans Haesler <hsa@ringier.ch>

Reguläre Ausdrücke: Was ist "re-compile"?

Goar
Beiträge gesamt: 395

21. Jul 2004, 13:57
Bewertung:

gelesen: 1851

Beitrag als Lesezeichen
Nachtrag zu re_compile.

Jetzt habe ich es einmal ausprobiert &#150; es ging nicht.
Emmanuel gefragt.
Schreibt, ich soll es mal in Smile (Scripteditor der Satimage-Software) probieren.
Da gings.
Keine Chance in Apples Scripteditor?
Antwort: "I think so", aber warum den Scripteditor verwenden und nicht Smile?

Mehr weiß ich jetzt nicht zu dem Thema.

Angenehmes Scripten, Goar

Reguläre Ausdrücke: Was ist "re-compile"?

Hans Haesler
  
Beiträge gesamt: 5826

21. Jul 2004, 14:35
Bewertung:

gelesen: 1851

Beitrag als Lesezeichen
Hallo Goar,

danke für Deine Versuche, für Deine Anfragen an Emmanuel und die Rückmeldung.

Ehrlich gesagt ist mir die Oberfläche von Smile nicht sympathisch. Doch auch der Umstieg
vom Mac-OS-9 Skripteditoren zu jenem von Mac OS X fiel mir in Vor-Jaguar-Versionen nicht
leicht. Aber jetzt in Panther sind doch einige Fortschritte sichtbar: Das Ergebnis-Fenster
ist bei Bedarf mit Button-Klick als separates Objekt zu öffnen. Das Suchen- und Ersetzen
ist sehr wertvoll. Und an die farbigen Codezeilen habe ich mich inzwischen auch gewöhnt.

Aber alles Sträuben hilft nichts: Ich werde mich nächstens trotzdem mit Smile befassen
müssen, wenn ich Scripts upgraden muss, welche so komplizierte Dialoge benötigen, dass
mit dem einfachen Pashua nichts Befriedigendes zustandegebracht werden kann.

Hans Haesler <hsa@ringier.ch>