Freigeben über


Zeilen mit variabler Größe

Wenn die letzte Spalte in einem Datensatz eine Zeichenfolge ist, kann die Zeile variabel sein. Seine Größe kann zwischen null und der in der picture-Klausel angegebenen maximalen Größe variieren. Wenn Zeilen unterschiedlich groß sind, muss Ihre Anwendung explizit die Größe jeder Zeile angeben, bevor die Zeile gesendet wird.

Das Feld für die tatsächliche Größe ist auf der Automatisierungsseite nicht sichtbar. Die Transaction Integrator-Laufzeitumgebung (TI) verwendet Automation-Dienste, um die Größe der Eingabedaten zu bestimmen. Wenn die TI-Laufzeitumgebung Daten an den Host sendet, wird automatisch das Feld für die tatsächliche Größe festgelegt.

Der Assistent zum Importieren von COBOL erstellt niemals ein Recordset mit unterschiedlicher Größe von Zeilen. Rufen Sie Eigenschaften für das Recordset auf, das die Zeilen mit unterschiedlicher Größe enthält. Mit der Eigenschaft Zeilen mit Variabler Größe kann der Benutzer diese Option manuell für ein bestimmtes Recordset konfigurieren. Die Eigenschaft Zeilen mit Variabler Größe bietet erweiterte Optionen. Sie können angeben, dass die tatsächliche Zeilengrößenvariable eine Halb- oder Vollwort-Binärdatei ist. Die tatsächliche Größenvariable enthält sich selbst oder schließt nur die Größe der Zeile ein.

Das folgende COBOL-Beispiel zeigt, wie die Hostanwendung Zeilen mit unterschiedlicher Größe sendet. Das Längenfeld ist in der Zeilengröße enthalten:

01  CUSTOMER-DATA.  
    05  CUSTOMER-NUMBER                  PIC 9(9).  
    05  LAST-NAME                        PIC X(20).  
    05  FIRST-NAME                       PIC X(20).  
    05  INVOICE-COUNT                    PIC 9(7) COMP-3.  
    05  INVOICES OCCURS 50 TIMES DEPENDING ON INVOICE-COUNT.  
        10  INVOICE-DATA.  
            15  INVOICE-ROW-SIZE         PIC S9(4) COMP.  
             15  INVOICE-NUMBER           PIC 9(10).  
             15  INVOICE-DATE             PIC 9(7) COMP-3.  
             15  INVOICE-AMOUNT           PIC S9(13)V9(2) COMP-3.  
         10  INVOICE-DESCRIPTION          PIC X(4096).  
.  
.  
.  
            MOVE LENGTH OF CUSTOMER-DATA TO SEND-LENGTH.  
            SUBTRACT LENGTH OF INVOICES FROM SEND-LENGTH.  
            EXEC-CICS SEND FROM(CUSTOMER-DATA)  
                           LENGTH(SEND-LENGTH)  
                           END-EXEC.  
  
            PERFORM VARYING ROW FROM 1 BY 1 UNTIL ROW > INVOICE-COUNT  
                INSPECT INVOICE-DESCRIPTION TALLYING INVOICE-ROW-SIZE  
                    FOR CHARACTERS BEFORE INITIAL '   '  
                ADD LENGTH OF INVOICE-DATA TO INVOICE-ROW-SIZE  
                EXEC-CICS SEND FROM(INVOICE-ROW-SIZE)  
                               LENGTH(2)  
                               END-EXEC  
                EXEC-CICS SEND FROM(INVOICES(ROW))  
                               LENGTH(INVOICE-ROW-SIZE)  
                               END-EXEC  
            END-PERFORM.  
  

Das folgende COBOL-Beispiel zeigt, wie die Hostanwendung Zeilen mit unterschiedlicher Größe sendet. Das Längenfeld ist nicht in der Zeilengröße enthalten:

       01  CUSTOMER-DATA.  
          05  CUSTOMER-NUMBER                  PIC 9(9).  
          05  LAST-NAME                        PIC X(20).  
          05  FIRST-NAME                       PIC X(20).  
          05  INVOICE-COUNT                    PIC 9(7) COMP-3.  
          05  INVOICE-ROW-SIZE                 PIC S9(4) COMP.  
         05  INVOICES OCCURS 50 TIMES DEPENDING ON INVOICE-COUNT.  
             10  INVOICE-DATA.  
                  15  INVOICE-NUMBER           PIC 9(10).  
                  15  INVOICE-DATE             PIC 9(7) COMP-3.  
                  15  INVOICE-AMOUNT           PIC S9(13)V9(2) COMP-3.  
              10  INVOICE-DESCRIPTION          PIC X(4096).  
.  
.  
.  
            MOVE SIZE OF CUSTOMER-DATA TO SEND-LENGTH.  
            SUBTRACT LENGTH OF INVOICES FROM SEND-LENGTH.  
            SUBTRACT LENGTH OF INVOICE-ROW-SIZE FROM SEND-LENGTH.  
            EXEC-CICS SEND FROM(CUSTOMER-DATA)  
                           LENGTH(SEND-LENGTH)  
                           END-EXEC.  
  
            PERFORM VARYING ROW FROM 1 BY 1 UNTIL ROW > INVOICE-COUNT  
                INSPECT COMMENTS TALLYING INVOICE-ROW-SIZE  
                    FOR CHARACTERS BEFORE INITIAL '   '  
                ADD LENGTH OF INVOICE-DATA TO INVOICE-ROW-SIZE  
                EXEC-CICS SEND FROM(INVOICE-ROW-SIZE)  
                               LENGTH(LENGTH OF INVOIVE-ROW-SIZE)  
                               END-EXEC  
  
                EXEC-CICS SEND FROM(INVOICES(ROW))  
                               LENGTH(INVOICE-ROW-SIZE)  
                               END-EXEC  
            END-PERFORM.  
  

Weitere Informationen

Definieren einer Tabelle mit variabler Länge mit der OCCURS DEPENDING-Klausel
Zeichenfolgen mit variabler Größe
Gebundene endgültige Felder