Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

IEDTGTM - Lesen eines markierten Satzes

&pagelevel(4)&pagelevel

Diese Zugriffsfunktion bietet die Möglichkeit, ausgehend von einer bestimmten Zeilennummer (EDTKEY1), einen markierten Satz zu suchen und zu lesen.
Die Suchrichtung kann dabei bestimmt werden.

Es kann nur nach Sätzen gesucht werden, die markiert sind. Nach einer bestimmten Markierung kann nicht gesucht werden.

Gesucht werden kann in den Arbeitsdateien 0..22. In einer Arbeitsdatei, in der eine Datei real durch @OPEN (Format 2) geöffnet ist, können keine markierten Sätze gelesen werden. Der Zugriff wird mit einem Returncode abgewiesen.

Suchen des markierten Satzes

Für die Suche nach einem markierten Satz sind anzugeben:

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

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

  • Displacement n (0,+1,-1) im Feld EAMDISP (EDTAMCB):
    Angabe der Suchrichtung (andere positive Werte für Displacement werden wie +1, andere negative Werte werden wie -1 behandelt)

  • Zeichensatz, in dem der Satz bereitgestellt werden soll, im Feld EGLCCSN (EDTGLCB)

Zwei Arten der Suche sind möglich:

  • Suchen nach einer bestimmten Zeilennummer

  • Suchen des nächsten markierten Satzes relativ zu einer angegebenen Zeilennummer

Lesen eines markierten Satzes mit einer bestimmten Zeilennummer

Angabe des Displacement n = 0

Wird als Displacement (EAMDISP) der Wert 0 angegebenen, wird der Satz mit der angegebenen Zeilennummer (EDTKEY1) gelesen. Ist dieser Satz nicht vorhanden oder enthält dieser Satz keine Markierungen, wird der nächste markierte Satz (eventuell der erste oder letzte markierte Satz) gelesen und übergeben.

Übersicht über Returncodes und gelesenen Satz:

EDTKEY1

EAMDISP

EGLMRET

EAMSR1

EDTREC

Zeilennummer eines
existierenden Satzes

0

EAMRETOK

EAMOK00

Satz mit Zeilennummer

kleiner als Zeilennummer
des ersten markierten
Satzes

0

EAMRETOK

EAMOK08

erster Satz mit
Markierung

größer als Zeilennummer
des letzten markierten
Satzes

0

EAMRETOK

EAMOK12

letzter Satz mit
Markierung

größer als Zeilennummer
des ersten markierten
Satzes
und
kleiner als Zeilennummer
des letzten markierten
Satzes
und
nicht Zeilennummer eines
markierten Satzes

0

EAMRETOK

EAMOK04

nächster markierter
Satz nach
EDTKEY1

Arbeitsdatei ist leer oder
enthält keine markierten
Sätze


EAMACERR

EAMAC16


Der EDT übergibt im Erfolgsfall die Zeilennummer des tatsächlich gelesenen Satzes in EDTKEY und die Markierungen des Satzes in EAMMARK (EDTAMCB).

Bedeutung der Returncodes siehe Abschnitt „EDTGLCB - Globaler EDT - Kontrollblock“.

Lesen des nächsten markierten Satzes

Angabe des Displacement n = +1 oder -1

Gesucht wird nach dem nächsten markierten Satz vor bzw. nach einer bestimmten Zeilennummer (EDTKEY1).

n = +1:

der erste markierte Satz nach der angegebenen Zeilennummer wird gelesen

n = -1:

der erste markierte Satz vor der angegebenen Zeilennummer wird gelesen

Ist in der angegebenen Richtung kein markierter Satz mehr vorhanden, wird der erste oder letzte markierte Satz gelesen und übergeben.

Übersicht über Returncodes und gelesenen Satz:

EDTKEY1

EAMDISP

EGLMRET

EAMSR1

EDTREC

EDTKEY1 =
XXXXXXXX

+1

Satz mit Markierung
existiert nach EDTKEY1

EAMRETOK

EAMOK00

nächster Satz
mit Markierung
nach EDTKEY1

EDTKEY1 =
XXXXXXXX

-1

Satz mit Markierung
existiert vor EDTKEY1

EAMRETOK

EAMOK00

nächster Satz
mit Markierung
vor EDTKEY1

EDTKEY1 =
XXXXXXXX

+1

Kein Satz mit Markierung
nach EDTKEY1

EAMRETOK

EAMOK12

letzter markierter
Satz

EDTKEY1 =
XXXXXXXX

-1

Kein Satz mit Markierung
vor EDTKEY1

EAMRETOK

EAMOK08

erster markierter
Satz

Arbeitsdatei ist
leer oder enthält
keine markierten
Sätze


EAMACERR

EAMAC16


Der EDT übergibt im Erfolgsfall die Zeilennummer des tatsächlich gelesenen Satzes in EDTKEY und die Markierungen des Satzes in EAMMARK (EDTAMCB).

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 IEDTGTM mit der Parameterliste

Übersichtstabelle

(Kontrollblöcke siehe Abschnitt „EDTGLCB - Globaler EDT - Kontrollblock“.)

Einsprungadresse    :     IEDTGTM

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

EDTREC)

Aufrufparameter

Rückkehrparameter

EDTGLCB:EGLUNIT
EGLVERS
EGLCCSN
EDTGLCB:EGLRETC
EGLRMSG
EDTAMCB:EAMUNIT
EAMVERS
EAMFLAG
EAMFILE
EAMDISP
EAMLKEY1
EAMPKEY
EAMPREC
EDTAMCB:EAMMARK
EAMLKEY
EAMLREC

EDTKEY1
EDTKEY
EDTREC


EDTKEY
EDTREC


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 Kompa-tibilitäts-Modus wird dort (wie in EDT V16.6B) 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.

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 4096 ist hier als Beispiel für die maximal erwartete Satzlänge gewählt):

iedamcb amcb = IEDAMCB_INIT;
char key1[8]; 
char key[8]; 
char rec[4096]; 
ambc.length_key1 = 8; 
amcb.length_key_outbuff = 8;
amcb.length_rec_outbuff = 4096;

Die Versorgung der weiteren Parameter ist benutzerabhängig. Wenn beispielsweise der nächste markierte Satz nach dem Satz mit der Zeilennummer 123.4 in der Arbeitsdatei 22 gesucht wird:

strncpy(amcb.filename,"$22     ",8); 
strncpy(key1,"01234000",8); 
amcb.displacement = 1; 

Im C-Programm wird die Funktion IEDTGTM folgendermaßen aufgerufen:

IEDTGTM(&glcb,&amcb,key1,key,rec);