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 FeldEAMFILE
(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 FeldEAMDISP
(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 |
|
|
| Satz mit Zeilennummer |
kleiner als Zeilennummer |
|
|
| erster Satz mit |
größer als Zeilennummer |
|
|
| letzter Satz mit |
größer als Zeilennummer |
|
|
| nächster markierter |
Arbeitsdatei ist leer oder |
|
|
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
).
| der erste markierte Satz nach der angegebenen Zeilennummer wird gelesen |
| 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 |
|
Satz mit Markierung |
|
| nächster Satz |
|
Satz mit Markierung |
|
| nächster Satz |
|
Kein Satz mit Markierung |
|
| letzter markierter |
|
Kein Satz mit Markierung |
|
| erster markierter |
Arbeitsdatei ist |
|
|
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
undEDTAMCB
Versorgen des Puffers
EDTKEY1
Bereitstellen von Speicherplatz für die Puffer
EDTKEY
undEDTREC
Aufruf der Einsprungadresse
IEDTGTM
mit der Parameterliste
Übersichtstabelle
(Kontrollblöcke siehe Abschnitt „EDTGLCB - Globaler EDT - Kontrollblock“.)
Einsprungadresse |
Parameterliste
|
Aufrufparameter | Rückkehrparameter | ||
EDTGLCB: | EGLUNIT EGLVERS EGLCCSN | EDTGLCB: | EGLRETC EGLRMSG |
EDTAMCB: | EAMUNIT EAMVERS EAMFLAG EAMFILE EAMDISP EAMLKEY1 EAMPKEY EAMPREC | EDTAMCB: | EAMMARK EAMLKEY EAMLREC |
|
|
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 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);