Dieses Kapitel beschreibt Einschränkungen, die für die Verwendung von
Arbeitsdateiattributen und die Unterstützung von Arbeitsdateiformaten gelten,
und die Auswirkungen von
READ
-Schleifen.
Folgende Einschränkungen gelten bei der Benutzung von Arbeitsdateiattributen:
Bei Benutzung des Statements WRITE WORK FILE VARIABLE
ist
der Zugriff auf PC-Arbeitsdateien auf eine feste Datensatzlänge von 1073741823
Bytes oder 32767 Bytes begrenzt. Je nachdem welche Version von Entire
Connection auf dem PC installiert ist, können zusätzliche Einschränkungen
gelten (s. Maximale Datensatzlänge
beim Dateitransfer mit Natural Connection).
Natural Connection unterstützt keine Arbeitsdateien des Typs
UNFORMATTED
. Die Übertragung einer Arbeitsdatei erfolgt immer im
formatierten Modus und enthält nur datensatzorientierte Daten. Wird eine
Arbeitsdatei des Typs UNFORMATTED
geöffnet, schaltet Natural
Connection auf den Typ FORMATTED
um und führt jedes WRITE
WORK FILE
-Statement mit der Option VARIABLE
aus. Zur
Übertragung von Byte-Streaming-Daten siehe Streaming.
Die maximale Datensatzlänge, die bei der Dateiübertragung unterstützt wird, ist abhängig von der Version von Entire Connection, die auf dem PC installiert ist.
Bei Entire Connection bis zur Version 4.2 ist die maximale Datensatzlänge begrenzt durch die Anzahl der Bytes, die auf dem jeweiligen 3270-Terminalmodell angezeigt werden können. Beispielsweise ist bei einem 3270 Model 2 die Datensatzlänge 24*80 = 1920 Bytes. Da alle Puffer durch einen Vorspann (Header) und einen Nachspann (Trailer) umschlossen sind, beträgt die resultierende Netto-Datensatzlänge 1887 Bytes.
Bei Entire Connection Version 4.3.1 ist die maximale Datensatzlänge begrenzt auf 32 KB - 1 Byte = 32767 Bytes.
Ab Entire Connection Version 4.3.2 Fix Level 1 und Entire Screen
Builder Version 5.2.1 ist die maximale Datensatzlänge erhöht auf 1 GB - 1 Byte
= 1073741823 Bytes. Jedoch gilt beim Schreiben von Arbeitsdateien in variablem
Format (WRITE WORK VARIABLE
) immer noch die Beschränkung auf eine
maximale Datensatzlänge von 32 KB - 1 Byte.
Entire Connection bietet die Option, Byte-Streaming-Daten zu
übertragen, die nicht datensatzorientiert sind. Eine
Byte-Streaming-Datenübertragung wird aktiviert, wenn ein
READ WORK FILE
- oder
WRITE WORK
FILE
-Statement mit nur einem einzigen Operanden in binärem
Format kodiert ist.
Bei binären Daten handelt es sich gewöhnlich um ausführbaren Code, der keine anzeigbaren Zeichen enthält. Bei Natural und Entire Connection werden spezielle Verfahren zur Übertragung von binären Daten angewendet, die verhindern, dass während der Datenübertragung Standard-Zeichenumsetzungen stattfinden.
Um binäre Daten herunterzuladen:
Definieren Sie eine binäre Variable.
Falls der letzte Block der heruntergeladenen Daten weniger
Daten als die gewählte Blockgröße enthält, fügen Sie X'FF'
an der
Stelle ein, die das Ende der binären Daten markiert. (Wenn Sie
X'FF'
weglassen, wird der Rest des letzten Blocks mit
X00
gefüllt.
Um binäre Daten hochzuladen:
Definieren Sie eine binäre Variable.
Entfernen Sie X'FF
im letzten Block.
X'FF
markiert das Ende der binären Daten.
Wenn Sie eine dynamische Variable mit Format binär oder
alphanumerisch als Operanden eines READ WORK FILE
-Statements
definieren, dann ist beim Verarbeiten der entsprechenden
READ
-Schleife jede Größenänderung dieser Variablen nur so lange
gültig, bis das nächste READ
durchgeführt wird. Beim Verarbeiten
des READ
ändert Natural die Größe aller dynamischen Variablen auf
die Größe, die sie beim Öffnen der Arbeitsdatei hatten. Dies ist während des
Öffnen-Vorgangs, der das Layout des Datensatzes festlegt, erforderlich. Das
Datensatzlayout ist zwingend erforderlich für die Bearbeitung der
entsprechenden Arbeitsdatei. Das Datensatzlayout ist gültig, bis das nächste
Schließen der Arbeitsdatei stattfindet.
Ausnahme: Eine interne Änderung der Größe kann bei inneren Schleifen
nicht durchgeführt werden, wenn in derselben Arbeitsdatei verschachtelte
READ
-Schleifen verarbeitet werden. Siehe auch die Empfehlungen zum
Programmieren von verschachtelten Schleifen im nächsten Abschnitt. Wenn eine
dynamische Variable mit der Größe 0 als einziger Operand eines READ WORK
FILE
-Statements benutzt wird, gibt Natural den Fehler NAT1500 aus.
Geben Sie verschachtelte READ
-Schleifen nicht in einer
Arbeitsdatei an. Das Ergebnis der inneren Schleife(n) kann unvorhersehbar sein,
wenn die Operanden der inneren Schleife nicht den Operanden der äußeren
Schleife entsprechen. Der Grund dafür ist, dass alle vom PC hochgeladenen
Datensätze in dem Format verarbeitet werden, das festgelegt wurde, als die
Arbeitsdatei in der äußersten Schleife geöffnet wurde.
Es folgen Beispiele, in denen unvorhersehbare Ergebnisse gezeigt
werden, die eine oder mehrere innere Schleifen von verschachtelten
READ
-Schleifen haben
können:
Im Beispielprogramm PCNESTED
wird während der
READ
-Schleifenverarbeitung ein weiterer READ
ausgeführt:
/* PCNESTED /* DEFINE DATA LOCAL 1 #REC1 (A) DYNAMIC 1 #NUMBER (N10) END-DEFINE * MOVE ALL 'TEST RECORD 1' TO #REC1 UNTIL 100 READ WORK FILE 1 #REC1 READ WORK FILE 1 #NUMBER DISPLAY #NUMBER END-WORK END-WORK END
Im Beispielprogramm PCMAIN
und Subprogramm
PCRSUB01
wird während der READ
-Schleifenverarbeitung
ein externes Objekt gerufen:
/* PCMAIN /* DEFINE DATA LOCAL 1 RECL (A2000) 1 REDEFINE RECL 2 RECNR (N4) 1 CO (N4 END-DEFINE * WRITE WORK 1 COMMAND 'SET PCFILE 2 UP DATA C:/TSTPCAM/PCMAIN.TXT' READ WORK 2 RECL DISPLAY RECL (AL=72) CALLNAT 'PCRSUB01' RECL END-WORK END
Subprogramm PCRSUB01
:
/*Subprogram PCRSUB01 /* DEFINE DATA PARAMETER 1 RECL (A2000) LOCAL 1 #CC1 (A20) 1 #CC2 (N4) * END-DEFINE READ WORK 2 RECL #CC1 #CC2 DISPLAY #CC1 #CC2 END-WORK END
Wird eine READ
-Schleife durch ein bedingtes
ESCAPE
beendet, müssen Sie die Arbeitsdatei explizit mit dem
CLOSE WORK
FILE
-Statement schließen, damit dieselbe Arbeitsdatei in
einem anschließenden READ
in demselben Objekt verarbeitet werden
kann.
Ausnahme: Sie können das CLOSE WORK FILE
-Statement
weglassen, wenn Sie die Datei nicht wieder ab dem Anfang zu lesen brauchen und
wenn beim anschließenden READ
-Vorgang dasselbe Datensatzlayout wie
beim vorhergehenden benutzt wird.
Es folgt ein Beispiel, das zeigt, wie Sie ein Programm mit zwei
READ
-Schleifen in einer Arbeitsdatei korrekt
kodieren.
Im Beispielprogramm PCESCAPE
wird die Arbeitsdatei
explizit geschlossen, nachdem die erste READ
-Schleife durch ein
ESCAPE BOTTOM
-Statements beendet worden ist, so dass die zweite
READ
-Schleife die Datei neu öffnen muss:
/*PCESCAPE /* DEFINE DATA LOCAL 1 #CC1 (A20) 1 #CC2 (A40) 1 #COUNTER (I2) * END-DEFINE READ WORK 2 #CC1 DISPLAY #CC2 ADD 1 TO #COUNTER IF #COUNTER GE 3 ESCAPE BOTTOM END-IF END-WORK CLOSE WORK FILE 2 * READ WORK 2 #CC2 DISPLAY #CC2 END-WORK END
Wenn Natural Connection einen Datensatz hochlädt, der größer als ein physischer Block ist, dann sammelt Natural Connection alle zu dem Datensatz gehörenden Blöcke in dem zugehörigen Arbeitsdateibereich. Der Datensatz wird dann dekomprimiert und an den Natural-Datenbereich übergeben.
Der von allen temporären Puffern zugewiesene Gesamtspeicherplatz beträgt bis zum Dreifachen der Größe des hochzuladenden Datensatzes.
READ WORK FILE 1 #var
dabei ist 1 die Nummer der Arbeitsdatei, und #var
ist
eine Variable im Format B 10000. In diesem Fall erfordert der temporäre
Natural-Arbeitsbereich ca. 30000 Bytes.