xchange / xcode         avanti

 

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 auf das an, was dahinter steht. Folgt darauf keine Angabe, wird der Inhalt der iV genommen.

 

A Suchen und Ersetzen im aktuellen Datensatz

 

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.

 

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  avanti  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.

 

 

 

 

B2.  Spezialfall Unicode          avanti    (ab V29)

 

 

xcode u    codiert den iV-Inhalt mit Hilfe der  u-Befehle , die in den Indexparametern stehen (d.h. Konvertierung UTF-8 -> Interncode)

 

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 automatisch 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:      Ausprobieren 

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