Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Herstellerabhängige Darstellung und Ausrichtung von Daten

&pagelevel(4)&pagelevel

Ausrichtung durch Einfügen von Füllfeld-Bytes

Es gibt zwei Arten von Füllfeld-Bytes:

  • Füllfeld-Bytes innerhalb von Datensätzen sind nicht verwendete Zeichenstellen, die jedem ausgerichteten Datenfeld im Datensatz vorangehen.

  • Füllfeld-Bytes zwischen Datensätzen sind nicht verwendete Zeichenstellen, die zwischen geblockten logischen Datensätzen eingefügt sind.


  • Füllfeld-Bytes innerhalb von Datensätzen

    Für eine Ausgabedatei oder in der WORKING-STORAGE SECTION und LOCAL-STORAGE SECTION fügt der Compiler Füllfeld-Bytes innerhalb von Datensätzen ein, um sicherzustellen, dass sich alle ausgerichteten Datenfelder an den geeigneten Grenzen befinden. Für eine Eingabedatei oder in der LINKAGE SECTION erwartet der Compiler, dass eventuell notwendige Füllfeld-Bytes vorhanden sind, um die richtige Ausrichtung eines mit SYNCHRONIZED erklärten Datenfeldes zu garantieren.

    Da es für die Benutzer sehr wichtig ist, die Länge eines Datensatzes in einer Datei zu kennen, ist der Algorithmus beschrieben, den der Compiler verwendet, um zu bestimmen, ob Füllfeld-Bytes notwendig sind und, falls sie notwendig sind, die entsprechende Anzahl von Füllfeld-Bytes hinzuzufügen:

    Die Zahl von belegten Bytes aller Datenelemente, die einem Datenfeld in einem Datensatz vorausgehen, werden zusammengezählt, einschließlich eventuell vorher dazugezählter Füllfeld-Bytes.

    Diese Summe ist durch m zu dividieren, wobei gilt:

    m = 2

    für COMPUTATIONAL- bzw. COMPUTATIONAL-5 bzw. BINARY-Daten-felder
    von 4 Ziffern Länge oder weniger

    m = 4

    für COMPUTATIONAL- bzw. COMPUTATIONAL-5 bzw. BINARY-Datenfelder
    von 5 Ziffern Länge oder mehr

    m = 4

    für COMPUTATIONAL-1-Datenfelder

    m = 8

    für COMPUTATIONAL-2-Datenfelder

    m = 4

    für Indexdatenfelder

    m = 8

    für Objektreferenzen

    m = 4

    für Zeiger

    m = 8

    für typisierte Datengruppen

    Falls der Divisionsrest r dieser Division gleich Null ist, werden keine Füllfeld-Bytes benötigt. Falls der Divisionsrest nicht gleich Null ist, so ist die Zahl von Füllfeld-Bytes, die hinzugefügt werden müssen, gleich m - r.

    Diese Füllfeld-Bytes werden jedem Datensatz unmittelbar nach dem Datenelement eingefügt, das dem BINARY-, COMPUTATIONAL-, COMPUTATIONAL-1-, COMPUTATIONAL-2-, COMPUTATIONAL-5-, dem INDEX-Datenfeld, der Objektreferenz, dem Zeiger oder dem typisierten Datenfeld vorausgeht. Sie sind so erklärt, als wären sie ein Datenfeld mit einer Stufennummer gleich der des Datenfeldes, das dem ausgerichteten Datenfeld unmittelbar vorausgeht, und sie sind mit eingerechnet in die Größe der sie enthaltenden Gruppe.

    Legen sie in Unterstrukturen solche Ausrichtung verlangenden Felder an den Anfang. Dadurch ist sichergestellt, dass immer gleich viele Füllfeld-Bytes enthalten sind.

    Beispiel 2-9

    Füllfeld-Bytes innerhalb von Datensätzen

    01  A.
        02   B  PICTURE X(5).
        02   C.
             03 D  PICTURE XX.
            [03 Füllfeld-Byte PICTURE X. Eingefügt vom Compiler.]
             03 E  PICTURE S9(6) COMP SYNCHRONIZED.
    

    Füllfeld-Bytes werden auch dann vom Compiler hinzugefügt, wenn eine Datengruppe mit OCCURS-Klausel beschrieben ist und ein ausgerichtetes Datenfeld mit USAGE definiert als BINARY, COMPUTATIONAL, COMPUTATIONAL-1, COMPUTATIONAL-2, COMPUTATIONAL-5 oder INDEX enthält. Um zu entscheiden, ob Füllfeld-Bytes dazuzufügen sind, werden folgende Schritte durchgeführt:

    • Der Compiler berechnet die Größe der Gruppe, einschließlich aller notwendigen Füllfeld-Bytes innerhalb des Datensatzes.

    • Diese Summe wird durch das größte, von irgendeinem Datenfeld innerhalb der Gruppe benötigtes m dividiert.

    • Falls der Divisionsrest r dieser Division gleich Null ist, werden keine Füllfeld-Bytes benötigt. Falls r ungleich Null ist, müssen m - r Füllfeld-Bytes hinzugezählt werden.

    Die Füllfeld-Bytes werden am Ende jeder Wiederholung der Datengruppe eingefügt, die die OCCURS-Klausel enthält, um sicherzustellen, dass alle Wiederholungen von Tabellendatenfeldern an derselben Art von Grenze beginnen. Im Beispiel 2-10 beginnen alle Wiederholungen von D ein Byte hinter einer Doppelwortgrenze.

    Beispiel 2-10

    Wiederholungen von Füllfeld-Bytes in Tabellen

    01 A.
       02 B  PICTURE X.
       02 C  OCCURS 10 TIMES.
          03 D PICTURE X.
         [03 Füllfeld-Bytes PICTURE XX. Eingefügt vom Compiler.]
          03 E PICTURE S9(4)V99 COMP SYNC.
          03 F PICTURE S9(4) COMP SYNC.
          03 G PICTURE X(5).
         [03 Füllfeld-Bytes PICTURE XX. Eingefügt vom Compiler.]
    

    Falls ausgerichtete Datenfelder, definiert als BINARY, COMPUTATIONAL, COMPUTATIONAL-1, COMPUTATIONAL-2, COMPUTATIONAL-5 oder INDEX, einem Eintrag mit einer OCCURS DEPENDING-Klausel folgen, so werden Füllfeld-Bytes auf der Basis des Feldes dazugezählt, das mit der Maximalzahl wiederholt wird. Ist die Länge dieses Feldes nicht durch das von den Daten benötigte m teilbar, dann ergeben nur bestimmte Werte des bei der DEPENDING-Angabe verwendeten Datennamens eine richtige Ausrichtung der Felder. Der Programmierer sollte sich dieser Situation bewusst sein und sie zu vermeiden versuchen. Diese Werte sind solche, bei denen die Länge des Datenfeldes, multipliziert mit der Anzahl der Wiederholungen plus der Zahl der Füllfeld-Bytes, die auf der Basis der maximalen Wiederholungszahl berechnet wurden, durch m ohne Rest teilbar ist.

    Beispiel 2-11

    Wiederholungen von Füllfeld-Bytes in Tabellen mit DEPENDING-Angabe

    01  A.
        02  B   PICTURE 99.
        02  C   PICTURE X OCCURS 50 TO 99 TIMES
                DEPENDING ON B.
       [02  Füllfeld-Byte PICTURE X. Eingefügt vom Compiler.]
        02  D   PICTURE S99 COMP SYNC.
    

    Sind in diesem Beispiel Bezugnahmen zu D notwendig, so ist B auf ungerade Werte beschränkt.

    01  A.
        02  B   PICTURE 999.
        02  C   PICTURE XX OCCURS 20 TO 99 TIMES
                DEPENDING ON B.
       [02  Füllfeld-Bytes PICTURE X. Eingefügt vom Compiler.]
        02  D   PICTURE S99 COMP SYNC.

    In diesem Beispiel ergeben alle Werte von B richtige Bezugnahmen auf D.

  • Ausrichtung von Datensätzen

    Alle Satzbeschreibungen (01-Stufen) in allen Kapiteln des Datenteils beginnen an der Doppelwortgrenze.

  • Füllfeld-Bytes zwischen Datensätzen

    Wenn Datensätze, die ausgerichtete Datenfelder enthalten, zu blocken sind, so muss der Programmierer sicherstellen, dass alle Datensätze nach dem ersten Datensatz im Ein-/Ausgabe-Speicherbereich die richtige Grenzenausrichtung haben. Dies ist jedoch nur nötig, wenn die Daten blockweise zu verarbeiten sind (locate mode). COBOL2000 verwendet diesen Modus nicht.