Verarbeitung von Arbeitsdateien und verschachtelten Schleifen

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.


Arbeitsdateiformate und -attribute

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.

Maximale Datensatzlänge beim Dateitransfer mit Natural Connection

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.

Streaming

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.

Binäre Daten herunterladen und hochladen

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.

Beginn der AnweisungslisteUm binäre Daten herunterzuladen:

  1. Definieren Sie eine binäre Variable.

  2. 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.

Beginn der AnweisungslisteUm binäre Daten hochzuladen:

  1. Definieren Sie eine binäre Variable.

  2. Entfernen Sie X'FF im letzten Block. X'FF markiert das Ende der binären Daten.

Dynamische Variablen in READ WORK FILE

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.

Verschachtelte READ-Schleifen

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:

Beispiel einer inneren READ-Schleife

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

Beispiel einer READ-Schleife und CALLNAT

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

Anschließende READ-Schleifen

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.

Beispiel einer Schleife mit ESCAPE und CLOSE

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

Pufferzuordnung beim Hochladen großer Datensätze

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.

Beispiel-Statement

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.