summaryrefslogtreecommitdiff
path: root/app/eudas/4.4/doc/ref-manual/eudas.ref.6
blob: 92c76105ff7d7f016a389f4e51d0ce84c90d9912 (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
#type ("prop")##limit (14.0)# 
#format# 
#page (61)# 
#kapitel ("6","Struktur","von","EUDAS-Dateien")# 
 
 
 
EUDAS-Dateien können unabhängig von EUDAS über den Daten­
typ EUDAT manipuliert werden. Die zur Verfügung stehenden Zu­
griffsoperationen sind in diesem Kapitel beschrieben. 
    Der Datentyp EUDAT ist analog zum Datentyp FILE. Jede
EUDAT-Variable kann an eine EUDAS-Datei angekoppelt werden.
Dadurch lassen sich beliebig viele EUDAS-Dateien gleichzeitig be­
arbeiten. Wie der Abschnitt 6.6 zeigt, sind so auch ganz andere
Anwendungen realisierbar. 
    Die wesentlichen EUDAS-Funktionen (Ansehen, Suchen, Druk­
ken) können jedoch nicht direkt auf EUDAT-Variablen angewendet
werden, sondern greifen auf die virtuelle Datei zu, die im nächsten
Kapitel beschreiben wird. 
 
 
#abschnitt ("6.1", "DER DATENTYP SATZ", "Der Datentyp SATZ")# 
 
Der Datentyp SATZ stellt einen einzelnen EUDAS-Satz dar, der
intern als TEXT realisiert ist. Ein SATZ besteht aus bis zu 256
Feldern, die jeweils einen TEXT enthalten können. Nach dem Initi­
alisieren sind alle Felder mit "" vorbelegt. Die Felder können über
Nummern von 1 bis 256 angesprochen werden. 
    Damit kann man sich einen SATZ als dynamisches ROW n TEXT
vorstellen, das bis zu 256 Elemente haben kann. Anders als ein
entsprechendes ROW belegt ein leerer SATZ praktisch keinen Spei­
cherplatz. 
    Folgende Zugriffsprozeduren stehen zur Verfügung: 
 
#proc# 
TYPE SATZ 
 
OP := (SATZ VAR, SATZ CONST) 
 
PROC satz initialisieren (SATZ VAR) 
#endproc# 
    Jeder SATZ muß vor Benutzung initialisiert werden. 
 
#proc# 
INT PROC felderzahl (SATZ CONST) 
#endproc# 
    Liefert die Nummer des höchsten belegten Feldes. 
 
#proc# 
PROC feld lesen (SATZ CONST, INT CONST feldnr, 
                 TEXT VAR inhalt) 
#endproc# 
    Liest den Inhalt des Feldes 'feldnr' in 'inhalt'. 
#f2# 
    FEHLER: 
#f2# 
    #on("i")#n ist keine Feldnummer#off("i")# 
    'n' liegt außerhalb des Bereiches 1..256. 
 
#proc# 
PROC feld bearbeiten (SATZ CONST, INT CONST feldnr, 
     PROC (TEXT CONST, INT CONST, INT CONST) bearbeite) 
#endproc# 
    Ruft 'bearbeite' auf, wobei 'bearbeite' ein Text und zwei Posi­
    tionen in diesem Text übergeben werden. Die Positionen geben
    das erste und das letzte Zeichen des durch 'feldnr' ausgewähl­
    ten Feldes an. Ist der Anfang größer als das Ende, so ist das
    Feld leer. 
#f2# 
    FEHLER: 
#f2# 
    #on("i")#n ist keine Feldnummer#off("i")# 
    'n' liegt außerhalb des Bereiches 1..256. 
 
#proc# 
PROC feld aendern (SATZ VAR, INT CONST feldnr, 
                   TEXT CONST inhalt) 
#endproc# 
    Schreibt 'inhalt' in das Feld mit der Nummer 'feldnr' 
#f2# 
    FEHLER: 
#f2# 
    #on("i")#n ist keine Feldnummer#off("i")# 
    'n' liegt außerhalb des Bereiches 1..256. 
 
#proc# 
INT PROC feldindex (SATZ CONST, TEXT CONST muster) 
#endproc# 
    Falls eines der Felder 'muster' enthält, wird die Nummer dieses
    Feldes geliefert, sonst 0. 
 
 
#abschnitt ("6.2","DER DATENTYP EUDAT","Der Datentyp EUDAT")# 
 
Der Datentyp EUDAT muß ähnlich wie ein FILE an einen benann­
ten oder unbenannten Datenraum angekoppelt werden. Der Daten­
raum hat anschließend den Typ 3243. Weitere Zugriffe auf eine
EUDAT-Variable sind erst nach erfolgtem Ankoppeln zulässig. An­
derenfalls können undefinierte Fehler entstehen. 
 
#proc# 
TYPE EUDAT 
 
PROC oeffne (EUDAT VAR, TEXT CONST dateiname) 
#endproc# 
    Koppelt die EUDAT-Variable an die EUDAS-Datei mit dem
    Namen 'dateiname' an. Die Datei wird eingerichtet, falls sie
    noch nicht existiert. 
#f2# 
    FEHLER: 
#f2# 
    #on("i")#Datei ist keine EUDAS-Datei#off("i")# 
    Die angegebene Datei hat nicht den Typ 3243. 
 
#proc# 
PROC oeffne (EUDAT VAR, DATASPACE CONST ds) 
#endproc# 
    Koppelt die EUDAT-Variable an den Datenraum 'ds'. 
#f2# 
    FEHLER: 
#f2# 
    #on("i")#Datei ist keine EUDAS-Datei#off("i")# 
    Der Datenraum wurde bereits verwendet und hat nicht den Typ
    3243. 
 
Eine EUDAS-Datei ist in Felder und Sätze unterteilt. Die Felder
werden beim Zugriff über Nummern angesprochen. Jedem Feld ist
jedoch zur Identifikation ein TEXT als Feldname zugeordnet. Die
Feldnamen werden als SATZ gespeichert, wobei jedes Feld seinen
zugeordneten Namen enthält. 
 
#proc# 
INT PROC felderzahl (EUDAT CONST) 
#endproc# 
    Liefert Anzahl der benannten Felder. Ist zu Anfang 0. 
 
#proc# 
PROC feldnamen aendern (EUDAT VAR, 
                        SATZ CONST neue namen) 
#endproc# 
    Setzt die Feldnamen einer Datei. Ist 'felderzahl (neue namen)'
    größer als die Felderzahl der Datei, so wird die Felderzahl der
    Datei entsprechend heraufgesetzt. 
 
#proc# 
PROC feldnamen lesen (EUDAT CONST, SATZ VAR namen) 
#endproc# 
    Liefert alle Feldnamen in einer SATZ-Variablen. 
 
Eine EUDAS-Datei enthält drei zusätzliche Notiztexte. Zwei davon
sind bereits reserviert, und zwar: 
#free (0.2)# 
  1: Prüfbedingungen 
  2: Datum der letzten Änderung 
#f2# 
Der dritte kann für freie Notizen verwendet werden. 
 
#proc# 
PROC notizen lesen (EUDAT CONST, INT CONST notiz nr, 
                    TEXT VAR notizen) 
#endproc# 
    Schreibt die Notizen der EUDAS-Datei in 'notizen' ('notiz nr' =
   1,2,3). 
 
#proc# 
PROC notizen aendern (EUDAT VAR, INT CONST notiz nr, 
                      TEXT CONST notizen) 
#endproc# 
    Ändert die Notizen. Alte Notizen werden dabei überschrieben
    ('notiz nr' = 1,2,3). 
 
 
#abschnitt ("6.3", "SATZPOSITION", "Satzposition")# 
 
Eine EUDAS-Datei läßt sich sequentiell vorwärts und rückwärts
bearbeiten. Dazu gibt es eine aktuelle Satzposition. Ein bestimmter
Satz kann auch direkt angesprungen werden. Die Prozeduren, die
nach dem Inhalt des ersten Feldes suchen, arbeiten besonders
schnell, da die entsprechenden Sätze über eine Hashmethode gefun­
den werden. 
 
#proc# 
INT PROC satznr (EUDAT CONST) 
#endproc# 
    Liefert aktuelle Satzposition. 
 
#proc# 
INT PROC saetze (EUDAT CONST) 
#endproc# 
    Liefert Anzahl der Sätze. 
 
#proc# 
BOOL PROC dateiende (EUDAT CONST) 
#endproc# 
    Liefert TRUE, wenn 'satznr' groesser als 'saetze' ist. Die letzte
    erreichbare Satzposition liegt um eins hinter dem letzten Satz
    (um auch am Ende anfügen zu können). 
 
#proc# 
PROC auf satz (EUDAT VAR, INT CONST satznr) 
#endproc# 
    Positioniert auf den gewünschten Satz. Bei nicht existierenden
    Sätzen wird auf den ersten bzw. hinter den letzten Satz ge­
    sprungen. 
 
#proc# 
PROC weiter (EUDAT VAR) 
#endproc# 
    Geht einen Satz weiter, jedoch nicht über das Dateiende hinaus. 
 
#proc# 
PROC zurueck (EUDAT VAR) 
#endproc# 
    Geht einen Satz zurück, falls der erste Satz noch nicht erreicht
    ist. 
 
#proc# 
PROC auf satz (EUDAT VAR, TEXT CONST muster) 
#endproc# 
    Positioniert auf den ersten Satz, der als erstes Feld 'muster'
    enthält, anderenfalls hinter den letzten Satz. 
 
#proc# 
PROC weiter (EUDAT VAR, TEXT CONST muster) 
#endproc# 
    Geht weiter, bis das erste Feld 'muster' enthält, bzw. bis hinter
    den letzten Satz. 
 
#proc# 
PROC zurueck (EUDAT VAR, TEXT CONST muster) 
#endproc# 
    Geht zurück, bis das erste Feld 'muster' enthält, bzw. auf den
    ersten Satz der EUDAS-Datei. 
 
 
#abschnitt ("6.4", "SATZZUGRIFFE", "Satzzugriffe")# 
 
Der aktuelle Satz ist ein SATZ-Objekt. Auf die Felder des aktuellen
Satzes kann direkt zugegriffen werden. 
 
#proc# 
PROC feld lesen (EUDAT CONST, INT CONST feldnr, 
                 TEXT VAR inhalt) 
#endproc# 
    Wirkt wie 'feld lesen' auf den aktuellen Satz. 
 
#proc# 
PROC feld aendern (EUDAT VAR, INT CONST feldnr, 
                   TEXT CONST inhalt) 
#endproc# 
    Wirkt wie 'feld aendern' auf den aktuellen Satz. 
 
#proc# 
PROC feld bearbeiten (EUDAT CONST, INT CONST feldnr, 
     PROC (TEXT CONST, INT CONST, INT CONST) bearbeite) 
#endproc# 
     Wirkt wie 'feld bearbeiten' auf den aktuellen Satz. 
 
Der aktuelle Satz kann auch als Ganzes bearbeitet werden. 
 
#proc# 
PROC satz lesen (EUDAT CONST, SATZ VAR satz) 
#endproc# 
    Liefert den aktuellen Satz. 
 
#proc# 
PROC satz aendern (EUDAT VAR, SATZ CONST satz) 
#endproc# 
    Ersetzt den aktuellen Satz durch 'satz'. 
 
#proc# 
PROC satz einfuegen (EUDAT VAR, SATZ CONST satz) 
#endproc# 
    Fügt 'satz' vor dem aktuellen Satz ein. 
#f2# 
    FEHLER: 
#f2# 
    #on("i")#EUDAS-Datei voll#off("i")# 
    Eine EUDAS-Datei faßt mindestens 5000 Sätze. 
 
#proc# 
PROC satz loeschen (EUDAT VAR) 
#endproc# 
    Löscht den aktuellen Satz. 
 
 
#abschnitt ("6.5", "SORTIEREN UND REORGANISIEREN", "Sortieren und Reorganisieren")# 
 
Zum Sortieren können für die einzelnen Felder Typen angegeben
werden, damit auch Zahlen und Daten richtig sortiert werden kön­
nen. Außerdem kann die Feldreihenfolge angegeben werden, nach
der sortiert werden soll. 
 
#proc# 
PROC feldinfo (EUDAT VAR, INT CONST feldnr, info) 
#endproc# 
    Setzt den Feldtyp des Feldes 'feldnr'. Es bedeuten 
      -1 : normaler Text (Standard) 
       0 : Text nach DIN. Ziffern und Sonderzeichen werden igno­
           riert. Groß-und Kleinbuchstaben gelten gleich. Umlaute
           werden beachtet. 
       1 : Zahl (beim Vergleich werden alle Zeichen außer Zif­
           fern ignoriert). 
       2 : Datum. Es werden Daten der Form "tt.mm.jj" vergli­
           chen. 
 
#proc# 
INT PROC feldinfo (EUDAT CONST, INT CONST feldnr) 
#endproc# 
    Der Feldtyp des angegebenen Feldes wird geliefert. Zu Anfang
    ist -1 voreingestellt. 
 
#proc# 
INT PROC unsortierte saetze (EUDAT CONST) 
#endproc# 
    Liefert die Anzahl von Sätzen, die seit dem letzten Sortiervor­
    gang geändert wurden. Bei einer neuen Datei, die noch nie
    sortiert wurde, wird immer 0 geliefert. 
 
#proc# 
PROC dezimalkomma (TEXT CONST komma) 
#endproc# 
    Stellt das Dezimalkomma ein, das beim Vergleich von Zahlen
    gelten soll. 
#f2# 
    FEHLER: 
#f2# 
    #on("i")#Nicht erlaubtes Dezimalkomma#off("i")# 
    Nur Texte der Länge 1 sind zugelassen. 
 
#proc# 
TEXT PROC dezimalkomma 
#endproc# 
    Liefert das eingestellte Dezimalkomma ("," ist voreingestellt). 
 
#proc# 
PROC sortiere (EUDAT VAR, TEXT CONST reihenfolge) 
#endproc# 
    Sortiert die Datei in der von 'reihenfolge' angegebenen Reihen­
    folge. Dabei enthält 'reihenfolge' an der Stelle #bsp ("2*i+1")# den Code
    der Feldnummer, die als i-te in der Sortierung berücksichtigt
    werden soll. Das Zeichen an der Stelle #bsp ("2*i")# gibt an, ob das Feld
    mit der davorstehenden Feldnummer aufsteigend ('+') oder
    absteigend ('-') sortiert werden soll. 
 
#proc# 
PROC sortiere (EUDAT VAR) 
#endproc# 
    Sortiert die Datei in der zuletzt eingestellten Reihenfolge.
    Wurde noch keine Reihenfolge angegeben, wird die Datei in der
    Feldreihenfolge sortiert. 
 
#proc# 
TEXT PROC sortierreihenfolge (EUDAT CONST) 
#endproc# 
    Liefert die zuletzt eingestellte Reihenfolge. Wurde noch nicht
    sortiert, so wird "" geliefert. 
 
Nach umfangreichen Änderungen an einer EUDAS-Datei ist eine
Reorganisation sinnvoll, um "Textleichen" zu beseitigen. 
 
#proc# 
PROC reorganisiere (TEXT CONST dateiname) 
#endproc# 
    Die EUDAS-Datei mit dem Namen 'dateiname' wird reorgani­
    siert. 
 
 
#abschnitt ("6.6", "EUDAS-DATEIEN ALS ASSOZIATIVSPEICHER", "EUDAS-Dateien als Assoziativspeicher")# 
 
In diesem Abschnitt soll ein Beispiel erläutert werden, in dem
EUDAS-Dateien unabhängig von EUDAS für einen ganz anderen
Zweck benutzt werden. Das folgende kurze Paket soll ein Abkür­
zungsverzeichnis realisieren, das auf einer EUDAS-Datei basiert. 
 
#beispiel# 
    PACKET abkuerzungsverzeichnis 
      DEFINES 
      verzeichnis laden, 
      abkuerzung einfuegen, 
      abkuerzung aendern, 
      abkuerzung loeschen, 
      langform : 
 
    EUDAT VAR verz; 
    SATZ VAR satz; 
    TEXT VAR inhalt; 
 
    PROC verzeichnis laden (TEXT CONST dateiname) : 
 
      oeffne (verz, dateiname) 
 
    END PROC verzeichnis laden; 
 
    PROC abkuerzung einfuegen (TEXT CONST abk, lang) : 
 
      auf satz (verz, abk); 
      IF NOT dateiende (verz) THEN 
        errorstop ("Abkürzung existiert bereits") 
      ELSE 
        satz initialisieren (satz); 
        feld aendern (satz, 1, abk); 
        feld aendern (satz, 2, lang); 
        satz einfuegen (satz) 
      END IF 
 
    END PROC abkuerzung einfuegen; 
 
    PROC abkuerzung aendern (TEXT CONST abk, lang) : 
 
      auf satz (verz, abk); 
      IF dateiende (verz) THEN 
        errorstop ("Abkürzung existiert nicht") 
      ELSE 
        feld aendern (verz, 2, lang) 
      END IF 
 
    END PROC abkuerzung aendern; 
 
    PROC abkuerzung loeschen (TEXT CONST abk) : 
 
      auf satz (verz, abk); 
      IF NOT dateiende (verz) THEN 
        satz loeschen (verz) 
      END IF 
 
    END PROC abkuerzung loeschen; 
 
    TEXT PROC langform (TEXT CONST abk) : 
 
      auf satz (verz, abk); 
      IF dateiende (verz) THEN 
        inhalt := ""; 
        errorstop ("Abkürzung nicht vorhanden") 
      ELSE 
        feld lesen (verz, 2, inhalt) 
      END IF; 
      inhalt
 
    END PROC langform; 
 
    END PACKET abkuerzungsverzeichnis; 
#text# 
 
Die Prozedur 'verzeichnis laden' koppelt die interne EUDAT-Vari­
able 'verz' an eine benannte EUDAS-Datei, die eventuell vorher mit
EUDAS erstellt wurde. In diesem Beispiel sind die Feldnamen egal;
falls die übergebene EUDAS-Datei noch nicht existiert, wird sie mit
0 Feldern eingerichtet, was aber nur für eine spätere Anzeige mit
EUDAS störend wäre. 
    Grundlage für das Aufsuchen einer bestimmten Abkürzung bil­
det immer die Prozedur 'auf satz', die nach dem Inhalt des ersten
Feldes optimiert sucht. Falls die Abkürzung nicht gefunden wurde,
wird auf das Dateiende positioniert, daher wird jeweils 'dateiende'
abgefragt. 
    Beim Einfügen eines neuen Satzes muß eine komplette Satz­
variable angegeben werden, die bereits mit den Inhalten gefüllt ist.
Beim späteren Ändern kann jedoch direkt auf ein Feld zugegriffen
werden, ohne die Satzvariable explizit rauszuholen. 
    Die Abfrage einer bestimmten Abkürzung bereitet dann keine
Schwierigkeiten mehr. 
    Für die Verwendung von EUDAS-Dateien in diesem Beispiel
spricht zum einen die einfache Programmierung, zum anderen aber
auch die Möglichkeit, das erstellte Verzeichnis mit den Hilfsmitteln
von EUDAS zu warten und auszudrucken.