`Vorangehender Teil`   /   `Fortsetzung` 

11.2	Die Import-Sprache 

Konventionen für Bezeichnungen

Für die nachfolgende Befehlsübersicht gelten diese Vereinbarungen: 

	n	steht für eine ganze Zahl >= 0 
	k	steht für eine ganze Zahl zwischen 0 und 255 
	x	steht für ein druckbares Zeichen (Buchstabe, Ziffer, Sonderzeichen) 
	CS	steht für einen beliebigen Character String, wie in 10.2.0 beschrieben, wobei hier aber Strukturbefehle und Wiederholungsfaktoren nicht sinnvoll und deshalb unzulässig sind. 

Wenn rechts ein <Normalwert> (engl. default) angegeben ist, wird dieser vom Programm automatisch angenommen, wenn der betreffende Parameter nicht ausdrücklich gesetzt wird. 

	Achten Sie auf Groß-/Kleinschreibung bei den Befehlen! Die im folgenden gezeigte Schreibweise ist verbindlich. 
	Zeilen in einer Import-Parameterdatei dürfen nicht länger als 240 Zeichen sein.

11.2.1	Basis-Parameter

Wie beim Export gibt es eine Anzahl von Werten, die sich auf globale Eigenschaften der Struktur beziehen. Auch hier werden diese Werte mit zweibuchstabigen Bezeichnungen benannt. 
Zuerst muß das Programm wissen, wie es die Fremddatensätze einzulesen hat. Die folgenden Angaben legen den Typ (A...D) fest und teilen dem Programm die zum exakten Einlesen nötigen Werte mit. 

Typ A : Feste Satzlänge

rl=n	Record Länge	<0> 
			Es werden jeweils n Zeichen eingelesen und dann die Kategorieliste (-Ø 11.2.3) durchgearbeitet. Dort muß dann zur Positionierung mit den Befehlen j und l gearbeitet werden (-Ø 11.2.3.2/.3). 

			rl > 0  bedeutet für das Programm: die Daten sind vom Typ A

fh=n	Länge des Dateikopfes (File Header)	<0> 
			Diese Anzahl Zeichen am Dateianfang wird übergangen. Bei Sätzen mit fester Länge kommt es vor, daß vor dem ersten Satz noch einige für allegro unwichtige Steuerdaten des jeweiligen Quellsystems stehen. 
			Wenn der Dateikopf keine feste Länge hat, verwendet man den Parameter rs zum Einlesen (s.u.), z.B.  rs=0 13 10 32   bei Original-dBASE-Dateien. 
			Verwendbar ist fh auch bei den anderen Typen. Im Einzelfall läßt sich mit diesem Parameter der Datenbeginn individuell einstellen. Siehe auch: rs  (Typ C). 

Typ B : Sätze mit fester Feldanzahl

		Das sind die Fälle, wo die einzelnen Datenfelder zwar variabel lang sind, jeder Datensatz aber dieselbe Anzahl Felder hat. Die Bedeutung jedes Feldes ergibt sich dann aus seiner Position in der Reihenfolge der Felder. Meistens gibt es bei solchen Formaten keine Feldkennungen, an denen man sich orientieren könnte. 
		Dann benötigt man diese zwei Parameter: 

fx=n	Feldanzahl je Datensatz	<0> 
			Hier ist die Anzahl der Felder je Fremddatensatz anzugeben. 
			In der Kategorieliste kann jedes Feld dann mit seiner Nummer über den Befehl F aufgerufen werden (-Ø 11.2.3.2): das erste mit  F0, das zweite mit F1 usw.. 

			fx > 0  bedeutet für das Programm: die Daten sind vom Typ B

fe=CS	Feldende	<0> 
			Das Feldende kann als beliebige Zeichenkette angegeben werden, bis zu 25 Zeichen. Sehr häufig ist der Fall 
			fe=13 10  (Wagenrücklauf, Zeilenvorschub). 
			Die Zeichenkombination  fe  wird vom Programm beim Einlesen der Daten benutzt: es liest jeweils  fx  Zeichenketten, die mit  fe  enden, aus der Quelldatei und behandelt diese dann als einen Datensatz. 

Hinweis:	Es ist auch möglich, zusätzlich den Parameter re zu benutzen (-ØTyp C), wenn es eine Zeichenkombination gibt, die eindeutig das Satzende markiert. Der Positionierungsbefehl F (-Ø 11.2.3.2) funktioniert dann trotzdem. 

dBASE kann (mit dem Befehl  copy delimited...) ASCII-files produzieren, wobei der "Feldtrenner" wählbar ist. Alternativ kann man dBase-Dateien des Typs .DBF mit einem Hilfsprogramm namens DB2DELIM.EXE in eine ASCII-Datei mit Feldtrennern verwandeln. Wenn die Datei z.B. TITEL.DBF heißt, gibt man 
db2delim`titel`64. 
Es entsteht TITEL.ASC. In diesem Fall wurde '@' als Feldtrenner gewählt. Die Anzahl der @ je Satz ist immer gleich, und zwar in diesem Fall 17. Jeder Satz bildet eine lange Zeile, denn nur am Satzende kommen die Codes 13 10 als Satztrennung: 

 313 134@113@fi@Eco, Umberto@@@Semiotik - Entwurf einer Theorie der Zeichen 
 (A Theory of Semiotics, dt.)@München@Fink@1987@(Supplemente ; 5)@10205/88@D 
 eskriptor@@,,F,F,@11@Kommentar@ 
 45 361@38@@Hood, Christopher (Hg)@Schuppert, Gunnar Folke (Hg)@@Verselbstä 
 ndigte Verwaltungseinheiten in Westeuropa : d. Erfüllung öffentl. Aufgaben 
 durch Para-Government Organizations (PGOs)@Baden-Baden@Nomos Verl.-Ges.@198 
 8@@11638@@@,,F,F,@11@@ 

Die Parameterdatei DBIII.AIM, mit der man dieses importieren kann, beginnt so: 
re=13 10      Am Satzende stehen die Codes 13 10 
fe="@"        @ ist das Feldende 
fx=17         Es werden 17 Felder je Satz, getrennt durch @, eingelesen 

#20      Sachtitel 
f 6      steht in Feld 6 (hinter dem sechsten '@') 
N        Artikel am Anfang mit Nichtsortierzeichen markieren  ... 

ACHTUNG: Wenn am Ende des letzten Feldes kein Feldtrenner steht, geht es nur so: 

fx=17 
fe=0 
y .64 0      Setzt den Feldtrenner @ beim Einlesen schon auf 0 (deshalb klappt dann fe=0) 
y .10 256    Weg mit Code 10 
y .13 0      und 13 wird dann ebenfalls Feldtrenner 

Typ C : Variable Sätze

		Bei vollständig variablen Sätzen handelt es sich entweder um die sehr elaborierten Formen des Typs D, oder aber es gibt wohldefinierte Zeichen(kombinationen), an denen Satz- und Feldende eindeutig erkennbar sind. Welche Zeichen dafür verwendet wurden, entnehme man der Dokumentation der Fremddaten oder (falls keine vorhanden) man analysiere die Struktur selbst mit üblichen Hilfsmitteln, die eine Untersuchung auf Byte-Ebene ermöglichen, zur Not mit dem MS-DOS-Befehl DEBUG (Beispiel -Ø 11.3). 

rs=CS	Record Start   (bis zu 25 Zeichen)	<""> 
			wird nur benötigt, wenn am Dateianfang vor dem Beginn des ersten Datensatzes noch andere Angaben stehen können. Das ist z.B. meistens bei "download"-Daten der Fall. 
			rs kann auch bei den anderen Typen verwendet werden. Wenn zusätzlich fh (s.o.) gegeben wurde, liest das Programm zuerst fh Zeichen und sucht dann nach der Zeichenkette rs. 
			rs wird nur zur Suche nach dem Anfang des ersten Datensatz benutzt! Der Anfang des nächsten ergibt sich automatisch aus: 

re=CS	Record End   (bis zu 25 Zeichen)	<""> 
			die hier angegegene Zeichenkette CS wird benutzt, um beim Einlesen eines Datensatzes von der Fremddatei dessen Ende festzustellen. Der Lesevorgang wird dann unterbrochen und es erfolgt die Umwandlung des gelesenen Satzes. 
			Oft ist das Satzende nicht durch charakteristische Zeichen erkennbar, sondern der Satzanfang. Das tut nichts zur Sache, man nimmt dann die Anfangszeichen, und es funktioniert. rs und re dürfen also gleich sein. 
			Beim Einlesen wird hinter dieser Zeichenkombination Schluß gemacht. re selbst gehört also noch zum eingelesenen Text. Darauf muß man achten, wenn es sich in Wirklichkeit um den Satzanfang handelt. 
			Wenn   re   angegeben wird, liegt für das Programm der Typ C vor.
			Wenn es Untersätze gibt, verwende man für re eine Zeichenkette, mit der Haupt- und Untersätze getrennt eingelesen werden, damit man sie als getrennte Datensätze behandeln kann. Die Untersätze werden durch den Befehl h (-Ø 11.2.3.4) an den Hauptsatz gekoppelt. 

	>>>	Achtung: wenn re nicht ganz genau stimmt, also CS gar nicht vorkommt, kommt eine Fehlermeldung 
			"text too long, check your 're' command" 
	    		denn das Programm findet dann kein Satzende. 
		Das Feldende wird bei variablen Sätzen 
		entweder	mit dem e-Befehl individuell für jedes Feld bestimmt (-Ø 11.2.3.3), 
		oder		man benutzt  fe  wie beim Typ B  (z.B.  fe=13 10 ) 
		oder		man bringt durch eine globale Ersetzung (-Ø 11.2.2.2) den Code 0 an die Feldende-Positionen 
				z.B. 	_ 13 10
					_ 0         "Carriage Return/Line Feed" ersetzen durch Code 0 
		Es ist auch möglich, daß man die zweite oder dritte Methode anwendet, um sich nicht bei jedem Datenfeld ausdrücklich um das Ende kümmern zu müssen, daß man aber bei einzelnen Feldern den Endebefehl einsetzt, um Feldbestandteile "herauszupräparieren". 
Wenn es ein einzelnes Zeichen X gibt, das immer als Feldende (und sonst nirgends) vorkommt, kann man setzen: 
y X 0 
und hat dann auch in diesem Fall den Vorteil, daß bei den einzelnen Feldern das Ende automatisch feststeht.
 
Typ D : Datensätze nach ISO-Norm

		Nur bei Formaten, die dem ISO-Standard folgen, (nicht alle MAB- oder MARC-Daten sind so organisiert - "download"-Daten sind allerdings meistens Typ C!) muß man die folgenden Parameter verwenden. Es gibt in diesen Formaten keine Begrenzungszeichen, sondern die Längen der Sätze sowie die Kategorienumern, Längen und Positionen der Felder sind als Dezimalzahlen gespeichert, für jede Kategorie 12 Byte: 3 Byte Kategorienummer, 4 Byte Länge, 5 Byte Position innerhalb des Satzes. Man erkennt daher solche Formate sofort an einer langen Folge von Ziffern am Satzanfang. 

		Nur das echte Magnetbandformat MAB1 hatte ein solches Directory, das Format MAB-Diskette dagegen nicht. MAB2 kennt überhaupt kein Directory mehr. Das echte USMARC, z.B. von OCLC, hat dieses noch immer. 

		Manche Ausprägungen von ISO-Formaten, z.B. das Original MAB1, haben Feldtrennzeichen und zusätzlich Satztrennzeichen; dann können Sie sich aussuchen, ob Sie nach Typ C oder D verfahren. 

al=k	Adressen-Länge in Bytes	<5> 
			Dieser Wert gibt an, wieviele Bytes die Längenangabe hat. 
			Bei MARC-Bibliofile ist al=2, d.h. jeder Datensatz beginnt mit 2 byte, in denen seine Länge steht. Für ISO-Formate ist al=5 der normale Wert. 
			Wenn ein Wert al>0 angegeben wird, wird vom Programm aus angenommen, daß Typ D oder E vorliegt: die ersten al Bytes werden gelesen, die Satzlänge daraus bestimmt (siehe am), und dann diese Anzahl Bytes aus der Fremddatei eingelesen. 

			al > 0  bedeutet für das Programm: die Daten sind vom Typ D

am=k	Adressen-Modus	<1> 
			zulässig sind nur   0 = hexadezimal, 1 = dezimal 
			die in al angegebene Anzahl Bytes werden entweder als hexadezimale oder dezimale Zahl interpretiert. Bei Bibliofile ist am=0. Ansonsten gilt bei ISO-Formaten am=1, z.B. bei Bielefelder CD-ROM-Daten oder bei den US- und OCLC-MARC-Daten. 

fd=n	field directory position : Anfangsposition des Directory	<24> 
			innerhalb des Datensatzes. Bei MAB1 ist die Position  fd=192, 
			bei MARC meist fd=24 (vgl. BIEL.DIM  und  OCLC.DIM). 
			Dieser Wert muß exakt stimmen, sonst geht nichts. Die Befehle D und T (s.u.) benutzen  fd  als Anfangspunkt für die Suche nach einer Kategorienummer. 

Wichtig:	Die einzelnen Felder werden bei diesen Formaten mit den Positionierungsbefehlen  D und d  (und nur für "Bibliofile"  mit  T und t) angesprochen (-Ø 11.2.3.2). Die Positionierungsbefehle s und g können nur ausnahmsweise benutzt werden, wenn Inhalte mit Zeichenkombinationen eingegrenzt sind (-Ø 11.2.2.2). Bei den echten MARC-Formaten stehen die Kategorienummern nicht vor den Feldinhalten, sondern nur im Directory! 

Hilfswerte für die variablen Satzstrukturen

Die folgenden Werte erleichtern in bestimmten Situationen die Verarbeitung. 

fs=k	Feld-Start-Position	<0> 
			Wenn der Feldinhalt nicht unmittelbar hinter der Feldkennung anfängt, sondern mehrere Positionen dahinter, kann man die Anzahl der hinter der Kennung zu übergehenden Bytes in fs angeben. 
			Man müßte sonst bei jedem Feld den Befehl } benutzen (-Ø 11.2.3.3), um die Position des Textzeigers zu verschieben. 
			Bei Bibliofile gilt z.B. fs=5. 

fc=k	Feldlängen-Korrektur	<0> 
			Die Länge des Datenfeldes bestimmt sich normalerweise aus dem Parameter fe (Typ B und C) oder automatisch durch den Endecode 0 oder den Befehl l (Typen A - C). 
			Bei Formaten wie Bibliofile, die sich am ISO-Standard orientieren, ergibt sich aber die Feldlänge (wie die Satzlänge) aus binär codierten Angaben hinter der Feldkennung. In der Länge ist dann i.a. die gesamte Länge einschließlich eventueller Indikatoren und sonstiger Angaben am Anfang des Feldes enthalten. Dann wird die mit fc angegebene Zahl von der ermittelten Länge abgezogen. 

fm=x	Mehrfachfeld-Kennzeichnung	<ú> 
			Das hier angegebene Zeichen wird als Folgezeichen benutzt, um die allegro-Kategorienummer eines Mehrfachfeldes zu ergänzen wenn das betr. Feld tatsächlich mehrfach vorkommt. 
    			Siehe dazu unten den Befehl  m  in der Kategorieliste (-Ø 11.2.3.6). 
			Der Code ú bedeutet, daß IMPORT die Mehrfachcodes aus der Angabe ?M in der .CFG entnehmen soll. Wenn dort also z.B.  #90"Signatur"?Mabcdefghijk  steht, erhält die erste #90 das Folgezeichen 'a', die zweite 'b' usw. Wenn 'k' überschritten wird, fallen weitere Exemplare von #90 alldings weg. 
			Ist dagegen  fm=2  gesetzt, würde IMPORT die Felder #902, #903 usw. bilden. Sind '2' und '3' etc. nicht in der Angabe ?M für #90 enthalten, entfallen sie. 

fr=k	Feld-Repetierfaktor	<1> 
			Wenn z.B. das Feld "Schlagwort" mehr als zweimal vorkommt, und man hat das erste in #30 umgesetzt, dann wird das zweite mit Hilfe von fm in #301 überführt, das dritte ergibt sich durch Addition von fr, also erhält man #302, wenn fr=1 ist. 
			fr gilt global; wenn man bei einem bestimmten Feld eine andere Regelung wünscht, kann man den Faktor beim Befehl m (-Ø 11.2.3.6) angeben.  

11.2.2  Globale Konvertierungsbefehle

		Das Importprogramm kann 1:1-Zeichenersetzungen vornehmen, Doppelkombinationen aus einem Protyp und einem Grundzeichen, sowie einen globalen Austausch ganzer Zeichenketten ausführen. Weitere Umwandlungen kann man über die Exportfunktionen (s.o., Einbau in die Datei I-1.cPR) nachschalten. Die Befehle lauten: 

11.2.2.1	Zeichenumwandlungen (Umcodierungen)

y x k
y .m k
		Wirkung: bereits beim Einlesen wird das Zeichen x durch den Code k (dezimal anzugeben) ersetzt bzw. der Code m durch k (beides dezimal angegeben). Notwendig ist dies z.B. beim Einlesen von EBCDIC-Daten. Der Befehl y bietet ansonsten dieselben Möglichkeiten wie der Befehl p bei den Export-Parametern (s. Kap.10.2.4), bis auf die Ersetzung von Einzelzeichen durch Zeichenketten. 
		Sonderfall:  k = 256 : Zeichen x soll beim Einlesen übergangen werden, also entfallen. 
		Die Ausführung erfolgt schon direkt beim Einlesen, vor allen anderen Aktionen. 
		Empfehlung: Prophylaktisch setze man 
		y .1 32		Code 1 soll durch Leerzeichen ersetzt werden, desgl. 2 - 9 
		 [usw. bis] 	Die umgewandelten Daten können sonst Probleme machen.
		y .9 32		Mit 256 statt 32 kann man sie auch ersatzlos beseitigen! 
		Damit werden die Codes 1 bis 9 im Fremdtext durch Leerzeichen ersetzt, wenn sie vorkommen. 

11.2.2.2	Globale Ersetzungen
		Sehr häufig ist es sinnvoll, vor Beginn der Umwandlung im zu bearbeitenden Datensatz Ersetzungen bestimmter Zeichenketten vorzunehmen. Dafür gibt es den "globalen" Ersetzungsbefehl. ("Global" deshalb, weil er sich auf den gesamten Datensatz bezieht. Ersetzungen in einzelnen Feldern sind bei dem das Feld betreffenden Abschnitt anzugeben (-Ø 11.2.3.4 "Lokale Ersetzungen"); Ersetzungen auf Zeichenebene, d.h. Ersetzung einzelner Zeichen durch andere, können über die Export-Schnittstelle behandelt werden , siehe dazu Kap.10.2.4. 
		Der Befehl hat immer zwei Teile: 
_CS1	CS1 ist die zu ersetzende Zeichenkette, 
_CS2	CS2 die dafür einzusetzende. 

		Jede dieser Zeichenketten kann aus einer Mischung von Steuer- und Textzeichen bestehen. 
		Beispiel:
		_ 13 10 "     " 
		_ " " 
		Hierdurch wird die Folge "Wagenrücklauf Zeilenvorschub 5 Leerzeichen" ersetzt durch ein Leerzeichen. Solche Ersetzungen sind oft bei "download"-Daten nützlich um einen Zeilenumbruch zu beseitigen, der in allegro-Daten stören würde. Zu beachten ist, daß der Befehl hier aus zwei Zeilen bestehen muß, anders als bei den Export-Parametern! Dies ist nötig, weil hier in CS1 und CS2 alle Codes, also auch Steuerzeichen, der Code 0, und das Zeichen '_' selbst enthalten sein können. 
		Die Ausführung erfolgt nach dem Einlesen, wenn die y-Befehle bereits erledigt sind. D.h. man muß die durch y umgewandelten Zeichen in den CS-Ketten schon in der umgewandelten Form berücksichtigen. 
		Diese Art Ersetzungsbefehl kann aber auch innerhalb einzelner Kategorieabschnitte ("Paragraphen") zum Einsatz kommen und wirkt dann nur auf die betreffende Kategorie als "Lokale Ersetzung" (-Ø 11.2.3.4). Alle global gemeinten Ersetzungsbefehle müssen in der Datei oberhalb der Kategorieliste stehen. 

		Einschränkung: in ISO-Formaten (al>0, z.B. "Bibliofile") müssen CS1 und CS2 bei globalen Ersetzungen gleich lang sein, weil sonst die Adressen nicht mehr stimmen; bei lokalen Ersetzungen funktionieren dagegen beliebige Längen. 

?=X	Maskierungszeichen umdefinieren (engl. "wildcard")	<?> 
		Es kommt häufig vor, daß in Ersetzungsbefehlen oder in Positionierungsbefehlen (-Ø 11.2.3.2) bestimmte Zeichen variieren können, also nicht festliegen. Diese Zeichen muß man in der Suchzeichenkette CS1 oder CS "maskieren" können. 
		Standardmäßig wird '?' als Maskierungszeichen benutzt. Kommt es in einer Suchzeichenkette CS selber als echtes Zeichen vor, dann muß man es umdefinieren. Man gibt dann diesen Befehl und setzt für 'X' ein Zeichen ein, das in keinem Ersetzungsbefehl vorkommen wird, denn es gilt dann für den gesamten Vorgang und kann nicht zwischendurch geändert werden. 
		Für lokale Ersetzungen gilt das Zeichen auch (-Ø 11.2.3.4). 

11.2.2.3	Protyp-Ersetzungen 

		Doppelkombinationen aus einem "Protyp"-Zeichen und einem Ersatzzeichen können durch Einzelzeichen ersetzt werden. Die Befehlsform ist: 

p C abcde vwxyz
		wobei folgendes gilt: 
		C		Protypzeichen 
		abcde	Zeichen, die hinter dem Protyp vorkommen können 
		vwxyz	Zeichen, die als Ersatz eingesetzt werden sollen 
				(gleiche Anzahl wie in abcde) 
		Ergebnis:   Ca wird durch v ersetzt,   Cb durch w usw. 
		Beispiele sind in MARCBFC.AIM zu finden, z.B. für das Protypzeichen Φ: 
		p Φ aoueiyAOU aöüëï_ÄÖÜ     also Φa durch ä ersetzen usw. 
		Achtung: Für jedes Zeichen C nur eine solche Zeile! 

		Ausführung: Diese Ersetzungen werden erst im Anschluß an alle Vorbearbeitungsbefehle der Kategorieliste (-Ø 11.2.3) ausgeführt, d.h. für die dort benutzten Such- und Ersetzungsbefehle gelten die Protypzeichen noch. 

11.2.2.4	Sonderersetzungen
		Für Spezialfälle wurden folgende Befehle geschaffen, die alle drei global wirken: 

P		Punkt direkt vor Buchstaben ersetzen durch ". " (Punkt Leerzeichen) 
S		Mehrfach-Leerzeichen beseitigen 
$$		sog. "Dollar-Verweisungen" auflösen. In PICA-Daten oder auch SWD-Daten (dort "Montagebefehle" genannt) kommen solche Dinge vor. Hinter einem Dollarzeichen steht eine Kategorienummer. Wurde dieser (global wirkende) Befehl gegeben, ersetzt das Programm alle solchen Verweise durch den zugehörigen Kategorietext, löst also die Verweise auf. Das erste Dollarzeichen ist der Befehl, das zweite das tatsächlich in den Fremddaten benutzte Zeichen. 
		Wenn z.B. in einem Kategorietext irgendwo "$3000" vorkommt, wird dies durch den Inhalt der Fremdkategorie 3000 ersetzt. Voraussetzung: Das Feldende der Fremdkategorien muß durch den Code 0 markiert sein. (Normalerweise erreicht man das durch eine globale Ersetzung.) 

?Vorangehender Teil=h ac11 
?Fortsetzung=h ac11-2