Condividi tramite


Righe ridimensionate in modo variabile

Quando l'ultima colonna di un record è una stringa, la riga può essere ridimensionata in modo variabile. La dimensione può variare tra zero e la dimensione massima specificata nella clausola picture. Quando si dispone di righe di dimensioni variabili, l'applicazione deve specificare in modo esplicito le dimensioni di ogni riga prima dell'invio della riga.

Il campo della dimensione reale non è visibile nel lato dell'Automazione. L'ambiente di runtime di Transaction Integrator (TI) usa i servizi di automazione per determinare le dimensioni dei dati di input. Quando l'ambiente di runtime TI invia i dati all'host, imposta automaticamente il campo dimensioni effettive.

L'Importazione guidata COBOL non genera mai un set di record con righe di dimensioni variabili. Visualizzare le proprietà per il recordset che contiene le righe di dimensioni variabili. La proprietà Righe a grandezza variabile consente all'utente di configurare manualmente questa opzione per un set di record specifico. La proprietà Righe di dimensioni variabili offre opzioni avanzate. È possibile specificare che la variabile delle dimensioni effettive delle righe è un binario a mezza parola o a parola intera. La variabile di dimensione effettiva includerà se stessa o includerà solo le dimensioni della riga.

Nell'esempio di COBOL seguente viene illustrato come l'applicazione host invia righe di dimensioni variabili. Il campo di lunghezza è incluso nelle dimensioni della riga:

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.  
  

L'esempio COBOL seguente illustra come l'applicazione host invia righe di dimensioni variabili. Il campo di lunghezza non è incluso nelle dimensioni della riga:

       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.  
  

Vedere anche

Definizione di una tabella a lunghezza variabile con la clausola OCCURS DEPENDING
Stringhe di dimensioni variabili
Campi finali delimitati