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.