[Allegro] Trick 74 : Globale Dollarkrise (Den $ global ersetzen)
Bernhard Eversberg
ev at biblio.tu-bs.de
Do Nov 26 08:13:12 CET 2009
Trick 74: Globale Dollarkrise
Das $-Zeichen im ganzen Satz ersetzen
Aufgabe: Man hat in seiner Datenbank den $ als Unterfeldzeichen,
nun soll er durch das Dreieck (Code 31) ersetzt werden.
Aber Achtung: wenn der $ irgendwo als solcher vorkommt, dann wird
er ebenfalls ersetzt, denn das Programm kann dies nicht unterscheiden.
Das Durcharbeiten der gesamten Datenbank ist kein großer Trick, es
wird im Text hnext.rtf unter Beispiel 3 beschrieben.
Der erste Trick ist, daß man die lokale Ersetzung mit insert _abc_XYZ_
verwenden muß, denn bei der globalen hat der $ leider die Wirkung
eines Abzwack-Operators: es verschwindet der ganze Rest des Felds.
(s. Handbuch S. 118)
Der zweite Trick ist, mit var k_1 und var k_2 die Felder einzeln
zu bearbeiten, wobei die Feldnummer mitgenommen wird (mit k1/k2
hat man die Feldtexte ohne Nummer), so daß mit
var k_2
...
ins
das Feld wieder korrekt in den Satz zurückgegeben wird.
Der dritte Trick ist, mit if _$_ zu prüfen, ob im Satz wirklich
ein $ vorkommt, denn wenn nicht, braucht ja nichts getan zu werden
und insbes. der Satz nicht wieder gespeichert.
Der vierte Trick ist, daß man mit ^_ (zwei Zeichen) das Dreieck
angeben kann (Strg+_ ist Code 31). Dies gehoert zu den Eigenheiten
der lokalen Ersetzung (h xinsert)
Hier die Lösung:
DOLL.FLX : Dollarzeichen ueberall durch das Dreieck ersetzen
2009-11-26
first #
falls der erste Satz gelöscht ist: nächster Satz
if del jump weiter
Jeder Satz wird in dieser Schleife verarbeitet:
:schleife
Kommt $ im Satz vor? Wenn nicht, -> :weiter
if not _$_ jump weiter
var k_1
:loop
Kombination ^ und _ steht fuer das Dreieck:
ins ,$,^_,
ins
var k_2
if not "" jump loop
put speichern
Nächsten Satz holen (interne Nummernfolge)
:weiter
next #
kein Satz mehr, Ende erreicht
if cancel jump exit
der Satz ist gelöscht
if del jump weiter
es gab noch einen Satz? dann -> :schleife
if yes jump schleife
:exit
Mehr Informationen über die Mailingliste Allegro