Mit dieser Zugriffsfunktion kann ein Satz aus einer Arbeitsdatei gelesen werden.
Der zu lesende Satz wird durch folgende Angaben bestimmt:
Arbeitsdatei (
$0..$22
) im FeldEAMFILE
(EDTAMCB
): Arbeitsdatei aus der der Satz gelesen werden sollZeilennummer eines Satzes der Arbeitsdatei im Puffer
EDTKEY1
(der Satz muss nicht existieren).Displacement
n
(0
,+N
,-N
) im FeldEAMDISP
(EDTAMCB
): Abstand (in Sätzen) zur angegeben Zeilennummer im binären FormatZeichensatz, in dem der Satz bereitgestellt werden soll, im Feld
EGLCCSN
(EDTGLCB
)
Sätze mit Satzmarkierung 13 (siehe Abschnitt „IEDTPTM - Markieren eines Satzes“) werden nur berücksichtigt, wenn im Kontrollblock EDTAMCB
im Feld EAMFLAG
das Kennzeichen EAMIGN13
gesetzt ist. Andernfalls werden sie behandelt, als wären sie nicht existent.
Die Schnittstelle erlaubt zwei Arten der Adressierung:
Absolute Adressierung
Relative Adressierung
Lesen eines Satzes mit einer bestimmten Zeilennummer - Absolute Adressierung
Angabe des Displacement (EAMDISP
) : n = 0
Wird als Displacement der Wert 0
angegeben, dann wird nach dem Satz mit der angegebenen Zeilennummer (EDTKEY1
) gesucht.
Ist dieser Satz nicht vorhanden, wird der Satz mit der nächsten Zeilennummer übergeben (evtl. der erste oder der letzte Satz).
Übersicht über Returncodes und gelesenen Satz:
EDTKEY1 | EAMDISP | EGLMRET | EAMSR1 | EDTREC |
Zeilennummer eines |
|
|
| Satz mit Zeilennummer |
kleiner als Zeilennummer |
|
|
| erster Satz |
größer als Zeilennummer |
|
|
| letzter Satz |
größer als Zeilennummer |
|
|
| nächster Satz nach |
Arbeitsdatei enthält keine |
|
|
Der EDT übergibt im Erfolgsfall die Zeilennummer des tatsächlich gelesenen Satzes in EDTKEY
.
Bedeutung der Returncodes siehe Abschnitt „EDTGLCB - Globaler EDT - Kontrollblock“.
Lesen eines Satzes mit relativer Adressierung
Angabe des Displacement (EAMDISP
): n = +N/-N (Nî0)
Die Adresse des zu lesenden Satzes setzt sich zusammen aus
der Zeilennummer eines Satzes (
EDTKEY1
),dem Abstand
N
des Satzes zur angegebenen Zeilennummer:+N
: der N-te (logische) Satz nach der angegebenen Zeilennummer wird gelesen,-N
: der N-te (logische) Satz vor der angegebenen Zeilennummer wird gelesen.
Ist der gewünschte Satz außerhalb des Zeilennummernbereichs der Arbeitsdatei, wird der erste bzw. der letzte Satz geliefert.
Wird eine der Zeilennummern X'0000000000000000'
bzw. X'FFFFFFFFFFFFFFFF'
als Nummer des zu lesenden Satzes angegeben, wird die Abstandsangabe relativ zu einem fiktiven Satz vor allen anderen bzw. nach allen anderen berechnet. D.h. die Abstandsangabe 1
bzw. -1
liefert dann den ersten bzw. letzten Satz der Arbeitsdatei.
Übersicht über Returncodes und gelesenen Satz:
EDTKEY1 | EAMDISP | EGLMRET | EAMSR1 | EDTREC |
|
(N <= Sätze |
|
| Satz N |
|
(N <= Sätze |
|
| Satz N |
|
(N > Sätze |
|
| letzter Satz |
|
(N > Sätze |
|
| erster Satz |
Arbeitsdatei |
|
|
Der EDT übergibt im Erfolgsfall die Zeilennummer des tatsächlich gelesenen Satzes in EDTKEY
.
Bedeutung der Returncodes siehe Abschnitt „EDTGLCB - Globaler EDT - Kontrollblock“.
Aufruf
Folgende Angaben sind notwendig (siehe Übersichtstabelle):
Versorgen der benötigten Felder in den Kontrollblöcken
EDTGLCB
undEDTAMCB
Versorgen des Puffers
EDTKEY1
Bereitstellen von Speicherplatz für die Puffer
EDTKEY
undEDTREC
Aufruf der Einsprungadresse
IEDTGET
mit der Parameterliste
Übersichtstabelle
(Kontrollblöcke siehe Abschnitt „Generierung und Aufbau der Kontrollblöcke“).
Einsprungadresse |
Parameterliste
|
Aufrufparameter | Rückkehrparameter | ||
EDTGLCB: | EGLUNIT EGLVERS EGLCCSN | EDTGLCB: | EGLRETC EGLRMSG |
| EAMUNIT EAMVERS EAMFILE EAMDISP EAMLKEY1 EAMPKEY EAMPREC |
| EAMMARK EAMLKEY EAMLREC |
EDTKEY1 EDTKEY EDTREC | EDTKEY EDTREC |
Mögliche Returncodes siehe „Logische Satzzugriffsfunktionen“.
Rückkehrparameter bei erfolgreichem Satzzugriff
Neben dem Feld EGLRETC
des EDTGLCB
(EGLMRET = EAMRETOK
) werden vom EDT folgende Parameter versorgt:
Satz | EDTREC |
Satzlänge | EAMLREC im EDTAMCB |
Zeilennummer | EDTKEY (immer 8 Byte lang) |
Länge der Zeilenummer | EAMLKEY im EDTAMCB (immer 8 Byte) |
Markierungen des Satzes |
|
Wenn die Pufferlänge (EAMPREC)
nicht zur Aufnahme des Satzes ausreicht, werden EGLMRET
mit EAMACERR
und EGLSR1
mit EAMAC12
versorgt. Der Satz wird abgeschnitten. Das Feld EAMLREC
im AMCB
wird mit der tatsächlich gelesenen Länge versorgt.
Im Kompatibilitäts-Modus wird dort (wie in EDT V16.6) die für ein komplettes Lesen erforderliche Pufferlänge abgelegt. Im Unicode-Modus ist die Angabe der wirklich übertragenen Bytes jedoch erforderlich, weil bei Mehrbyte-Codierung das Abschneiden des Satzes grundsätzlich zwischen zwei gültigen Zeichen erfolgen muss und daher evtl. weniger Bytes übertragen werden, als in EAMPREC
angegeben wurde.
Bei nicht erfolgreichem Zugriff werden die Felder EAMLKEY
und EAMLREC
mit dem Wert 0
versorgt.
Aufruf im C-Programm
Benötigte Include-Dateien:
#include <stdio.h>
#include <iedtgle.h>
Der Kontrollblock EDTAMCB
wird folgendermaßen deklariert und initialisiert (der Wert 1024
ist hier als Beispiel für die maximal erwartete Satzlänge gewählt):
iedamcb amcb = IEDAMCB_INIT; char rec[1024]; char key[8], key1[8]; amcb.length_key1 = 8; amcb.length_key_outbuffer = 8; amcb.length_rec_outbuffer = 1024;
Die Versorgung der weiteren Parameter ist benutzerabhängig. Wenn beispielsweise der 1. Satz in der Arbeitsdatei 0 gesucht wird:
strncpy(amcb.filename,"$0 ",8); strncpy(key1,"00000001",8); amcb.displacement = 0;
Aufruf der Funktion:
IEDTGET(&glcb,&amcb,key1,key,rec);