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