`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.  &#8364;

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:     `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) 
xcode 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 

?Register=h xa 
?asci/ansi=h xansi 
?exp wX=h xexport=export wx 
?Fremddaten=h fleximp 
?Handbuch Kap.11.2.2=h ac11-1=11.2.2  Globale 
?Unicode-Daten=h unicode 
?ucodes.apt=h ucodes.apt 
?switch dow i=h xset=switch dow 
?Sonderbefehlen=h xsonder 
?u-Befehle=h unicode=u-Liste 
?cstring=h xcstring=Jd 
?Umcodierung=h codier 
?Ausprobieren=x y a/z A\var "abc xyz"\ins $a\xco y\ins $b\var "Aus  " $a " wird " $b\mes