Register
xchange / xcode acon
Ersetzungen und Zeichenumcodierung über Tabellen (ab V27.2)
Beliebige Zeichenfolgen im aktuellen Datensatz können durch beliebige andere Zeichenfolgen ersetzt werden. Dies entspricht der Arbeitsweise der Funktion "Globale Ersetzung" im Menü "Global" und der schon früher geschätzten, gleichnamigen Funktion im DOS-Programm PRESTO.
Darüber hinaus kann man einzelne Zeichen durch andere Zeichen ersetzen lassen. Grundprinzip ist dabei, daß der momentane Text in der internen Variablen mit Hilfe einer Tabelle umcodiert wird - nicht der aktuelle Datensatz! Es gibt bei den classico-Programmen zwei Arten der tabellengesteuerten Umcodierung, die beim Export bzw. beim Import zum Einsatz kommen. Beide Arten können ab V27.2 auch in a99 verwendet werden.
Die Befehlsworte xcode und xchange sind gleichwertig, es kommt nur auf das an, was dahinter steht. Folgt darauf keine Angabe, wird der Inhalt der iV genommen.
A Suchen und Ersetzen im aktuellen Datensatz acon
xchange _abc_xyz_
Im gesamten Satz "abc" durch "xyz" ersetzen
xchange *#nnn_abc_xyz_
Im Feld #nnn des aktuellen Satzes "abc" durch "xyz" ersetzen
Dies entspricht den gleichlautenden Sonderbefehlen ohne das Wort xchange am Anfang.
Der Vorteil: man kann die Ersetzungsangabe vorher in die iV setzen und dann xchange ohne etwas dahinter schreiben. Dies ermöglicht situationsabhängige Ersetzungen im Gegensatz zu den Sonderbefehlen, die man nur fest in den FLEX hineinschreiben kann.
Statt '_' und ',' als Steuerzeichen kann man hier auch den Code 27 benutzen, der in einem Datensatz nicht vorkommen kann:
var 27 #uef 27 #ugh 27
xchange
würde im Datenatz nach dem Inhalt von #uef suchen und diesen durch den Inhalt von #ugh ersetzen. Es ist dann unerheblich, ob die Zeichen _ und , beide vorkommen!
B1. Exporttabellen (vgl. auch Dokumentation zum Thema Umcodierung )
xcode ab
Codiere den in der iV stehenden Text um, und zwar mit der Tabelle p bzw. q . Berücksichtigt werden dabei auch die sog. "Drucker-Ersatzdarstellungen" der Exportparameter ( so etwas wie p x .mmm nnn kkk).
Das ist auch ein Testbefehl für Experten, zum Testen der diversen Umcodiertabellen!
Folgende Werte kann man setzen:
a = i d x Index-, Display-, Exportparameter, und darin:
Hinweis: Für acon gelten nur i und x
b = p q p- bzw. q-Tabelle
Anschließend steht in der iV der entsprechend umcodierte Text.
Bei xcode xp / xq gilt die gerade aktive Exportparameterdatei. Wenn mit switch dow i vorher umgeschaltet wurde, gilt die Tabelle der dadurch aktivierten Parameter. Man kann dies nutzen, um speziell für das Umcodieren eine Exportparameterdatei zu verwenden, die nichts weiter als p- und q-Befehle enthält; diese schaltet man mit switch dow 2 / 1 jeweils ein bzw. aus, wenn sie gebraucht wird.
xcode clower / cupper (ab V34.4) acon
wandelt Großbuchstaben in kleine bzw. umgekehrt. Dies wird nur auf Grundbuchstaben a-z angewendet, nicht auf Umlaute und Diakritika. Alle Sonderzeichen und auch UTF-8-Codes bleiben unverändert. Will man eine in diesen Hinsichten erweiterte Variante, muß man mit xcode xp/xq arbeiten und die dafür geeigneten Exportparameter vorher laden.
B2. Spezialfall Unicode acon (ab V29)
xcode u codiert den iV-Inhalt mit Hilfe der u-Befehle , die in den Indexparametern stehen (d.h. Konvertierung UTF-8 -> Interncode)
Tip für das Einlesen von Unicode-Daten per FLEX, wenn die Daten in die interne Form umgewandelt werden sollen:
set c0 an den Anfang der FLEX-Datei
...
xco u vor jeden Befehl ins #...
xcode Uvor nach Interpretiert den iV-Inhalt als UTF-8 und wandelt die UTF-Codes in Entitätencodes der Form vorEnach , wobei E die dezimale Unicode-Zahl ist.
Default, wenn vor nach fehlen, ist U\u ? . Das ist die Darstellung für RTF. Für HTML gibt man: xcode U&# ; .
Aus dem Euro-Code in UTF-8 wird dann \u8364? bzw. €
C. Importtabellen
Ab V27.2 gibt es noch weitere Möglichkeiten, Umcodierungen vorzunehmen. Diese sind besonders hilfreich beim Einlesen von Fremddaten , die ja nicht selten anders codiert sind, als man es braucht. Es wird keine Import-Parameterdatei herangezogen, aber deren Technik wird genau nachgebildet (siehe Handbuch Kap.11.2.2 ).
xcode y [dahinter kommt weiter gar nichts!]
Zur Umcodierung wird eine Tabelle benutzt, die man vorher mit Hilfsbefehlen der Form
y x ... und p x ...
anlegen kann.
Die Hilfsbefehle gelten alle für die gesamte Sitzung, müssen also nicht in jedem FLEX erneut gegeben werden. Sie sehen folgendermaßen aus:
y x u
Ersetzt beim Befehl xcode y jedes x durch ein u.
Beispiel: y A a : ersetzt das große A durch das kleine
y a/z A
Ersetzt beim Befehl xcode y jedes a durch ein A., jedes b durch ein B usw.
Damit kann man ganze Zeichenfolgen mit einem Befehl definieren, falls es sich um aufeinanderfolgende Zeichen handelt.
y a/z =A
Ersetzt beim Befehl xcode y jedes a durch ein A., jedes b auch durch ein A usw.
Damit kann man ganze Zeichenfolgen in denselben Code umwandeln.
y .nnn mmm oder y .nnn/kkk mmm [nnn usw. sind 3stellige Zahlen]
Diese Variante ersetzt beim Befehl xcode y jeden Dezimalcode nnn durch den Code mmm., nnn+1 bis einschl. kkk durch mmm+1 usw.
Sonderfall: 256 an der Stelle von mmm bedeutet: Code nnn ignorieren.
Beispiel: y .13 32 bzw. y .13 256 : ersetzt Code 13 durch das Leerzeichen bzw. beseitigt ihn ersatzlos.
p x abc ABC
Sog. Protyp-Ersetzungen. Damit kann man Doppelcodes ersetzen: wenn xa auftritt, wird es durch A ersetzt, xb dagegen durch B usw. Solche Codierungen treten z.B. in MARC-Daten auf, auch wenn diese per Z39 zum Zweck des Imports gewonnen werden.
Hinweise:
1. Eine andere Art der Umcodierung macht man mit den Befehlen asci/ansi . Dabei werden die umkehrbaren o-Tabellen benutzt, die in die Anzeige- oder Indexparameter eingebunden sind. Normalerweise ist dies die Tabelle o.apt.
2. Wenn man oft mit dem write-Befehl Daten ausgibt, ist es bequemer, die automatische Umcodierung mit exp wX einzuschalten. Vorher die geeigneten Exportparameter laden!
3. Für die Umwandlung von Unicode-Daten in den Standard-DOS-Code gibt es eine weitere Methodik: sie arbeitet mit einer Tabelle, die man mit u-Befehlen in die Indexparameter einbaut. Eine komplette Liste findet man in der Datei ucodes.apt .
4. Ein Sonderfall ist das Umwandeln von Zeichencodes in Dezimalcodes. Das geht mit dem Sonderbefehl Jd in einem var-Befehl:
z.B. wird aus var "abc" Jd der Inhalt "97 98 99" (siehe cstring )
Beispiel 1:
In den Exportparametern sind p-Umcodierbefehle für ASCII -> UTF-8. Wenn nun ein ASCII-Text in #uxy steht und in UTF-8 umzuwandeln ist, macht man das so:
var #uxy
xco xp
ins #uxy
Beispiel 2:
Es soll Text in Versalien umgesetzt werden, also alle Kleinbuchstaben in große verwandelt.
Dazu braucht man nur einen y-Befehl, der aber eine ganze Umwandlungstabelle generiert:
y a/z A
und dann später (irgendwann während derselben Sitzung)
xcopy y
Wenn in der iV dann gerade abc xyz steht, wird daraus ABC XYZ
Beispiel 3:
Es soll Text wahlweise in Versalien oder in Minuskeln umgesetzt werden, also alle Kleinbuchstaben in große verwandelt bzw. umgekehrt. Dazu braucht man zwei Umwandlungstabellen, eingebaut in eine Export-Parameterdatei. Diese könnte grkl.apr heißen und so aussehen:
p a/z A // wandelt a in A, b in B usw. bis Z
q A/Z a // umgekehrt
p ä Ä
q Ä ä
... usw.
p ß SS
...
Die FLEX-Befehle, um diese Parameter zu nutzen, könnten so aussehen:
// Vorbereitung: Parameter grkl.apr als Exportparameter 2 laden
set exp 2
exp p grkl
set exp 1
...
// Anwendung (beliebig oft, nachdem Vorbereitung einmal in der Sitzung erledigt
var ... // iV mit Inhalt füllen, der umcodiert werden soll
set exp 2 // Parameter-Set 2 einschalten
xcode x p // p-Befehle anwenden: klein->groß, bzw. xcode x q für groß-<klein
set exp 1 // Parameter-Set 1 wieder einschalten
// Verwendung des umcodierten Inhalts