#limit (11.0)##pagelength (16.5)##block# #start (2.0,0.0)# #page (83)# #headodd# #center#EUDAS#right#% #end# #headeven# %#center#EUDAS #end# #center#1 8 Funktionen zur Bearbeitung Die Verarbeitungsfunktionen arbeiten jeweils auf der aktuell geöff­ neten Datei. Falls mindestens ein Satz markiert ist, werden nur markierte Sätze bearbeitet, anderenfalls die durch die Suchbedin­ gung ausgewählten Sätze. 8.1 Drucken Zum Drucken wird ein Druckmuster als Textdatei benötigt. Dessen Name muß beim Aufruf der Prozedur 'drucke' angegeben werden. Werden beim Übersetzen des Druckmusters Fehler entdeckt, so wird der Paralleleditor aufgerufen und kein Druckvorgang durchgeführt. Normalerweise sendet der Druckgenerator die Ausgabe direkt zum Drucker. Alternativ kann die Ausgabe auch in eine Datei ge­ schrieben werden. Dieses Verfahren kann mit 'direkt drucken' umge­ stellt werden. Der Aufruf direkt drucken (TRUE) sendet alle Dateien direkt zum Drucker, mit direkt drucken (FALSE) wird die Ausgabe in Dateien abgelegt. Diese Dateien erhalten Namen der Form "Druckmustername.a$n" wobei 'n' eine laufende Nummer zur Unterscheidung ist. Soll die Druckausgabe in eine ganz bestimmte Datei geleitet werden, so kann vor dem Aufruf von 'drucke' die Prozedur 'druck­ datei' aufgerufen werden, die als Parameter den Namen der Ausga­ bedatei erhält. Existiert die Datei noch nicht, wird sie eingerichtet, ansonsten wird die Ausgabe am Ende angehängt. Die Einstellung der Ausgabedatei gilt nur für einen Druckvor­ gang und überschreibt für diesen Druckvorgang 'direkt drucken'. Beim nächsten Druckvorgang wird wieder die durch 'direkt drucken' festgelegte Einstellung verwendet. Wenn beim Drucken ein großes Ausgabevolumen anfällt, kann es sinnvoll sein, die Ausgabe in mehrere kleine Dateien aufzuteilen. Dies gilt auch, wenn direkt gedruckt werden soll, da auch in diesem Fall eine Zwischendatei erzeugt werden muß. Die maximale Anzahl von Zeilen pro Datei wird durch 'max druckzeilen' angegeben. Der dort angegeben Wert gilt nur ungefähr - ein Wechsel der Ausgabedatei findet dann statt, wenn die Ausgabedatei nach Bear­ beitung eines Satzes die Maximalanzahl überschritten hat. In die neue Datei wird anschließend zuerst der Initialisierungsteil des Druckmusters kopiert, ehe mit der Ausgabe des nächsten Satzes fortgefahren wird. Die Prozeduren im einzelnen: PROC drucke (TEXT CONST druckmuster) Die aktuell geöffnete Datei wird nach dem angegebenen Druck­ muster gedruckt. FEHLER: #f1# #on("i")#Datei "druckmuster" existiert nicht#off("i")# Das angegebene Druckmuster ist nicht vorhanden. #f1# #on("i")#keine Datei geoeffnet#off("i")# Zum Drucken muß eine Datei geöffnet sein. #f1# #on("i")#direkt Drucken nicht möglich#off("i")# Es ist kein Druckprogramm installiert oder der Spooler läßt sich mit 'print' nicht ansprechen. Der Druck wird abgebrochen, die Ausgabedatei ist noch vorhanden. PROC direkt drucken (BOOL CONST ja) Gibt an, ob die Druckausgaben direkt gedruckt oder in einer Datei gesammelt werden sollen. PROC druckdatei (TEXT CONST ausgabedatei) Leitet die Druckausgabe des nächsten Druckvorgangs in die Datei 'ausgabedatei'. Die Einstellung von 'direkt drucken' wird für diesen Druckvorgang überschrieben. Die Ausgabe wird am Ende der Datei angehängt, falls nötig, wird die Ausgabedatei vorher eingerichtet. PROC maxdruckzeilen (INT CONST zeilen) Stellt die maximale Anzahl von Zeilen für die Ausgabedatei ein. Beim Überschreiten dieses Wertes wird eine neue Datei ange­ fangen. Standardwert ist 4000. TEXT PROC lfd nr Liefert während des Druckens die laufende Nummer des gerade gedruckten Satzes als Text. BOOL PROC gruppenwechsel (INT CONST gruppennr) Kann innerhalb eines Vor- oder Nachspanns beim Drucken ab­ gefragt werden, um festzustellen, ob die angegebene Gruppe gewechselt und damit den Vor- bzw. Nachspann mitverursacht hat (es können zu einem Zeitpunkt mehrere Gruppen wechseln). Die Gruppennummer 0 gibt die Standardgruppe an, die nur vor dem ersten und nach dem letzten Satz wechselt. 8.2 Kopieren Zum selektiven Kopieren von EUDAS-Dateien wird ein Kopiermuster benötigt. Dieses gibt die Zuordnung zwischen Feldern der Ziel- und der Quelldatei an. Die Quelldatei ist immer die aktuell geöffnete Datei. Die Kopierfunktion wird durch 'kopiere' aufgerufen. Parameter sind der Name der Zieldatei und das Kopiermuster als FILE. Alter­ nativ kann statt des Kopiermusters eine Prozedur übergeben wer­ den, die die Kopieranweisungen erhält. Der eigentliche Kopiervorgang wird durch den Operator 'K' bewirkt. Dieser erhält den Zielfeldnamen und einen TEXT-Aus­ druck als Parameter. Der Wert des TEXT-Ausdrucks wird in das jeweilige Feld der Zieldatei geschrieben. Existiert die Zieldatei noch nicht, so wird sie mit den Feldern eingerichtet, die in den einzelnen 'K'-Ausdrücken angegeben sind und zwar in der angeführten Reihenfolge. Existiert die Zieldatei, so werden gegebenenfalls noch nicht vorhandene Felder am Ende ange­ fügt. Die Prozedur 'std kopiermuster' liefert zu einer gegebenen Zieldatei ein Standard-Muster, das als Auswahlgrundlage dienen kann. Existiert die Zieldatei nicht, werden alle Felder der Quell­ datei 1 : 1 kopiert, anderenfalls wird zu jedem Feld der Zieldatei ein passendes Feld der Quelldatei gesucht - die Feldreihenfolge richtet sich in diesem Fall nach der Zieldatei. PROC kopiere (TEXT CONST dateiname, FILE VAR kopiermuster) Die aktuell geöffnete Datei wird nach den Angaben in 'kopier­ muster' in die Datei 'dateiname' kopiert. Das Kopiermuster wird dem ELAN-Compiler übergeben. Tritt bei der Übersetzung ein Fehler auf, wird der Paralleleditor aufgerufen. FEHLER: #f1# #on("i")#Datei ist keine EUDAS-Datei#off("i")# Zieldatei existiert, ist aber keine EUDAS-Datei. #f1# #on("i")#keine Datei geoeffnet#off("i")# Es muß eine virtuelle Datei vorhanden sein. PROC kopiere (TEXT CONST dateiname, PROC kopierfunktion) Wie oben, nur ist die Kopierfunktion gleich als Prozedur vor­ handen. FEHLER: #f1# #on("i")#Datei ist keine EUDAS-Datei#off("i")# Zieldatei existiert, ist aber keine EUDAS-Datei. #f1# #on("i")#keine Datei geoeffnet#off("i")# Es muß eine virtuelle Datei vorhanden sein. OP K (TEXT CONST feldname, ausdruck) Kopiert den Ausdruck in das Feld 'feldname' der Zieldatei. Dieses Feld wird eingerichtet, falls es noch nicht existiert. Dieser Operator ist nur während eines Kopiervorganges de­ finiert (also in einem Kopiermuster oder einer Kopierfunktion). Er darf nicht in einer IF-Klausel stehen, sondern muß bei jedem Satz mit gleichem Feldnamen an der gleichen Stelle auf­ gerufen werden. PROC std kopiermuster (TEXT CONST dateiname, FILE VAR kopiermuster) Liefert ein Standard-Kopiermuster, abhängig von der Zieldatei 'dateiname'. Existiert diese nicht, wird die Quelldatei unverän­ dert kopiert, ansonsten richtet sich das Kopiermuster nach der Zieldatei. 8.3 Tragen Durch Tragen können Sätze komplett in eine Zieldatei transportiert werden. In der Quelldatei sind sie anschließend nicht mehr vorhan­ den. Eine ganze Auswahl von Sätzen kann mit 'trage' transportiert werden. 'trage satz' transportiert nur den aktuellen Satz. Mit 'hole satz' kann der letzte Satz der Zieldatei wieder zurückgeholt werden, so daß eine EUDAS-Datei auch als Zwischenspeicher für Einzelsätze verwendet werden kann. Existiert die Zieldatei bereits, muß sie mindestens so viele Felder wie die Quelldatei besitzen, damit keine Informationen ver­ lorengehen können. Die Feldnamen müssen nicht übereinstimmen. Existiert die Zieldatei noch nicht, wird sie mit den Feldern der Quelldatei eingerichtet. Die Tragefunktion kann um eine gleichzeitige Prüfung erweitert werden. Dabei werden Bedingungen überprüft, die bei der Zieldatei gespeichert sind. Sätze, die diese Bedingungen verletzen, werden nicht getragen. Eine entsprechende Meldung wird in eine Protokoll­ datei geschrieben, die als Parameter übergeben werden muß. Die Prüfbedingungen stehen als ausführbares Programm in den Notizen der Zieldatei. Prüfbedingungen können mit mehreren Proze­ duren formuliert werden. 'pruefe' nimmt eine beliebige Bedingung als Parameter und gibt bei Mißerfolg eine Meldung aus. 'wertemenge' prüft auf Übereinstimmung mit einem der angegebenen Werte. 'feld­ maske' legt eine Maske für ein Feld fest, die auf den Inhalt zutref­ fen muß. Mit Hilfe der Prozedur 'eindeutige felder' können Satzduplikate erkannt werden. Auch diese werden nicht getragen. Die bei den Prüfbedingungen angegebenen Feldnamen müssen in der Quelldatei vorhanden sein. Falls eine Prüfprozedur außerhalb von 'trage' aufgerufen wird, führt eine Verletzung der Prüfbedin­ gung zu einem 'errorstop'. PROC trage (TEXT CONST dateiname, FILE VAR protokoll, BOOL CONST test) Alle ausgewählten Sätze werden in die Datei 'dateiname' getra­ gen. Diese wird gegebenenfalls eingerichtet. Falls 'test' ange­ geben ist, werden die in den Notizen der Zieldatei enthaltenen Bedingungen geprüft. Nur in diesem Fall muß 'protokoll' initial­ isiert sein. FEHLER: #f1# #on("i")#kein Satz zum Tragen vorhanden#off("i")# Die Quelldatei ist leer oder es ist keine Datei geöffnet. #f1# #on("i")#Datei ist keine EUDAS-Datei#off("i")# Zieldatei existiert, ist aber keine EUDAS-Datei. #f1# #on("i")#Zieldatei hat falsche Felderzahl#off("i")# Zu wenig Felder in der Zieldatei. PROC trage satz (TEXT CONST dateiname) Der aktuelle Satz wird in die Datei 'dateiname' getragen. FEHLER: #f1# #on("i")#kein Satz zum Tragen vorhanden#off("i")# Keine Datei geöffnet oder Datei ist am Ende. #f1# #on("i")#Datei ist keine EUDAS-Datei#off("i")# Zieldatei existiert, ist aber keine EUDAS-Datei. #f1# #on("i")#Zieldatei hat falsche Felderzahl#off("i")# Zu wenig Felder in der Zieldatei. PROC pruefe (TEXT CONST feldname, BOOL CONST bedingung) Wenn die angegebene Bedingung FALSE liefert, wird eine Mel­ dung in die Protokolldatei geschrieben und der jeweilige Satz nicht getragen. PROC wertemenge (TEXT CONST feldname. menge) Es wird geprüft, ob das angegebene Feld in der Wertemenge enthalten ist. Die einzelnen Werte in der Wertemenge werden dabei durch Komma getrennt. Leerzeichen sind signifikant. PROC feldmaske (TEXT CONST feldname, maske) Es wird geprüft, ob das angegebene Feld zu der Maske paßt. Die Zeichen in der Maske haben dabei folgende Bedeutung: '9' trifft auf jede Ziffer zu 'X' trifft auf jedes Zeichen zu 'A' trifft auf jeden Großbuchstaben zu (einschließlich Umlaute) 'a' trifft auf jeden Kleinbuchstaben zu (einschließlich Umlaute und 'ß') '*' trifft auf eine Folge beliebiger Zeichen zu (auch die leere Folge). Eine sparsame Verwendung wird empfoh­ len, da die Bearbeitung sehr aufwendig ist. Alle anderen Zeichen treffen nur auf ein gleiches Zeichen zu. PROC eindeutige felder (INT CONST anzahl) Gibt an, die wieviel ersten Felder einen Satz eindeutig identifi­ zieren sollen. Ein Satz, der mit einem Satz der Datei in diesen Feldern übereinstimmt, wird nicht getragen. Ohne diese Angabe wird keine derartige Prüfung vorgenommen. PROC hole satz (TEXT CONST dateiname) Holt den letzten Satz der angegebenen Datei und fügt ihn vor dem aktuellen Satz ein. FEHLER: #f1# #on("i")#"dateiname" existiert nicht#off("i")# #f1# #on("i")#Datei ist keine EUDAS-Datei#off("i")# Zieldatei existiert, ist aber keine EUDAS-Datei. #f1# #on("i")#Zieldatei hat falsche Felderzahl#off("i")# Zu viele Felder in der angegebenen Datei. #f1# #on("i")#Kein Satz zum Tragen vorhanden#off("i")# Die angegebene Datei ist leer. #f1# #on("i")#keine Datei geoeffnet#off("i")# Es muß eine virtuelle Datei vorhanden sein. 8.4 Verarbeitung Die ausgewählten Sätze der aktuellen Datei können nach einer Verarbeitungsvorschrift verändert oder geprüft werden. Dies ge­ schieht durch die Prozedur 'verarbeite'. Als Parameter kann ent­ weder ein Verarbeitungsmuster als FILE oder die Verarbeitungs­ funktion direkt als Prozedur übergeben werden. Die Vorschrift wird durch den Operator 'V' realisiert. PROC verarbeite (FILE VAR verarbeitungsmuster) Die aktuelle Datei wird nach dem angegebenen Muster bearbei­ tet. Enthält die Vorschrift, die dem ELAN-Compiler übergeben wird, einen Fehler, wird der Paralleleditor aufgerufen. FEHLER: #f1# #on("i")#keine Datei geoeffnet#off("i")# Es muß eine virtuelle Datei vorhanden sein. PROC verarbeite (PROC verarbeitungsfunktion) Wie oben, nur wird die Vorschrift direkt als Prozedur überge­ ben. FEHLER: #f1# #on("i")#keine Datei geoeffnet#off("i")# Es muß eine virtuelle Datei vorhanden sein. OP V (TEXT CONST feldname, ausdruck) Das angegebene Feld des aktuellen Satzes wird durch den Aus­ druck ersetzt. FEHLER: #f1# #on("i")#Das Feld "feldname" ist nicht definiert.#off("i")# Das angegebene Feld ist nicht vorhanden. 8.5 Funktionen in Ausdrücken Für Ausdrücke bei den in diesem Kapitel beschriebenen Prozeduren sind einfache Funktionen zur Abfrage von Feldinhalten vorhanden. Mit 'f' kann der Inhalt eines benannten Feldes erfragt werden, bei 'wert' wird der Inhalt erst in eine REAL-Zahl umgewandelt, wobei nichtnumerische Zeichen ignoriert werden. Die Prozedur 'textdarstellung' kann dazu verwendet werden, den Wert einer TEXT-Variablen als TEXT-Denoter in ELAN-Syntax darzustellen. Die Prozedur 'zahltext' kann dazu verwendet werden, aus einer REAL-Zahl einen mit der richtigen Zahl von Nachkommastellen ver­ sehenen, variabel langen Text zu machen. TEXT PROC f (TEXT CONST feldname) Liefert den Inhalt des angegebenen Feldes. FEHLER: #f1# #on("i")#Das Feld "feldname" ist nicht definiert.#off("i")# REAL PROC wert (TEXT CONST feldname) Liefert den Inhalt des angegebenen Feldes als REAL. Dabei werden nichtnumerische Zeichen ignoriert, ausgenommen das Minuszeichen und das eingestellte Dezimalkomma (s. 'dezimal­ komma'). Tritt kein numerisches Zeichen auf, wird der Wert 0.0 geliefert. FEHLER: #f1# #on("i")#Das Feld "feldname" ist nicht definiert.#off("i")# REAL PROC wert (TEXT CONST feldname, INT CONST kommastellen) Wie 'wert' mit einem Parameter, nur daß das Ergebnis auf die angegebene Anzahl von Nachkommastellen gerundet wird. FEHLER: #f1# #on("i")#Das Feld "feldname" ist nicht definiert.#off("i")# TEXT PROC textdarstellung (TEXT CONST anzeigetext) Liefert 'anzeigetext' als TEXT-Denoter, also in Anführungs­ strichen. Anführungsstriche im Text werden dabei verdoppelt. Steuerzeichen von 0 bis 31 werden in lesbare Form gebracht. TEXT PROC zahltext (REAL CONST wert, INT CONST kommastellen) Liefert den Text des angegebenen Werts mit dem eingestellten Dezimalkomma und mit der angegebenen Zahl von Nachkomma­ stellen. Sind die Kommastellen 0, wird auch das Komma unter­ drückt. Der Text erhält soviel Stellen, wie zur Darstellung benötigt werden. TEXT PROC zahltext (TEXT CONST feldname, INT CONST kommastellen) Wirkt wie 'zahltext (wert (feldname), kommastellen)'.