#limit (11.0)##pagelength (16.5)##block# #start (2.0,0.0)# #page (109)# #headodd# #center#EUDAS#right#% #end# #headeven# %#center#EUDAS #end# #center#1 11 Funktionen zur Bearbeitung 11.1 Sortieren Wenn Sie die Sätze in Ihrer EUDAS-Datei in einer bestimmten Rei­ henfolge haben wollen (dies wird in vielen Fällen zum Drucken verlangt), müssen Sie die Datei sortieren. Sie können EUDAS ange­ ben, in welcher Reihenfolge die Sortierung erfolgen soll. Um die aktuelle Datei zu sortieren, rufen Sie die Funktion #free (0.2)# Akt. Datei S Sortieren #free (0.2)# auf. Falls die Datei noch nie sortiert wurde, wird Ihnen auf jeden Fall die Sortierreihenfolge zum Auswählen angeboten. Anderenfalls werden Sie gefragt, ob Sie die vorherige Sortierreihenfolge ändern wollen. Das Sortieren wird als Veränderung betrachtet und nur auf der Arbeitskopie durchgeführt! #on("b")#Sortierreihenfolge#off("b")# Die Sortierreihenfolge gibt an, welche Felder in welcher Reihenfolge beim Vergleichen zweier Sätze benutzt werden sollen. Zuerst wird das an erster Stelle angegebene Feld verglichen. Sind die Inhalte hier unterschiedlich, wird die Einordnung der Sätze nach diesem Feld bestimmt. Sind die Inhalte in diesem Feld aber gleich, so wird nach dem nächsten Feld verglichen. Ist kein weiteres Feld in der Sortierrei­ henfolge angegeben, wird der Vergleich an dieser Stelle mit einem zufälligen Ergebnis abgebrochen, das heißt, es kann nicht vorher­ gesagt werden, welcher der beiden Sätze zuerst kommt. Die Sortierreihenfolge können Sie in einer Menüauswahl einge­ ben. Kreuzen Sie die Felder an, die Sie vergleichen wollen und ach­ ten Sie auf die richtige Reihenfolge. Die eingegebene Reihenfolge wird in der Datei gespeichert, um beim nächsten Sortiervorgang wiederverwendet zu werden. Nachdem Sie alle bei der Sortierung zu berücksichtigenden angekreuzt haben, werden Sie für jedes dieser Felder gefragt, ob nach dem Feld aufsteigend oder absteigend sortiert werden soll. #on("b")#Ablauf#off("b")# Der Ablauf des Sortierens wird durch Ausgabe von Satz­ nummern dargestellt. Bis zur ausgegebenen Satznummer sind alle Sätze richtig sortiert. Bei Bedarf kann der Vorgang durch SV und dann 'halt' abgebrochen werden. Die Datei bleibt dabei auf jeden Fall intakt. #on("b")#Optimierung#off("b")# Die gespeicherte Sortierreihenfolge wird auch noch zu einer weiteren Optimierung benutzt. Wenn eine Datei sortiert war und nur wenige Änderungen stattgefunden haben, brauchen beim nächsten Sortiervorgang nur die wenigen veränderten Sätze einzeln einsortiert zu werden. Das funktioniert natürlich nur unter der Voraussetzung, daß die gleiche Sortierreihenfolge gewählt wird. Das Sortieren braucht in diesem Fall erheblich weniger Zeit. #on("b")#Probleme#off("b")# Normalerweise werden die einzelnen Felder nach dem EUMEL-Zeichencode verglichen. Das bedeutet, daß sich die Reihen­ folge der Zeichen nach dem EUMEL-Zeichencode richtet. Ein Zeichen mit einem höheren Code wird also vor einem Zeichen mit einem niedrigeren Code einsortiert. In manchen Fällen ergeben sich mit diesem Vergleichsverfahren aber auch Schwierigkeiten. Wenn in einem Feld Zahlen oder DM- Beträge stehen, führt die Methode zu falschen Ergebnissen. Die '10' wird zum Beispiel vor der '2' einsortiert. Warum? Texte werden immer linksbündig geschrieben und verglichen. Bei Zahlen richtet sich die Wertigkeit jedoch nach dem Abstand vom Komma. Da bei Texten zuerst das erste Zeichen verglichen wird, ent­ steht hier durch Vergleich von '1' und '2' der Eindruck, die '10' käme vor der '2'. Korrigieren könnte man dies, indem man ein Leer­ zeichen vor die '2' schreibt. Wenn also die (nicht geschriebenen) Dezimalkommata direkt untereinanderstehen, werden Zahlen richtig verglichen. #on("b")#Typ ZAHL#off("b")# EUDAS hat jedoch eine bequemere Art, dieses Problem zu behandeln. Ein Feld, das Zahlen enthalten soll, bekommt einen spe­ ziellen Typ ZAHL zugewiesen, der zu einer richtigen Sortierung führt. Bei Feldern vom Typ ZAHL ignoriert EUDAS bei Vergleichen alle nichtnumerischen Zeichen und vergleicht den Wert der Zahl. So können Sie zum Beispiel in einem Satz '2,50 DM' und im anderen Satz '10 DM' eintragen - EUDAS kann jetzt die richtige Reihenfolge feststellen. Übrigens: falls Sie numerische Werte lieber mit einem Dezi­ malpunkt statt einem Dezimalkomma schreiben, können Sie EUDAS das mit dem ELAN-Kommando dezimalkomma (".") mitteilen. Wenn Sie ein solches Kommando eingeben wollen, können Sie im EUDAS-Menü ESC ESC drücken. In der Statuszeile erscheint dann die Aufforderung: Gib Kommando: Hier können Sie wie im Editor oder im EUMEL-Monitor ein beliebiges Kommando eingeben und ausführen. Die Normaleinstellung für das Dezimalkomma erreichen Sie wieder durch das Kommando dezimalkomma (",") #on("b")#Typ ändern#off("b")# Die Feldtypen sind eine permanente Eigenschaft einer EUDAS-Datei. Beim Einrichten einer neuen Datei wird zunächst der Standardtyp für alle Felder genommen. Sie erhalten jedoch Gelegen­ heit, abweichende Feldtypen zu vergeben, wenn Sie die Frage ___________________________________________________________________________________________ Feldnamen oder Feldtypen ändern (j/n) ? ___________________________________________________________________________________________ bejahen. Auch nachträglich können Sie die Feldtypen noch ändern. Dies geschieht mit der Funktion #free (0.2)# F Feldstrukt. #free (0.2)# im Menü 'Öffnen'. Zunächst werden Sie gefragt, ob Sie noch weitere Feldnamen anfügen wollen. So könnten Sie die Datei um weitere Felder ergänzen, die bei allen Sätzen zunächst leer sind. Die neuen Felder müssen Sie wie beim Einrichten der Datei untereinander im Editor schreiben. Als zweites erscheint dann die gleiche Frage wie oben. Wenn Sie diese bejahen, wird Ihnen eine Auswahl der zu ändernden Fel­ der mit Feldnamen und den zugehörigen Feldtypen angeboten. Kreu­ zen Sie hier die Felder an, deren Feldtypen Sie ändern möchten. Da Sie mit dieser Funktion sowohl Feldnamen als auch Feld­ typen verändern können, wird Ihnen für jedes Feld zunächst der Name zum Ändern angeboten. Sie können den Namen korrigieren oder überschreiben. Die Namensänderung hat jedoch keine Auswirkung auf den Feldinhalt! Wenn Sie den Namen nicht ändern wollen, drücken Sie einfach RETURN. Anschließend können Sie für das Feld den neuen Feldtyp angeben. Tippen Sie einen der vier Feldtypen als Text ein und drücken Sie RETURN. Anschließend hat das Feld einen neuen Typ. Die verschiedenen möglichen Typen werden jetzt genau erklärt. #on("b")#Feldtypen#off("b")# TEXT ist der Standardtyp, der die Feldinhalte nach EUMEL-Zeichencode vergleicht. Den Typ ZAHL hatten wir schon weiter oben kennengelernt. Daneben gibt es noch den Typ DATUM. Dieser Typ vergleicht Daten der Form 'tt.mm.jj'. Soll ein sol­ ches Datum richtig einsortiert werden, müßte es anderenfalls in der Reihenfolge umgedreht werden (also 'jj.mm.tt'). Dies ist aber nicht nötig, wenn das Feld den Typ DATUM bekommt. Beachten Sie, daß alle Inhalte, die nicht die beschriebene Form haben, als gleich be­ trachtet werden. Der letzte Typ ist DIN. Dabei werden Texte nach DIN 5007 ver­ glichen. Das bedeutet, daß Groß- und Kleinbuchstaben als gleich angesehen werden, daß alle nichtalphabetischen Zeichen ignoriert werden und die Umlaute ihren richtigen Platz bekommen (Umlaute werden in normalen Texten hinter allen anderen Zeichen einsor­ tiert). Da hierfür ein relativ großer Zeitaufwand notwendig ist, sollte dieser Typ nur dann gewählt werden, wenn er erforderlich ist. Den schnellsten Vergleich ermöglicht der Typ TEXT. #on("b")#Hinweis#off("b")# Beachten Sie, daß mit der Vergabe von Feldtypen keine Überprüfung der Eingabe verbunden ist. Insbesondere beim Datum wird nicht geprüft, ob die Form 'tt.mm.jj' eingehalten wurde. Wollen Sie solche Überprüfungen vornehmen, lesen Sie bitte Abschnitt 11.3. 11.2 Kopieren In diesem Abschnitt sollen Sie erfahren, wie Sie eine EUDAS-Datei #on("i")#kopieren#off("i")# können. Diese Funktion kann nicht nur ein inhaltsgleiches Duplikat einer EUDAS-Datei herstellen (dies könnten Sie einfacher durch eine logische Kopie bewerkstelligen, s. 16.1), sondern auch komplizierte Umstrukturierungen vornehmen. #on("b")#Kopiermuster#off("b")# Der Schlüssel zu dieser Leistungsfähigkeit ist das #on("i")#Kopiermuster#off("i")#. Wie beim Druckmuster legen Sie dadurch die genauen Auswirkungen der Funktion fest. Für jedes Feld in der Zieldatei, in die kopiert werden soll, enthält das Kopiermuster die Angabe, woraus der Inhalt dieses Feldes entstehen soll. Durch Auswahl und Reihenfolge dieser Anga­ ben bestimmen Sie die Struktur der Zieldatei. Im einfachsten Fall sieht die Kopieranweisung für ein Feld wie folgt aus: "Feldname" K f ("Feldname"); Das 'K' dient zur Festlegung der Kopierfunktion. Auf der linken Seite steht in Anführungsstrichen der Name des Zielfeldes. Der Ausdruck auf der rechten Seite gibt den zukünftigen Inhalt des Feldes an. Der Ausdruck im obigen Beispiel steht einfach für den Inhalt des Feldes 'Feldname' in der aktuellen Datei. Das Semikolon am Ende dient zur Abgrenzung, da der ganze Ausdruck auch mehrere Zeilen lang sein darf. In der oben genannten Form würde das Feld 'Feldname' iden­ tisch in die Zieldatei kopiert. Weitere Möglichkeiten besprechen wir später. #on("b")#Feldreihenfolge#off("b")# Zunächst wollen wir uns damit befassen, wie Sie die Feldreihenfolge in der Zieldatei beeinflussen können. Dies ge­ schieht einfach dadurch, daß Sie die Kopieranweisungen in der ge­ wünschten Reihenfolge aufschreiben. Damit können wir bereits ein erstes komplettes Beispiel betrachten: "Name" K f ("Name"); "Vorname" K f ("Vorname"); "PLZ" K f ("PLZ"); "Ort" K f ("Ort"); "Strasse" K f ("Strasse"); "m/w" K f ("m/w"); Dieses Kopiermuster würde die bereits beschriebene Adressendatei identisch kopieren, da alle Felder in der gleichen Reihenfolge vor­ kommen. Wenn Sie jedoch die Feldreihenfolge ändern wollen (um zum Beispiel ein anderes Feld als erstes zu optimieren), brauchen Sie bloß die Reihenfolge im Kopiermuster zu verändern: "Ort" K f ("Ort"); "Name" K f ("Name"); "Vorname" K f ("Vorname"); "PLZ" K f ("PLZ"); "Strasse" K f ("Strasse"); "m/w" K f ("m/w"); Im Gegensatz zur Auswahl der Feldreihenfolge für die Anzeige än­ dern Sie so die Feldreihenfolge für die Zieldatei permanent. #on("b")#Felder anfügen#off("b")# Die beiden angegebenen Kopiermuster haben jedoch nur dann die beschriebene Wirkung, wenn die Zieldatei noch nicht existert. Bei einer existierenden Datei kann die Feldreihenfolge nicht mehr geändert werden; daher hat die Reihenfolge der Kopier­ anweisungen dann keine Wirkung. Sie können jedoch zu einer existierenden Zieldatei noch Felder hinzufügen. EUDAS verwendet nämlich folgende einfache Vorschrift: #limit (12.0)# Wenn als Zielfeld in einer Kopieranweisung ein Feld genannt wird, das in der Zieldatei noch nicht vorkommt, wird es als weiteres Feld der Zieldatei hinzugefügt. #limit (13.5)# Diese Strategie hat im Fall der nicht existierenden Datei zur Folge, daß alle Felder neu sind und in der Reihenfolge ihres Auftretens eingerichtet werden. Existiert die Datei schon, werden zusätzliche Felder am Ende angefügt. Beachten Sie, daß zusätzliche Felder für eine existierende Datei nur in den neu hinzukopierten Sätzen gefüllt sind. In den alten Sätzen bleiben alle neuen Felder einfach leer. #on("b")#Satzauswahl#off("b")# An dieser Stelle sollte erwähnt werden, daß wie bei allen Funktionen, die die gesamte Datei betreffen, nur die durch die Suchbedingung ausgewählten Sätze kopiert werden. Ist mindestens ein Satz markiert, werden nur die markierten Sätze kopiert und die Suchbedingung ignoriert. #on("b")#Teildatei#off("b")# Jetzt können Sie auch die zweite wichtige Aufgabe des Kopierens verstehen. Sie können aus einer Datei einen Teil der Sätze und einen Teil der Felder #on("i")#herausziehen#off("i")#. Danach haben Sie unter Umständen eine wesentlich kleinere Datei, die sich auch schneller bearbeiten läßt. Gerade wenn Sie nicht den allerneuesten 64-Bit-Supercomputer haben, können Sie so viel Zeit sparen, wenn Sie wiederholt nur mit einem Teil der Datei arbeiten müssen. Die Auswahl der Sätze für einen solchen Zweck erfolgt über ein Suchmuster; im Kopiermuster geben Sie dann nur die gewünschten Felder an. #on("b")#Aufruf#off("b")# An dieser Stelle wollen wir jetzt endlich behandeln, wie Sie die Kopierfunktion aufrufen. Dazu gibt es die Auswahl #free (0.2)# Satzauswahl K Kopieren #free (0.2)# im Menü "Gesamtdatei". Als erstes werden Sie nach dem Namen der Zieldatei gefragt. Existiert die Zieldatei schon und war sie vorher sortiert, werden Sie gefragt, ob Sie die Datei zum Schluß wieder sortieren wollen. Wie immer beim Sortieren werden auch hier gege­ benenfalls nur die neu hinzugekommenen Sätze einsortiert. Als nächstes müssen Sie den Namen des Kopiermusters angeben. Da das Kopiermuster eine normale Textdatei ist, können Sie sich einen beliebigen Namen ausdenken, unter dem das Muster dann gespeichert wird. Wollen Sie das Kopiermuster nicht aufbewahren, sondern nur einmal verwenden, brauchen Sie keinen Namen anzugeben. Drücken Sie einfach RETURN und für die Dauer des Kopierens wird das Kopiermuster als unbenannte Datei eingerichtet. Nachdem Sie den Namen des Kopiermusters eingegeben haben, gelangen Sie in den Editor, wo Sie das Muster ändern können. Damit Sie beim ersten Mal nicht so viel tippen müssen, bietet EUDAS Ihnen bei einer neuen Musterdatei ein #on("i")#Standard-Kopiermuster#off("i")# zum Ändern an. Das Aussehen des Standard-Kopiermusters richtet sich danach, ob die Zieldatei schon existiert oder nicht. Existiert die Zieldatei noch nicht, so werden im Standard- Kopiermuster alle Felder der Ausgangsdatei in ihrer originalen Rei­ henfolge angegeben. Wenn Sie dieses Muster nicht noch ändern, wird die aktuelle Datei identisch kopiert. Sie können jedoch die Feldreihenfolge verändern oder Felder weglassen, indem Sie einfach die entsprechenden Zeilen vertauschen oder löschen. Für Umbenennungen überschreiben Sie einfach den Namen auf der linken Seite der Kopieranweisung. So können Sie das Kopiermuster mit geringstem Aufwand erstellen. Existiert die Zieldatei jedoch schon, werden Ihnen im Kopier­ muster alle Felder der Zieldatei angeboten. Bei Feldern, die in der aktuellen Datei nicht vorkommen, erscheint folgende Anweisung: "Anrede" K ""; Obwohl die Anweisung in diesem Fall keine Wirkung hat (wenn man sie wegließe, würde das Feld ebenfalls leer bleiben), ist sie dennoch aufgeführt, damit Sie auf der rechten Seite einen entsprechenden Ausdruck einsetzen können. Bei den angebotenen Anweisungen hat eine Änderung der Rei­ henfolge oder eines Feldnamens keinen Sinn, da diese Felder ja alle bereits existieren. Jedoch können Sie die Ausdrücke auf der rechten Seite variieren und neue Anweisungen (Felder) hinzufügen. #on("b")#Ablauf#off("b")# Wenn Sie die Eingabe des Kopiermusters mit ESC 'q' verlas­ sen, wird das Kopiermuster übersetzt. Dabei können Fehlermeldun­ gen auftreten. Sie können dann die Fehler korrigieren, wobei Sie die Fehlermeldungen gleichzeitig auf dem Bildschirm sehen können. War das Kopiermuster korrekt, werden alle ausgewählten (bzw. markier­ ten) Sätze der aktuellen Datei in die Zieldatei kopiert und diese anschließend gegebenenfalls noch sortiert. Die kopierten Sätze werden jeweils am Ende der Zieldatei ange­ fügt. War die Zieldatei vorher schon sortiert, können Sie angeben, daß die neuen Sätze zum Schluß noch einsortiert werden. Anderen­ falls können Sie die Datei anschließend mit der Funktion 'Sortieren' sortieren. #on("b")#ELAN-Ausdrücke#off("b")# Wenn Sie schon einmal programmiert haben, wird Ihnen vielleicht aufgefallen sein, daß ein Kopiermuster einem ELAN-Programm verdächtig ähnlich sieht. Diese Vermutung trügt Sie nicht. Dies läßt den Schluß zu, daß Sie noch mehr ELAN hier an­ bringen können. Haben Sie noch nie programmiert, sollten Sie jetzt nicht in Panik geraten, denn das Wichtigste dieses Abschnitts haben Sie bereits gelernt. Vielleicht sind Ihnen die folgenden Beispiele bereits ganz nützlich. Um alle Möglichkeiten auszunutzen, sollten Sie sich aber irgendwann (später!) mit den Kapiteln 14 und 15 befassen, in denen Sie Genaueres erfahren. Zunächst sei festgestellt, daß der rechte Teil einer Kopieran­ weisung ein beliebiger ELAN-Ausdruck sein kann, der einen TEXT liefert. Den wichtigsten Ausdruck kennen Sie bereits: f ("Feldname") liefert den Inhalt des Feldes 'Feldname' des aktuellen Satzes der aktuellen Datei. Gibt es das Feld nicht, erscheint eine Fehlermel­ dung bei der Ausführung. Sie können jedoch auch einen konstanten Text angeben, der dann für alle Sätze gleich ist. Dazu schließen Sie den Text einfach in Anführungsstriche ein. Die folgende Kopieranweisung dient dazu, ein neues Feld einzurichten, das aber vorläufig noch leer bleiben soll: "Feldname" K ""; Ebenso können Sie mehrere Felder zu einem neuen verbinden, zum Beispiel: "Wohnort" K f ("PLZ") + " " + f ("Ort"); Das Pluszeichen kennzeichnet die Aneinanderreihung von zwei Tex­ ten. Denken Sie auch immer an das Semikolon am Ende. In gleicher Weise können Sie viele andere Textfunktionen verwenden, die in Kapitel 14 beschrieben sind. Prinzipiell können Sie auch Bedingungen mit IF abfragen, wie zum Beispiel in der folgenden Übersetzung: IF f ("m/w") = "w" THEN "Anrede" K "Frau" ELSE "Anrede" K "Herr" END IF; Auf diese Weise können Sie Kodierungen verschiedenster Art auto­ matisch umsetzen. Sie müssen hierbei jedoch unbedingt darauf ach­ ten, daß innerhalb der IF-Konstruktion immer eine Kopieranweisung ausgeführt wird. Falls nämlich kein Fall zutrifft und für ein Feld keine Kopieranweisung ausgeführt wird, wird das Feld bei einer neuen Datei auch nicht richtig eingerichtet. 11.3 Tragen In Kapitel 6 hatten Sie gesehen, wie man einzelne Sätze aus der aktuellen Datei in eine andere trägt, und auch, wie man sie wieder zurückholen kann. Diese Funktion diente im wesentlichen dazu, nicht mehr benötigte Sätze zu entfernen. Sie haben aber auch die Möglichkeit, eine ganze Reihe von Sätzen in einem Arbeitsgang zu tragen, nämlich alle durch das Suchmuster ausgewählten beziehungsweise alle markierten Sätze. Diese Funktion dient ebenfalls dazu, Sätze zu entfernen, beispiels­ weise alle Sätze, die vor einem gewissen Stichtag liegen. Als wei­ tere Anwendung können Sie beim Tragen aber auch Bedingungen überprüfen. Diese #on("i")#Prüfbedingungen#off("i")# sollen sicherstellen, daß die Daten in einer Datei ganz bestimmten Richtlinien entsprechen. Zum Beispiel kann geprüft werden, ob ein eingegebenen Datum stimmen kann, ob ein Satz doppelt aufgenommen wurde oder ob eine Artikelnummer die richtige Anzahl von Stellen hat. Die Prüfbedingungen werden einer Datei fest zugeordnet. Sie können mit der Funktion #free (0.2)# P Prüfbed. #free (0.2)# im Menü 'Öffnen' eingegeben oder geändert werden. Die Prüfbedin­ gungen werden als Text im Editor geschrieben. #on("b")#Ablauf#off("b")# Das ganze Verfahren läuft nun so ab: Sie fügen neue Sätze immer erst in eine Zwischendatei ein, die die gleiche Struktur wie die eigentliche Datei hat. Wenn Sie alle Sätze fertig eingegeben haben, tragen Sie diese Datei komplett in die gewünschte Datei. Dabei werden die Prüfbedingungen getestet. Erfüllt ein Satz die Bedingungen, wird er anstandslos getragen. Trifft eine Bedingung aber nicht zu, bleibt der Satz in der Zwi­ schendatei und eine entsprechende Meldung wird ausgegeben. Die Meldungen werden gespeichert, um Sie später nochmal abrufen zu können. Sie müssen jetzt in der Zwischendatei die notwendigen Ände­ rungen durchführen, damit die Prüfbedingungen erfüllt werden. Beim Aufruf der Funktion #free (0.2)# A Ändern #free (0.2)# können Sie mit Hilfe der Tastenkombination ESC 'P' (großes P) die Datei mit den Fehlermeldungen in einem kleinen Teilfenster editie­ ren. Anhand dieser Hinweise können Sie dann den Satz korrigieren. Die Meldungen bleiben bis zum nächsten Öffnen oder Tragen erhal­ ten. Nach der Korrektur können Sie den gleichen Vorgang erneut aufrufen - es sind ja nur noch die zuerst fehlerhaften Sätze in der Zwischendatei. Bei Bedarf können Sie diesen Vorgang wiederholen, bis alle Sätze korrekt übernommen worden sind. #on("b")#Aufruf#off("b")# Das Tragen wird aufgerufen durch die Funktion #free (0.2)# Satzauswahl T Tragen #free (0.2)# Nach Eingabe des Zieldateinamens müssen Sie noch angeben, ob Sie die Prüfbedingungen testen wollen. #on("b")#Prüfbedingungen#off("b")# Zu diskutieren bleibt noch die Form der Prüfbe­ dingungen. Diese stellen ein kleines ELAN-Programm dar, in dem einige spezielle Prozeduren zum Prüfen enthalten sind. Wenn Sie nicht ELAN programmieren können, sollte Sie diese Bemerkung nicht erschrecken: die Prüfbedingungen sind einfach genug. Sie schreiben also die Prüfbedingungen jeweils untereinander. Eine mögliche Bedingung ist wertemenge ("Feldname", "Wert1,Wert2,Wert3,Wert4"); Diese Bedingung gibt an, daß das Feld einen der angegebenen Werte haben muß. Die Werte werden untereinander durch Komma getrennt. Es gibt jedoch keine Möglichkeit, Werte mit Komma darzustellen, da das Komma immer als Trennung wirkt. Leerzeichen dürfen in den Werten vorkommen, sie müssen dann aber auch genau so im Feld stehen. Wir könnten zum Beispiel eine Bedingung für unser Feld 'm/w' wie folgt formulieren wertemenge ("m/w", "m,w"); EUDAS würde sich dann beschweren, wenn das Feld leer wäre (ir­ gendein Geschlecht muß die Person ja wohl haben). Wenn das Feld auch leer sein darf, geben Sie einfach zwei Kommata hintereinander oder ein Komma am Anfang an: wertemenge ("m/w", ",m,w"); Eine andere Möglichkeit der Prüfbedingung besteht darin, eine Maske für ein Feld zu definieren. Diese Maske gibt an, daß an be­ stimmten Stellen des Feldes nur bestimmte Zeichen stehen dürfen. So könnte man zum Beispiel folgende Maske für ein Datumsfeld angeben: feldmaske ("Datum", "99.99.99"); Die Neunen haben hier eine spezielle Bedeutung und und stehen für eine beliebige Ziffer. Es gibt noch einige weitere Zeichen, die eine reservierte Bedeutung haben, nämlich: '9' für jede Ziffer (wie schon erwähnt) 'X' für jedes Zeichen 'A' für jeden Großbuchstaben 'a' für jeden Kleinbuchstaben '*' für eine Folge beliebiger Zeichen Alle anderen Zeichen im Muster stehen für sich selbst. Eine Sonder­ stellung besitzt der Stern; er sollte sparsam verwendet werden, da seine Benutzung etwas aufwendiger ist. Der Stern kann auch für eine leere Zeichenfolge stehen. Als weiteres Beispiel könnte man definieren feldmaske ("Name", "A*"); damit immer ein Name angegeben ist, der noch dazu mit einem Groß­ buchstaben beginnt. Für Bedingungen, die sich nicht mit diesen beiden Prozeduren formulieren lassen, gibt es noch pruefe ("Feldname", Bedingung); Diese Prozedur erhält einen logischen (booleschen) Wert als Parame­ ter, der einen Vergleich darstellt. Ist dieser Parameter falsch (FALSE), wird eine entsprechende Fehlermeldung protokolliert. So könnte man folgende Bedingung angeben: pruefe ("Alter", wert ("Alter") > 18.0); Diese Bedingung würde sicherstellen, daß alle Personen in der Datei volljährig sind ('wert' ist eine von EUDAS definierte Funktion, die den Inhalt eines Feldes als REAL-Zahl liefert - denken Sie auch daran, daß der ELAN-Compiler Zahlen mit Dezimalpunkt geschrieben haben möchte). Da die Prüfbedingungen ein ELAN-Programm sind, können Sie natürlich sämtliche ELAN-Anweisungen verwenden. Weiterhin haben Sie die Möglichkeit, Doppeleinträge zu verhin­ dern. Dazu geben Sie mit Hilfe der Prozedur eindeutige felder (n); wieviele Felder vom ersten an eindeutig sein sollen. Ein zu tragen­ der Satz, der mit irgendeinem anderen Satz in diesen Feldern über­ einstimmt, wird als fehlerhaft zurückgewiesen. In unserer Adressen­ datei könnte man eindeutige felder (2); angeben. Damit würde ein neuer Satz mit bereits vorhandenem Na­ men und Vornamen abgelehnt. #on("b")#Limit#off("b")# Aus technischen Gründen können die Prüfbedingungen einer Datei nur 2000 Zeichen umfassen. Wollen Sie aufwendigere Bedin­ gungen konstruieren, sollten Sie sich diese als Prozedur definieren und insertieren. In den Prüfbedingungen müssen Sie dann nur diese Prozedur aufrufen. 11.4 Automatische Änderungen Mit EUDAS können Sie die geöffnete Datei nicht nur satzweise von Hand ändern, sondern auch automatisch die ganze Datei. Dazu müs­ sen Sie dem Rechner eine Vorschrift geben, nach der er handeln kann. Ein solches #on("i")#Änderungsmuster#off("i")# stellt im Prinzip schon ein klei­ nes Programm dar. Der Änderungsvorgang wird durch die Auswahl #free (0.2)# V Verändern #free (0.2)# aufgerufen. Dabei wird der Name des Änderungsmusters erfragt. Dies ist eine normale Textdatei. Existiert das Muster noch nicht, können Sie den Inhalt an dieser Stelle im Editor angeben. Anschließend werden alle ausgewählten Sätze nach der Vorschrift bearbeitet. Dabei wird jeweils die aktuelle Satznummer ausgegeben. #on("b")#Änderungsmuster#off("b")# Da auch ein Kopiermuster ein Programm ist, ist es nicht erstaunlich, daß Änderungsmuster ganz ähnlich aussehen. Eine typische Zeile sieht etwa so aus: "Feldname" V "neuer Inhalt"; Diese Zeile bedeutet: Ersetze den Inhalt des Feldes 'Feldname' durch den Text 'neuer Inhalt'. Anstelle des neuen Textes kann wieder ein beliebiger ELAN-Ausdruck stehen. Ein Beispiel, in dem ein Feld einen Stern angehängt bekommt, sieht dann so aus: "Feldname" V f ("Feldname") + "*"; Beachten Sie, daß Sie den Ausdruck auf der rechten Seite eventuell in Klammern setzen müssen (obwohl der Operator 'V' die niedrigste Priorität hat). Wenn Sie sich nicht sicher sind, können Sie den Aus­ druck immer in Klammern einschließen. Ebenso wie im Kopiermuster können Sie hier beliebige ELAN- Ausdrücke verwenden. Auch IF-Abfragen und ähnliche Konstruktio­ nen sind möglich, im Gegensatz zum Kopiermuster sogar ohne Be­ schränkungen. Im Vergleich zu einem separat geschriebenen ELAN-Programm hat das Änderungsmuster den Vorteil, daß Sie nur die eigentlichen Veränderungsanweisungen kodieren müssen. Die wiederholte Anwen­ dung auf die ausgewählten Sätze erledigt EUDAS automatisch. Wol­ len Sie eine solche Änderungsanweisung fest insertieren, so brau­ chen Sie das Muster nur in eine Prozedur zu verpacken und EUDAS zu übergeben (Näheres s. Referenzhandbuch).