Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

IEDTGET - Lesen eines Satzes

&pagelevel(4)&pagelevel

Mit dieser Zugriffsfunktion kann ein Satz aus einer Arbeitsdatei gelesen werden.

Der zu lesende Satz wird durch folgende Angaben bestimmt:

  • Arbeitsdatei ($0..$22) im Feld EAMFILE (EDTAMCB): Arbeitsdatei aus der der Satz gelesen werden soll

  • Zeilennummer eines Satzes der Arbeitsdatei im Puffer EDTKEY1 (der Satz muss nicht existieren).

  • Displacement n (0, +N, -N) im Feld EAMDISP (EDTAMCB): Abstand (in Sätzen) zur angegeben Zeilennummer im binären Format

  • Zeichensatz, 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
existierenden Satzes

0

EAMRETOK

EAMOK00

Satz mit Zeilennummer
= EDTKEY1

kleiner als Zeilennummer
des ersten Satzes

0

EAMRETOK

EAMOK08

erster Satz

größer als Zeilennummer
des letzten Satzes

0

EAMRETOK

EAMOK12

letzter Satz

größer als Zeilennummer
des ersten Satzes
und
kleiner als Zeilennummer
des letzten Satzes
und
keine Zeilennummer
eines existierenden
Satzes

0

EAMRETOK

EAMOK04

nächster Satz nach
EDTKEY1

Arbeitsdatei enthält keine
Sätze


EAMACERR

EAMAC16


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

EDTKEY1 =
XXXXXXXX

+N

(N <= Sätze
nach EDTKEY1 )

EAMRETOK

EAMOK00

Satz N
nach EDTKEY1

EDTKEY1 =
XXXXXXXX

-N

(N <= Sätze
vor EDTKEY1 )

EAMRETOK

EAMOK08

Satz N
vor EDTKEY1

EDTKEY1 =
XXXXXXXX

+N

(N > Sätze
nach EDTKEY1 )

EAMRETOK

EAMOK12

letzter Satz

EDTKEY1 =
XXXXXXXX

-N

(N > Sätze
vor EDTKEY1 )

EAMRETOK

EAMOK04

erster Satz

Arbeitsdatei
enthält keine Sätze


EAMACERR

EAMAC16


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 und EDTAMCB

  • Versorgen des Puffers EDTKEY1

  • Bereitstellen von Speicherplatz für die Puffer EDTKEY und EDTREC

  • Aufruf der Einsprungadresse IEDTGET mit der Parameterliste

Übersichtstabelle

(Kontrollblöcke siehe Abschnitt „Generierung und Aufbau der Kontrollblöcke“).

Einsprungadresse   :     IEDTGET

Parameterliste     :     A (EDTGLCB, EDTAMCB, EDTKEY1, EDTKEY,

EDTREC)

Aufrufparameter

Rückkehrparameter

EDTGLCB:EGLUNIT
EGLVERS
EGLCCSN
EDTGLCB:EGLRETC
EGLRMSG

EDTAMCB: 

EAMUNIT
EAMVERS
EAMFILE
EAMDISP
EAMLKEY1
EAMPKEY
EAMPREC

EDTAMCB: 

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:

SatzEDTREC
SatzlängeEAMLREC im EDTAMCB
ZeilennummerEDTKEY (immer 8 Byte lang)
Länge der ZeilenummerEAMLKEY im EDTAMCB (immer 8 Byte)

Markierungen des Satzes

EAMMARK im EDTAMCB

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);