`Vorangehender Teil`   /   `Fortsetzung` 

10.2.6.3 Export  [Forts.]
Typ 1 : Direkte Änderungen am Arbeitstext
Die wichtigsten zuerst: direkte Präfixe bzw. Postfixe sind Zeichenketten, die mit p bzw. P direkt angegeben werden, und die das Programm dann sofort vorn bzw. hinten an den Arbeitstext anfügt. 
Umgekehrt gibt es auch eine Reihe von Befehlen, mit denen man vorn und hinten vom Arbeitstext Teile entfernen kann, um entweder diese Teile selbst oder den Rest als neuen Arbeitstext zu benutzen. 

pX	Direktes Präfix : Zeichenkette X wird vor die aktuelle Kategorie gesetzt, d.h.: X wird mit dem 
mX	aktuellen Arbeitstext zu einer Zeichenkette vereinigt. Der Arbeitstext besteht aus dem Text von #xxf, der zu diesem Zeitpunkt möglicherweise bereits von anderen Manipulationsbefehlen verändert ist. 
	mX wird nur bei der Abarbeitung von Mehrfachkategorien benutzt: die erste bekommt das mit p, die zweite und weitere das mit m angegebene Präfix. (-Ø 10.2.6.1 Befehl ++) 
	Eine besondere Bedeutung hat das Index-Präfix, das sich formal aber nicht von einem "normalen" Präfix unterscheidet: es regelt die Zuordnung eines Schlüssels zu einem Register, z.B. p"|7" bedeutet: Einordnung in Register 7. (Siehe "Index - Sonderbefehle" -Ø 10.2.1.3) 
PX	Direktes Postfix: wirkt analog zu pX, nur daß die Zeichenkette X hinter den Arbeitstext gehängt wird. 
 	Wenn man beides kombiniert, kann man z.B. ganz leicht etwas in Klammern einschließen: 
	#85 C p"(" P")" 
	Der Arbeitstext erhält vorn und hinten eine Klammer, und der Manipulationsbefehl C (siehe unten) bewirkt einen Zeilenvorschub. Ergebnis: der Serientitel wird in Klammern auf eine neue Zeile gesetzt. 
bk	Beginn bei einer bestimmten Position. Achtung: Zuerst wird, falls vorher noch nicht erfolgt, die Umcodierung durchgeführt (d.h. die p- bzw. q-Befehle, abhängig vom Zeichen # bzw. ! am Zeilenanfang). Als wahre Länge gilt somit diejenige, die nach der Umcodierung vorliegt. (Veränderung möglich z.B. durch Umlautauflösung oder Weglassung von Sonderzeichen.)
Bk	Beispiel: vom Erscheinungsjahr sollen nur die letzten 2 Ziffer ausgegeben werden. Wenn ks=5 gesetzt wurde und die Jahreszahl am Anfang des Kategorietextes steht, muß von da aus noch 2 Stellen nach rechts gegangen werden. Die Parameterzeile lautet dann: 
	#76 b2 p" (" P") "     oder auch, mit Zwischenteilen:    #76 b2 10 #zz 11
	und im Druckbild erscheint: (82) ,wenn #76 1982 in der Aufnahme steht. (Dabei ist angenommen, daß man  10=" ("  und  11=") "  als Zwischenteile definiert hat; 10 ist hier als Präfix, 11 als Postfix benutzt. 
	Ist k größer als die Länge der fraglichen Zeichenkette oder gleich groß, so wird bei bk weitergemacht, als sei die Kategorie nicht vorhanden, d.h. die Befehlszeile wird abgebrochen, bei Bk bleibt der AT unverändert. 
	Sonderfall: k=0 ändert nichts am AT, sorgt aber für Umcodierung (s.o.). Ist jedoch der AT in dem Moment leer, wird die Zeile ohne Wirkung abgebrochen. 
	Die Zahl k muß kleiner als 256 sein! Wenn man aber z.B. eine sehr lange #98 hat, und etwa den Teil ausgeben will, der hinter der Position 500 kommt, kann man schreiben:  #98 b250 b250 ...
	   Anfang und Ende des zu druckenden Datenfeldes können auch noch auf andere Arten vorgegeben werden: man kann verlangen, daß das Druckfeld hinter einer bestimmten Zeichenkombination beginnt (b-Befehle) bzw. vor dieser endet (e-Befehle) 
	Sonderfall:  b"?" : Nur wenn der AT mindestens 1 Zeichen hat, geht die Zeile weiter. 

bX	beginne hinter X : Wenn z.B. der Zusatz zum Sachtitel ("Untertitel") gesondert ausgegeben werden soll, und wenn man, RAK-gerecht, diesen immer mit " : " (Spatium Doppelpunkt Spatium) an den Hauptsachtitel angeschlossen hat, dann muß also die Ausgabe hinter der Zeichenkette " : " beginnen: 
	#20 b" : " 35 #zz 8      oder       #20 b" : " p"Zusatz: " P". - "
	wobei etwa 35="Zusatz: "  und  8=". - " sein könnte. Aber nicht immer soll das Ende ein einzelnes Zeichen sein, welches genau feststeht. Es gibt noch eine Reihe von 

Zusatzmöglichkeiten:
  •	In bX  hat das erste Zeichen manchmal eine Sonderbedeutung! Dies trifft zu für die Zeichen [~<>^/?# . Es wird im Folgenden jeweils gesagt, wie man diese Zeichen einsetzt. Dies gilt auch für die Manipulationsbefehle e, E, c, t, T.
  •	b"[.,-:;!]" Die eckigen Klammern bewirken, daß die darin eingeschlossenen Zeichen einzeln gesucht werden. Der Arbeitstext beginnt hinter dem ersten gefundenen Zeichen. Die Nebenwirkung ist, daß b"[" und e"[" nicht klappen - aber b"[[]" und e"[[]" tun es. Umgekehrt: b"[]]" und e"[]]"  tun es nicht, dafür muß man (evtl. zusätzlich) b"]" bzw. e"]" schreiben. 
	Hinweis: auch b"^" etc. klappt nicht (siehe Befehl cX), man muß schreiben  b"[^]", e"[^]" usw.
  •	In der Zeichenfiolge X  kann das  ?  als Maskierungszeichen vorkommen (näheres am Ende des Abschnitts zu Typ 5). 
  •	Wenn X mit ~ beginnt und aus Kleinbuchstaben besteht, wird Groß/Klein im Arbeitstext ignoriert. 
  •	Mit  b"#uxy"  kann man auch prüfen, ob der Inhalt der Variable #uxy im Arbeitstext vorkommt. Falls ja, wird die Zeile fortgesetzt und der bedingte Sprung ausgeführt, sonst nicht. 
  •	Mit  b">#uxy"  drückt man aus, daß der Arbeitstext größer als der Inhalt von #uxy sein soll (nicht zahlenmäßig, dafür gibt es die Rechenbefehle, sondern als Zeichenkette). Mit '<' geht's genauso. 
  •	Wenn eines der Zeichen [ < > ~ / " ?  als solches gesucht werden soll, also nicht seine Sonderfunktion ausüben soll, muß man es in [ ] einschließen, z.B.  b"[[]" .
  •	Wenn der Inhalt von #uxy so aussieht: [abcd], also mehrere Zeichen in eckigen Klammern, dann wird mit b"#uxy" festgestellt, ob eines der Zeichen  abcd  im Arbeitstext vorkommt. 
  •	Diese Art Bedingungsprüfungen sind auch bei den Befehlen eX, cX, tX und TX anwendbar. 
	In jedem dieser Fälle gilt: trifft die Bedingung nicht zu, so wird nichts ausgegeben, d.h. die ganze Befehlszeile, in der bX steht, wird ignoriert. Schreibt man statt dessen aber: 
 
BX	so wird die Kategorie komplett ausgegeben - d.h. BX wird ignoriert - wenn X nicht vorkommt. 
	Achtung: wenn vorher schon umcodiert wurde, kann sich der AT verändert haben! 

ACHTUNG: bei bX, eX, BX und EX immer beachten, ob vorher schon umcodiert wurde (mit y1 oder y2) und deshalb eines der Zeichen in X vielleicht verändert oder beseitigt wurde. 
Auch das Ende der Aufbereitung kann durch eine Längenangabe oder durch Zeichenkette festgelegt werden, letzteres ebenfalls auf zwei Arten: 
ek	Ende der Ausgabe bei einer bestimmten Position = Länge des Arbeitstextes auf n Zeichen setzen. 
	Um bei dem Beispiel zu bleiben: es könnte ja sein, daß in #76 hinter dem Jahr noch andere Angaben stehen. Um diese auch noch auszublenden, gibt man vorsichtshalber zusätzlich hinter b2 noch e2 an: 
	#76 b2 e2 10 #zz 11      oder        #76 b2 e2 p"(" P")" #zz 0
	Das e2 bewirkt, daß nach dem zweiten ausgegebenen Zeichen die Ausgabe dieser Kategorie beendet wird. Hinter b und e können beliebige und verschiedene positive Zahlen stehen. Wenn die Zahl hinter e größer ist als die tatsächliche Länge des Arbeitstextes, bleibt dieser unverändert. 
	Sonderfall:	e0 : der Arbeitstext wird nicht ausgegeben, aber es wird so getan, als ob es so wäre. Nutzeffekt: z.B. eine bestimmte Kategorie, sofern sie vorhanden ist, durch ein immer gleiches Wort (Präfix) ersetzen. Was hinter e0 noch kommt, wird nicht mehr ausgeführt. Der Parameter ke wird allerdings ausgeführt; wird dies nicht gewünscht: #zz 0  als bedingtes Postfix anhängen. 
			Z.B. bewirkt  #91 +M e0 #zz 0 , daß ein Sprung nach #-M nur dann erfolgt, wenn #91 in der aktuellen Aufnahme vorhanden ist, #91 wird jedoch wegen e0 an dieser Stelle nicht ausgegeben. (Der Sonderbefehl Z bewirkt dasselbe wie e0.) 
			#91 p"xyz" e3 #zz 0  bewirkt:  es wird "xyz" ausgegeben, wenn #91 vorkommt, aber nicht der Text von #91 selbst. Umgekehrt, also mit 
			#91 e0 p"xyz" , geht es nicht, da hinter e0 nicht weitergemacht wird. 
Ek	Wirkung wie ek, aber es wird am Ende das letzte Wort beseitigt, wenn es durch die Verkürzung abgebrochen wurde. Diese Operation kann z.B. für Kopfzeilen sehr nützlich sein, wenn etwa sehr lange Kategorien vorkommen und man abgeschnittene Wörter im Kopf vermeiden möchte. 

eX	beende den Text vor X : Soll z.B. nur der Hauptsachtitel erscheinen, so setzt man für X wieder " : " 
	#20 e" : "   dann wird ab X das Ende beseitigt  (auch hier Maskierung mit '?' möglich.) 
	#20 e"[.,:;!?]"   beendet den Arbeitstext vor dem ersten Interpunktionszeichen (s.a. bX). 
EX	Ein 'E' statt 'e' würde das Ende der Zeichenkette hinter " : " setzen, d.h. diese Zeichen würden dann mit ausgegeben. 
	Achtung: wenn vorher schon umcodiert wurde, kann sich der AT verändert haben! 

fx	Fx	Unterdrückung führender bzw. am Ende stehender Zeichen; 3 Varianten: 
fk	Fk	Das Zeichen x bzw. der Code k bzw. jedes der in X vorkommenden Zeichen 
fX	FX	wird am Anfang (f) bzw. am Ende (F) des Arbeitstextes beseitigt. 
		Das Zeichen x darf keine Ziffer sein, denn diese würde als Zahlenwert eines ASCII-Codes interpretiert. Also würde f0 nicht gehen, es muß f"0" heißen oder f48. Dagegen könnte man mit f$ durchaus führende Dollarzeichen beseitigen, genauso mit f36 oder f"$". 
		Die f-Befehle kümmern sich alle um Einzelzeichen, für Kombinationen gibt es die T-Befehle: 

tk		hinten k Zeichen wegnehmen ("trim") ; umgekehrt: 
Tk		die letzten k Zeichen ("Tail" = Endstück) als Arbeitstext nehmen 
		(wenn Arbeitstext kürzer als k Zeichen: kein Ergebnis, Abbruch) 
tX		suche vom Ende des Arbeitstextes aus die Zeichenkette X und setze den Endpunkt davor (wenn X nicht vorkommt: Arbeitstext unverändert); auch hier ist das Gegenteil möglich: 
TX		nimm am Ende den mit X beginnenden Teil als Arbeitstext (evtl. noch bX ergänzen, um X wegzunehmen). Wenn X nicht auftritt, wird die Anweisung abgebrochen. 

Hinweis: 	In den Befehlen mit X ist auch die Suche nach einem von mehreren Zeichen möglich; dies geht genauso wie bei den ak-Befehlen, z.B.  e"[.,:;-/]" um den Arbeitstext am ersten Interpunktionszeichen enden zu lassen, oder t"[.,]", um hinter dem letzten Punkt oder Komma abzuschneiden. 

,"_X_Y_"	Lokale Ersetzung: im Arbeitstext wird überall Zeichenkette  X  durch Zeichenkette  Y  ersetzt. Statt '_' kann auch das Komma verwendet werden. Notwendig ist das dann, wenn innerhalb X oder Y das Zeichen '_' vorkommt! Innerhalb X und Y kann man nicht-eingebbare Zeichen mit \nnn kodieren, z.B. \31 für ² und \31\48 für ²0

²x  oder	Das Teilfeld x wird im Arbeitstext gesucht, sein Inhalt wird zum neuen Arbeitstext. Abbruch, wenn es 
$x	nicht vorkommt. Dieser Befehl ermöglicht einen sehr einfachen Umgang mit "Subfields". (² und $ können hier gleichwertig verwendet werden! Der tatsächliche Teilfeldcode ergibt sich aus der .CFG und könnte sogar noch ein anderes Zeichen sein (-Ø A.1.3). Vorteil: unter UNIX kann man $ besser eingeben. 
	Sonderfall:  ²²  und $$ liefern den Inhalt VOR dem ersten Teilfeld. 

~x	Das Teilfeld x wird im Arbeitstext gesucht und entfernt, wenn es mehrfach vorkommt, nur das erste. Wenn es nicht vorkommt, bleibt der AT unverändert. Auf den Bedingten Sprung hat dieser Befehl keine Wirkung.

w	Der Arbeitstext wird als Kategorienummer interpretiert, die betreffende Kategorie wird neuer Arbeitstext. Wenn $x an die Kategorienummer gehängt wird, dann wird nur Teilfeld ²x genommen. 
	Achtung: Die Kategorienummer darf keine #u-Variable sein. 
	Beispiel:	#nr p"40 " e3 w        	ausgegeben wird der Inhalt von #40 
			#000 p"245$b" e5 w	Teilfeld ²b von #245 wird Arbeitstext 

Text links/rechts auf feste Länge auffüllen
sk	Wenn der Arbeitstext kürzer als k Zeichen ist, wird das Ausgabefeld mit Leerzeichen bzw. 
sk,x	dem Zeichen x auf die Länge k aufgefüllt. Diese Operation ist sinnvoll, wenn Tabellen produziert werden sollen oder hinter einem Ausgabefeld ein Zwischenraum gewünscht wird. Beispiele:
	s12	wenn Text kürzer als 12 Zeichen, rechts mit Leerzeichen auffüllen 
	s8,-	wenn kürzer als 8 Zeichen, rechts mit Bindestrichen auffüllen 
rk	Wenn der Arbeitsttext kürzer als k Zeichen ist, wird er nach links mit Leerzeichen auf k 
rk,x	Zeichen verlängert, d.h. in ein Feld der Länge k rechtsbündig plaziert. Wenn ,x angegeben ist, werden führende Leerzeichen durch das Zeichen x ersetzt. Beispiel:
	r7,0		7stellig mit führenden Nullen ausgeben 
	r10,$	10stellig mit führenden $-Zeichen 
	Diese Möglichkeiten sind in Verbindung mit den Rechenbefehlen wichtig. 
	Um es zusammenzufassen: hinter b, B, e und E kann entweder eine Zahl oder eine in zwei Anführungszeichen eingeschlossene Zeichenkette stehen (wenn man das zweite Anführungszeichen vergißt, können unerwünschte Ereignisse eintreten), hinter r und s muß eine Zahl stehen. 
R	(ohne Nummer!) Der aktuelle Arbeitstext wird an den rechten Rand der Zeile (rechtsbündig) ausgerückt. Wenn in der aktuellen Zeile nicht mehr genug Platz ist, wird die nächste genommen. Geht nur, wenn zl>0.

Nichtsortierzeichen, Umcodierung
u	Übergehwörter herausnehmen. Wörter (Zeichenketten), die von den Zeichen 'x' und 'y', z.B. u[], 
uxy	umschlossen sind, werden weggelassen. Wenn x und y fehlen, wird für 'x' das Nichtsortierzeichen genommen (-Ø Anh.A.1), für 'y' das Leerzeichen (bei Nichtsortiermodus n0) bzw. ebenfalls das Nichtsortierzeichen. Mit  u<>  könnte man also bewirken, daß spitz geklammerte Angaben wegfallen. Ein evtl. hinter 'y' stehendes Leerzeichen wird auch beseitigt, sonst hätte man ein überzähliges. 
U	Die Anwendung dieser Befehle empfiehlt sich für Sortierzwecke bei der Kopfkategorie #u1. 
Uxy	Bei 'U' wird dann ferner das erste Wort automatisch groß geschrieben. 
u¬¬	Sonderfall: Nichtsortierzeichen verdoppeln
	Wenn ein Nichtsortierzeichen vor einem Wort steht, wird ein zweites dahinter gesetzt. D.h. der "Nichtsortiermodus" (-Ø Anh.A.1) wird von 0 auf 1 geändert. Achtung: In der .CFG muß zu diesem Zeitpunkt aber  n0  gesetzt sein, hernach muß man es auf  n1  setzen. 
y0	Umcodierung abschalten : der aktuelle Arbeitstext wird nicht umcodiert, d.h. die p- oder q-Befehle sollen für diese Kategorie nicht gelten. Umgekehrt: 
y1	Umcodierung erzwingen : diese Befehle bewirken ein sofortiges Umcodieren. Bei y1 werden die 
y2	p-Befehle, bei y2 die q-Befehle dazu benutzt. Danach wird die Anweisung normal weiter abgearbeitet. Direkte Prä- und Postfixe, die dann noch folgen, werden nicht mehr umcodiert, was meistens der Sinn dieser Befehle ist. 
y3	Nur die Texel-Ersetzungen (eingebettete Zwischenteile) und die V23-Ersetzungen ausführen (vb163/164) 
y4	UTF-8-Codes sollen in die nachfolgende Umcodierung nicht einbezogen werden. ("news" 55) 
y"n"	Vom AT nur die Zeichzen bestimmten Typs nehmen, die anderen weglassen.  n ist ein Zeichen, dessen Code sich als Summe aus folgenden Werten zusammensetzen kann: 
	1=Ziffern, 2=Kleinbuchstaben, 4=Großbuchstaben, 8=Sonderzeichen (incl. Leerzeichen). 
	Das Zeichen n ist dann die Summe aus 48 (="0") + Summe der gewünschten Werte 
	Z.B. würde y"7" heißen: Alle Buchstaben und Ziffern nehmen, andere Zeichen weglassen. 
	Oder:  y"<" würde Großbuchstaben und Sonderzeichen nehmen (denn < = 60 = 48 + 8 + 4). 

Typ 2 : Anwendervariablen 

=xy...	Anwendervariable vergleichen/gleichsetzen : Prüfung auf Gleichheit, dann Reaktion. 
	Der Wert xy  besteht immer aus 2 Zeichen und steht für eine Sonderkategorie #uxy 
	Dieser Manipulationsbefehl ermöglicht es, einen Arbeitstext unter einem Namen festzuhalten, dann mit dem in der nachfolgenden Aufnahme gefundenen, entsprechend aufbereiteten Text zu vergleichen und auf das Vergleichsergebnis zu reagieren. Der als Anwendervariable (oder Nutzervariable) gespeicherte Kategorie-Inhalt bleibt also erhalten, bis er bei einer weiteren Aufnahme neu besetzt wird. Sehr wichtig ist das z.B. für Rechenoperationen (10.2.6.6). 
	Die Anwendervariablen können wie normale Kategorien auch in die Ausgabe einbezogen werden. 
	Vor dem Befehl kann eine Kette anderer Manipulationsbefehle stehen. Erst das Ergebnis dieser Befehlskette wird als Arbeitstext mit der Anwendervariablen verglichen. 
	Der Befehl kann in drei Formen mit unterschiedlicher Wirkung auftreten: 
=xy,z     oder    =xy+M       oder     =xy
	xy	steht für die Anwendervariable #uxy.  x muß ein Buchstabe, y kann ein beliebiges Zeichen sein (Namen mit mehr als 2 Zeichen nicht möglich!), 
	z	ist eine Zwischenteilnummer, 
	M	ist eine Sprungmarke (beliebiges Zeichen). 
	Die Wirkung sei an einem Beispiel erklärt: die Ausgabezeile 
	#85 +S e" ; " =st,17 p'(' #90 4 #zz 1
	in einer Parameterdatei würde bedeuten: 
	•	Nimm Kategorie #85 und schneide den mit " ; " beginnenden Teil ab. 
	•	Wenn der so entstandene Arbeitstext (der Serientitel) mit der Anwendervariablen st übereinstimmt (d.h. mit dem in der vorangegangenen Aufnahme ermittelten Text), gib Zwischenteil 17 aus, aber sonst nichts. Der Rest der Zeile (insbes. Prä- und Postfixangaben und der bedingte Sprung +S) bleibt dann unberücksichtigt. 
	•	Wenn der Text nicht mit #ust übereinstimmt, ersetze den Inhalt von #ust durch den neuen Text und fahre normal fort (Präfix '(' ausgeben, dann den Text, dann die angegebenen bedingten Postfixe für die nachfolgende Kategorie vormerken, dann den Sprung ausführen. 
	•	Wenn wir statt "=st,17" jedoch "st+M" schreiben, wird bei Gleichheit der Export an der Sprungmarke #-M  fortgesetzt - ebenfalls ohne Ausgabe des Textes von #85. Die ganze Zeile bewirkt also dann bei Gleichheit nur eine Verzweigung, bei Ungleichheit das Umkopieren und die Ausgabe des Textes und den Sprung +S (falls er angegeben ist). 
	•	In jedem Fall hat man anschließend den Text von #85 (ohne den Teil hinter " ; ") in #ust. 
	•	Sonderfall: ,0 : der Rest der Zeile wird nicht verarbeitet 
	Wenn weder ",z" noch "+M" angegeben sind, wird der Arbeitstext in die Anwendervariable #uxy  kopiert - zum späteren Gebrauch - er wird aber nicht ausgegeben. Indirekte Prä- und Postfixe werden jedoch ausgegeben, wenn welche definiert sind. 
	Wenn nur die Zuweisung erfolgen soll, aber garantiert keinerlei Ausgabe:  =xy #zz 0  schreiben. Beispiel:
	#75 =vl #zz 0    überführt den Verlagsnamen in vl und sonst nichts, insbes. ke wirkt nicht wg. #zz 0
	Wenn der Text der Anwendervariablen "xy" als solcher auszugeben ist, muß er als Kategorie angesprochen werden. Seine Kategorienummer wäre #uxy, man erhält ihn also durch Voranstellen von #u (für "user variable"). Das bedeutet: es gibt neben den schon bekannten Sonderkategorien #u1 und #u2 noch eine große Zahl (genau 26*62 = 1612) von möglichen Anwendervariablen. Abgelegt werden sie im Hintergrundspeicher. 
Tip: Die momentanen Anwendervariablen kann man sich ansehen, indem man im Editor den Befehl  #au  gibt.  Im Windows-Programm a99: Alt+r zwecks Anzeige aller #u-Variablen im Auswahlfeld, und a99 erlaubt hier auch beliebiges Ändern und Löschen (mit Entf-Taste). 
Außerdem kann man zum Testen einen Befehl #uxy in die Exportparameter einbauen, dann kommt der Inhalt von #uxy mit heraus. 

	Ändern kann man die Anwendervariablen über drei weitere Manipulationsbefehle: 
axy	Die Anwendervariable #uxy wird verändert: der Arbeitstext wird vor 
Axy	bzw. hinter #uxy gesetzt. Sonst passiert nichts, d.h. es wird auch nichts ausgegeben. Mit diesem Mechanismus, mehrfach angewandt, sind sehr lange Anwendervariablen produzierbar. Die Grenze: alle Anwendervariablen zusammen dürfen nicht länger als 10.000 Zeichen werden. 
	Sonderfall: Wenn y die Tilde (~) ist, wird der AT in die nächste freie Kategorie #uxy kopiert. Wenn z.B. #uZa und #uZb schon besetzt sind, dann kommt #uZc dran, wenn  ... AZ~  oder ... =Z~  geschrieben wird. 
dxy	Löscht die Anwendervariable  #uxy  (delete). Das kann an jeder beliebigen Stelle geschehen, ohne die Verarbeitung zu beeinflussen. 
	Ein Beispiel:
	#75 dvo P" (" avo  	löscht #uvo, hängt " (" an den Text von #75 und speichert das in #uvo
	#74 P")" Avo			hängt ")" an den Text von #74 und fügt dies an #uvo hinten an.
	Diese zwei Zeilen setzen die Kategorien 
	  #74 Braunschweig 
	  #75 Westermann
	zusammen zu der Anwendervariablen 
	  #uvo Westermann (Braunschweig)
	die anschließend an beliebiger Stelle für die Ausgabe verwendbar ist. 
	Sonderfall:  Mit dem Befehl 
	  #74 p"abc" e3 dwq awq
	belegt man #uwq mit dem Text "abc", falls #74 existiert. Der Befehl dwq löscht vorher die Variable #uwq, falls etwas drin steht. 
	Achtung: Nur direkte Prä- und Postfixe sind hier möglich, also nichts wie z.B.  p10, um das Zwischenteil 10 vor den AT zu setzen! 
	Die Anwendervariablen gelten für alle, bis zu vier geladenen Parametersets gemeinsam. 
dx~
d~~	Sonderfall:  Mit dx~ löscht man alle Variablen #uxy, mit d~~ löscht man sämtliche #u-Variablen. 
	Die Variablen dienen im Windows-System zugleich der Skriptsprache FLEX. 
	Als Musterparameter, in denen Gebrauch von Variablen gemacht wird, werden  A-0.APR und ALPHA2.APR mitgeliefert:
	
	A-0.APR  :		Produktion einer sortierfähigen Datei (aus .ALG  oder .ALD-Dateien) mit Personennamen und Satznummern oder Seitenzahlen, parallel zu "fahren" zur Produktion einer sortierten Liste mit einer der Dateien P-*.APR. 
	ALPHA2.APR:		Produktion des gedruckten Registers aus den mittels A-0.APR hergestellten und 
	ALPHA3.APR		anschließend sortierten Daten. ALPHA2 faßt gleiche Namen zusammen, ALPHA3 stellt dann die eigentliche Liste her. Diese zwei Parameterdateien sind unabhängig von den Sortierbegriffen, d.h. man kann sie für beliebige Registerproduktionen verwenden. 
	Die Stapeldatei ALPHA.BAT koppelt alle Vorgänge hintereinander, so daß die Registerproduktion mit einem einzigen Befehl ausgelöst werden kann. Modellieren Sie Ihre eigene Registerproduktion nach diesem Beispiel, indem Sie die Parameter an Ihre Datenstruktur anpassen. 
	Anwendervariable können schon beim Start eines Programms vorbesetzt werden (Kap. 12, Option`-U). Wenn man z.B. SRCH startet, und #ubc soll sofort beim Start den Wert "xyz" haben, würde man schreiben: 
	srch ... -Ubcxyz

Typ 3 : Zeichenausgabe vor/nach Arbeitstext
pz	Indirektes Präfix : Das Programm merkt sich die Zwischenteilnummer z bzw. die Steuerzeichen- 
p{CS}	kette CS und gibt sie aus, bevor der Arbeitstext selbst ausgegeben wird. Für z kann auch ein 
p>K	Unterprogrammaufruf der Form >K stehen (-Ø 10.2.6.5)   pz und p>K können mehrfach auftreten. 
	Unterschiede zu pX:   (zum genauen Ablauf der Ausgabe siehe 10.2.6.1) 
	•	Ein Zwischenteil kann Steuerzeichen und Strukturbefehle enthalten, dagegen muß X eine in ".." oder '..' eingeschlossene Kette von druckbaren Zeichen sein. 
	•	Das Indirekte Präfix unterliegt nicht der Zeichen-Umcodierung (p- und q-Befehle). 
	•	Bei pX werden X und Arbeitstext zu einem neuen Arbeitstext vereinigt, so daß nachfolgende Manipulationsbefehle sich auf diese Gesamtkette beziehen. Insbesondere ist das für R und = wichtig (s.u.): wenn man zusammengesetzte Dinge rechtsbündig ausgeben oder einer Anwendervariablen zuweisen will. 
		Bei pz und Pz geht das nicht, denn das Zwischenteil wird nicht mit dem Arbeitstext vereinigt, sondern getrennt ausgegeben - der AT selbst verändert sich dabei nicht. 
	•	Indirekte Präfixe sind leichter austauschbar. Bei konsequenter Anwendung kann man die gesamte Zwischenteil-Liste in eine Nachlade-Tabelle legen (.APT-Datei), die in mehreren, evtl. verschiedensprachigen, Versionen gehalten werden kann (-Ø 10.2, Befehl t) 

mz	Mehrfach-Präfix : Zwischenteil z etc. wird vor jeder Mehrfachkategorie ausgegeben, 
m{CS}	nachdem die erste abgearbeitet ist. Wirkt nur dann, wenn statt des bedingten 
	Sprungs der Wiederholungsbefehl "++" gesetzt wurde (-Ø 10.2.6.1) und die Kategorie 
m>K	mehrfach besetzt ist. Auch ein UP-Aufruf ist statt eines Präfixes möglich. 
	Beispiel:
	#40 ++ p"von: " m"; "
	setzt "von: " als Präfix vor den ersten Verf. (#40) und "; " als Mehrfach-Präfix vor jeden weiteren, also #402, #40a usw. Wenn #40 nicht besetzt ist, werden auch #40a ... nicht ausgegeben! 

Pz	Indirektes Postfix: Zwischenteil z wird im Anschluß an #xxf ausgegeben. (Geeignet für Steuerzeichen!) 
P{CS}	Die Unterschiede zwischen Pz und PX sind dieselben wie beim Präfix (siehe vorige Seite). 
P>K	Reihenfolge der Abarbeitung: 1. direktes, 2. indirektes, 3. bedingtes Postfix. 
	Die P-Befehle können allesamt nicht mehrfach auftreten. 

Für alle indirekten Prä- und Postfixe gilt: bei den Varianten mit { CS } findet keine Umcodierung statt, d.h. innerhalb von { ... } müssen die echten Ausgabewerte stehen. 

Typ 4 : Bedingungsprüfungen 
	[s.a. Zusatzmöglichkeiten unter Typ 1, bX]
cX	Check: der Arbeitstext bleibt unverändert, wenn X darin vorkommt; wenn X nicht vorkommt, wird die Befehlszeile ergebnislos abgebrochen. 
	Beispiele und Sonderfälle:
	#20 +m c"Marx" e0	wenn "Marx" in #20 vorkommt, gehe zur Sprungmarke #-m, sonst 
	#20 +m c"~marx" e0	zur nächsten Zeile; das '~' bewirkt, daß es nicht auf Groß-/Kleinschreibung ankommt, also auch "Marx"  oder "MARX" gilt.
	#20 +m c"^Marx" e0	wenn "Marx" in #20 nicht vorkommt, gehe zur Sprungmarke #-m 
	#20 +m c"^~marx" e0	wenn "Marx" oder "marx" in #20 nicht vorkommt, ... 
	#20 +m c">abc" e0	wenn der AT alphanumerisch größer ist als "abc", ... 
	#20 +m c">#nnn" e0	wenn der AT alphanumerisch größer ist als Inhalt von #nnn, ... 
		Zahlenvergleiche: siehe `Rechenbefehle` (10.2.6.6) 

	#20 +m c"~>#nnn" e0	dasselbe, aber groß/klein ist egal.  Beides geht auch mit < statt >. 
	#20 +m c"#uxy" e0	wenn #20 den Inhalt von #uxy enthält, ... (bei t3 in CFG: c"#uxyy") 
							Hinweis: Wenn man t3 in der CFG hat: c"#uxyy". 
	#20 +m c"[abc]" e0	wenn eins der drei Zeichen a,b,c in #20 vorkommt, ... 
	#20 +m c"^[abc]" e0	wenn keins der Zeichen a,b,c in #20 vorkommt, ... 
	Sonderfälle:
		c"[?]"     muß man schreiben, wenn man die Existenz eines Fragezeichens feststellen will!
		c"[[]"     muß man schreiben, wenn man die Existenz des Zeichens [  feststellen will!
		c"[^]"     muß man schreiben, wenn man die Existenz des Zeichens ^  feststellen will!
	Nun kommt natürlich noch die Frage: Und was, wenn wirklich die Zeichenkette "<abc" oder "^abc" etc. gesucht werden soll? 
	Dann schreibt man c"?<abc" oder b"?^abc" etc. 
	Wenn aber '<' auch das allererste Zeichen sein könnte - dann würde ? ja nicht greifen! Dann setzt man  #t{ s0 } vorweg und #t{ s4 } hernach.

ik,x	Indikatorprüfung: die Position k (= 1...255) im Kategorietext (#cc) wird verglichen mit dem Zeichen x. 
Ik,x	Bei Gleichheit (i) bzw. Ungleichheit (I) wird weitergemacht, andernfalls wird der Arbeitstext nicht ausgegeben, d.h. die laufende Befehlszeile abgebrochen. 
	Achtung: das erste Zeichen des Kategorietextes hat die Nummer 4 (bei 3stelligen Kategorien 5). Somit kann man mit k=3 bzw. 4 das Indikatorzeichen (die 3. bzw. 4. Stelle der Kategorienummer) prüfen (vgl. "Indikatoraktion" -Ø 10.2.6.4). 
	Beispiele:
	i4,A : nur weitermachen, wenn Arbeitstext mit 'A' beginnt. (2stellige Kategorien) 
	I3,t : nur weiter, wenn das dritte Kategoriezeichen kein 't' ist. 

vk,x	Zeichenvergleich. Das Zeichen an der Position k (= 1...255) des Arbeitstextes wird verglichen mit 
Vk,x	dem Zeichen x. Wenn sein ASCII-Code kleiner ist als x (bzw. größer), wird in der Zeile weitergearbeitet, andernfalls wird der Arbeitstext nicht ausgegeben, d.h. die Befehlszeile abgebrochen. 
	Die Numerierung der Zeichen ist genauso wie bei den i/I-Befehlen zu verstehen. 
Anmerk.:	Die i- und v-Befehle prüfen den Inhalt der Ausgangskategorie (#cc), nicht den momentanen Arbeitstext. Wenn man letzteres will: zuerst eine #u-Variable draus machen und dann diese prüfen. 
Beisp.: 	Ist das erste Kategoriezeichen ein Großbuchstabe:  	... v4,[ V4,@ ... 
	Ist das erste Kategoriezeichen ein Kleinbuchstabe:  	... v4,{ V4,` ... 
	Ist das erste Kategoriezeichen eine Ziffer:  	... v4,: V4,/ ...
	... und wenn es ein 3stelliges Schema ist, muß es immer 5 statt 4 heißen, um das erste Zeichen zu prüfen. 

l<k	Längenprüfung. Ist der AT kürzer als k Zeichen
l>k 	bzw. länger als k Zeichen, 
	wird die Zeile fortgesetzt, sonst wird sie abgebrochen und nichts ausgegeben.

Typ 5 : Sonderaktionen
!	Testbefehl. Anwendbar nur in Anzeigeparametern, und nur in PRESTO (nicht in a99)! 
	Die Verarbeitung hält hier an, der aktuelle Arbeitstext wird am Bildschirm gezeigt, das Programm wartet auf einen Tastendruck. So kann man die Ergebnisse komplizierter Manipulationen beobachten. 
C	Sonder-Präfix Zeilenvorschub ("Carriage Return") 
	Z.B. bewirkt der Kategoriebefehl 
	#87 C p"ISBN "    dasselbe wie    #87 p{ C "ISBN " }  , 
	und zwar, daß Kategorie #87 auf neuer Zeile mit "ISBN " davor beginnt. 
	Genauer:  C bewirkt, daß der Wert des Parameters ze ausgegeben wird (-Ø 10.2.3) 

N	Sonder-Präfix Seitenvorschub ("New Page") 
	Wenn dieser Befehl kommt, führt das Programm auf der Stelle einen Seitenumbruch aus, d.h. es vollführt den Fußabschnitt (-Ø 10.2.6.5.3), dann gibt es den Parameter sv aus, und danach macht es auch noch den Kopfabschnitt, bevor es hinter dem N fortfährt mit der Bearbeitung des aktuellen Arbeitstextes. 
	Bei Kartendruck wird die aktuelle Karte beendet und eine Fortsetzungskarte begonnen. Dabei bleiben die Angaben im Kopf stehen, die zum Zeitpunkt des Sonderbefehls #wh vorhanden waren, und der Parameter fa wird ausgeführt. Ansonsten wird automatisch eine Fortsetzungskarte gemacht, wenn der Platz nicht mehr reicht; mit diesem Befehl kann man es gezielt veranlassen. 
	Dieser Befehl ist z.B. auch nützlich, wenn beim Listendruck an bestimmten Stellen eine neue Seite beginnen soll: etwa wenn ein neuer Alphabetabschnitt oder eine neue Sachgruppe beginnt oder wenn eine ganz bestimmte Kategorie besetzt ist oder nicht. 
Z	Sonderbefehl Textausgabe unterdrücken : der  Arbeitstext selbst wird nicht ausgegeben, die anderen Teile der Kategoriezeile werden aber ausgeführt: Prä- und Postfixe sowie der bedingte Sprung. Damit kann man Reaktionen auf bestimmte Bedingungen programmieren. Siehe auch e0 = Textlänge auf 0 setzen - die Wirkung ist gleich. Hinter Z muß evtl. noch  #zz 0  stehen, um zu verhinden, daß der Parameter ke ausgegeben wird. 
lxy	Länge des aktuellen Arbeitstextes in die Variable #uxy schreiben. 
Lxy	Label ("name") der aktuellen Kategorie aus CFG in #uxy kopieren (è A.1.2). 
M	Arbeitstext als Datenfeld in aktuellen Satz einordnen	Globale Manipulation
	Der Arbeitstext muß zu diesem Zeitpunkt mit einer gültigen Kategorienummer beginnen. Dann wird er in den aktuellen Satz als neue Kategorie eingeordnet bzw., wenn darin schon vorhanden, ersetzt. 
	Gebraucht wird dieser Befehl als Vorbereitung für "Globale Manipulationen". Man legt eine Parameterdatei an, die eine Sprungmarke #-# enthält, und darauf folgend Exportbefehle, die Veränderungen an einem Datensatz vornehmen, indem sie den Befehl M nutzen. 
	PRESTO: Wenn diese Parameterdatei für Export geladen ist (mit -e), kann man vom Anzeigemenü (-Ø 1.5.4) aus mit <Strg>+F10 die Ausführung des Abschnitts #-# starten, also Datensätze und Ergebnismengen manipulieren lassen. 
	a99: Der Abschnitt #-# wird ausgeführt, wenn die Parameterdatei für die "Globale Manipulation" ausgewählt wird. Dann ACHTUNG: In die Parameter eine Zeile mit   #t{ "..."}  einbauen (oder andere 3 Zeichen), sonst wird a99 die Manipulation nicht übernehmen. 
	Sonderfall: Kategorie aus dem aktuellen Datensatz löschen. Wenn der Arbeitstext nur die Kategorienummer, keinen Text enthält, wird die betreffende Kategorie aus dem Satz gelöscht. 
	Beispiel:  #nr p"#71 " e4 M   Kategorie #71 wird beseitigt. 
	Teilfeld löschen: (siehe Gruppe 1, Befehl ~x) 
	Wenn aus Kategorie #245 das Teilfeld ²x zu beseitigen ist, würde man schreiben: 
	#245 ~x p"#245 " M    (Achtung: Wert von ks beachten, d.h. evtl. b4 o.ä. ergänzen) 
Xi	Aus dem Arbeitstext einen Sondereintrag für satzübergreifende Suche machen.       [neu in V15] 
	'X' steht hier wirklich für den Buchstaben X.) Diese Operation dient der Lösung des sog. "Schiller-Räuber-Problems" beim Retrieval.  
	Beispiel: Angenommen, wir haben einen verknüpften Untersatz mit der Kategorie  #09 1234+13  und es handelt sich um Band 13 von Schillers "Gesammelte Werke", betitelt "Die Räuber". Wenn wir folgendes in die Index-Parameter einbauen:  (mehr dazu: -Ø 10.2.6.9) 
	ak=09+S 
	... 
	#-S 
	#u1 e"+" X9     #u1 enth. Primärschl. des Hauptsatzes, indexiert in Reg. 9
	#+#
	dann entsteht ein spezieller Registereintrag für diesen Untersatz, aber unter der internen Nummer des Hauptsatzes. Dies ermöglicht beim Retrieval (ab V15) die "Plus-Suche", d.h. den Befehl  find`per`&schiller`and`tit`raeuber. Das '&' vor schiller bewirkt, daß alle Untersätze von Sätzen, die "schiller" enthalten, mit in die Verknüpfung einbezogen werden, also auch der bewußte Satz von Band 13. 
?	In allen Suchzeichenketten X kann das Fragezeichen '?' als Maskierungszeichen vorkommen. 
	Z.B. bewirkt  b"19??" , daß das Druckfeld genau hinter einer Jahreszahl beginnt. 
	Soll ein anderes Zeichen als Maskierungszeichen verwendet werden erreicht man dies mit dem Befehl 
?=%%	dadurch wird '%%' zum Maskierungszeichen erklärt  (gültig für die gesamte Laufzeit des Exports), und man müßte b"19%%" schreiben. 
	Dieser Befehl gehört zu den Basisbefehlen! Er kann deshalb überall stehen und gilt für die gesamte Parameterdatei. 
	Allerdings kann man den Code zwischendurch mit dem #b-Befehl umschalten (10.2.6.4):  #b?=*  macht ad hoc das * zum Maskierungszeichen
	In den Befehlen mit 'X' ist auch die Suche nach einem von mehreren Zeichen möglich; dies geht genauso wie bei den ak-Befehlen, z.B.  e"[.,:;-/]" um den Arbeitstext am ersten Interpunktionszeichen enden zu lassen, oder t"[.,]", um hinter dem letzten Punkt oder Komma abzuschneiden. 

Index-Sonderbefehle

Index-Präfix
Wenn man mehrere Register (Teil-Indizes) anlegen will (Beispiel: CAT.API), braucht man eine Möglichkeit, für jeden Schlüssel seine Zugehörigkeit zu einem bestimmten Register zu regeln. Dazu wird das Index-Präfix benutzt. Es besteht aus dem Zeichen '|' (senkrechter Strich) und einer Ziffer von 1 bis 9.  Für Register 10 und 11:  |: und |; . 
Das Indexpräfix wird wie jedes andere Präfix vor den Arbeitstext gesetzt, also mit dem Manipulationsbefehl p. 
Entweder hat man ein Zwischenteil wie z.B. 37="|5" und verwendet es mit dem Befehl p37, oder man gibt p"|5" als direktes Präfix. 

Beispiel:

ak=4..+N	Personennamen alle bei Sprungmarke #-N verarbeiten
... 
#-N	
#u1 u p"|7"	Nichtsortierwörter herausnehmen, Zuordnung zu Index 7
#+#

Innerhalb eines Abschnitts können mehrere Schlüssel aufbereitet werden. Dann müssen diese mit dem ASCII-Code 8 getrennt werden. Z.B. kann man die zusätzlichen Schlüssel mit dem Präfix p{ 8 } versehen. Oder man setzt die Zeile 
#t{ 8 }
zwischen zwei Schlüsseldefinitionen. Es macht nichts, wenn der Code 8 mehrfach hintereinander vorkommt. 

Akronyme
Kn	Für die Index-Produktion gibt es einen weiteren Manipulationsbefehl zur Herstellung besonderer Schlüsselstrukturen, der sog. Matchcodes oder Akronyme: 
	Beispiel: Ein "Titelakronym" soll aus 6 Zeichen bestehen, wobei von den ersten 6 Wörtern der gewählten Kategorie jeweils der erste Buchstabe zu nehmen ist. 
	Das erreicht man mit dem Bearbeitungsbefehl K : 
	#20 K1 K1 K1 K1 K1 K1
	Damit werden aus den Titeln					die Schlüssel 
	#20 Common sense and humour in physics		csahip 
	#20 Nathan der Weise					ndweis
	Der zweite Titel hat weniger als 6 Wörter; der Befehl k statt K würde bewirken, daß der Schlüssel "ndw   " entstünde, während bei K, wie man sieht, die fehlenden Buchstaben vom letzten Wort ergänzt werden. 
	Will man die ersten 10 Zeichen aus dem Titel als Schlüssel verwenden so gibt man 
#20 k10
	und erhält "commonsens" bzw "nathanderw", Leerzeichen werden also weggelassen. (Hier wäre das Ergebnis bei K10 dasselbe.) 
	'K' und 'k' schließen 'u' ein, d.h. Artikel am Anfang, sofern als solche mit dem Nichtsortierzeichen gekennzeichnet, werden weggelassen. 
	Akronyme sind sinnvoll für Dublettenprüfungen: man lege einen Sonderindex oder eine Abteilung für diese Akronyme an und verwende sie als Primärschlüssel (zuständige ak-Zeile an die erste Stelle rücken). Anschließend kann man mit dem  Programm UPDATE -fc  einen Dublettencheck fahren (-Ø Kap.9). 

Kombinationen

	Alle Vorbearbeitungen sind miteinander mehrfach kombinierbar: z.B. würde die Befehlskette 
#83 b" ; " e", " e10 s10 73 #zz 0
	mit dem Zwischenteil  73="Tagungsort: "  
	oder gleichwertig: 

#83 b" ; " e", " e10 s10 p"Tagungsort: " #zz 0
	aus der Kongreßkategorie #83 den Tagungsort mit maximal 10 Zeichen herauslösen und kürzere Namen mit Leerzeichen ergänzen. Hier ist der fettgedruckte Teil die Manipulations-Befehlskette, p"Tagungsort: " ist das direkte Präfix. 
	Wenn also z.B. 
	#83 Bundeskongreß für Sportpädagogik ; Garmisch-Partenkirchen, 1983 
	bzw. 
	#83 Politikwissenschaftliche Arbeitstagung ; Bonn, 1984.10.22-24 
	eingegeben wurde, ergibt sich  "Garmisch-P"  bzw.  "Bonn      " 
	(und im zweiten Fall nicht etwa "Bonn, 1984", da dies durch e", " verhindert wird!) 
	Die Exportprozedur bearbeitet beliebig viele Manipulationsbefehle hintereinander; dabei ist die Reihenfolge wichtig, denn jeder wirkt auf das Ergebnis des vorangegangenen Befehls. 
	Empfehlung: Befehle mit zahlenmäßiger Längenbegrenzung (en, bn, rn, sn) sollten in einer Befehlskette am besten an letzter Stelle stehen. Vor ihrer Ausführung werden automatisch die Zeichenersetzungen erledigt, denn diese können die Länge verändern (z.B. Ersetzung von 'ä' durch 'ae' oder Beseitigung von Sonderzeichen). Wenn also weitere Manipulationen auf einen solchen Befehl folgen, muß man überlegen, ob solche Veränderungen des Textes evtl. stattgefunden haben. Z.B. würde e"ä" nicht mehr funktionieren, wenn vorher e50 stand und 'ä' durch "ae" ersetzt wurde. 
	Noch ein Beispiel: wenn man in #30 mehrere Notationen stehen hat, jeweils durch  " / " getrennt, dann würde die Befehlskette 
#30 b" / " b" / " b5 e12 ....  
	die dritte Notation herausnehmen und vom 5. Zeichen ab 12 Zeichen drucken. Hier sieht man auch, wie die mehrfache Anwendung desselben Befehls nützlich sein kann. Wenn in #30 nur einmal " / " vorkommt, bricht diese Befehlszeile ab und produziert kein Ergebnis. 

	Und ein Beispiel für die Behandlung von Kopfkategorien: 
	Wenn man bei den Namenskategorien fallweise eine Ansetzungsform mit eingibt, die dann im Kopf erscheinen soll, 
	z.B.  #40 Goethe, Johann Wolfgang von = Goethe, Johann W.
	so könnte man schreiben: 
	a) für den Kopf:   #40 B" = " #zz 4
	b) für den Text:   #40 e" = " #69 1 #72 8

Gleichfalls in den Bereich der Manipulationsbefehle gehören die Rechenbefehle und die Befehle zum Nachladen anderer Datensätze. Wegen ihrer eigenständigen und umfangreichen Bedeutung werden sie jedoch ausführlich in eigenen Abschnitten behandelt: -Ø 10.2.6.6/7. 

`Vorangehender Teil`   /   `Fortsetzung` 

?Vorangehender Teil=h ac10-6 
?Fortsetzung=h ac10-8 
?Rechenbefehle=h ac10-9