Verarbeitung von Arbeitsdateien und verschachtelten Schleifen

#### Search Results

Search

# 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

- Maximale Datensatzlänge beim Dateitransfer mit Natural Connection

- Streaming

- Dynamische Variablen in READ WORK FILE

- Verschachtelte READ-Schleifen

- Anschließende READ-Schleifen

- Pufferzuordnung beim Hochladen großer Datensätze

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

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

Um 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

- Beispiel einer READ-Schleife und CALLNAT

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

### On this page

- Arbeitsdateiformate und -attribute
- Maximale Datensatzlänge beim Dateitransfer mit Natural Connection
- Streaming
- Dynamische Variablen in READ WORK FILE
- Verschachtelte READ-Schleifen
- Anschließende READ-Schleifen
- Pufferzuordnung beim Hochladen großer Datensätze