summaryrefslogtreecommitdiff
path: root/app/eudas/4.3/doc/eudas.hdb.11
blob: 6a59847ccf4c84ab0f489d3b77b6634724bec3ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
#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).