Partager via


Lignes de taille variable

Lorsque la dernière colonne d’un enregistrement est une chaîne, la ligne peut être dimensionnée de manière variable. Sa taille peut varier entre zéro et la taille maximale spécifiée dans la clause d’image. Lorsque vous avez des lignes de taille variable, votre application doit spécifier explicitement la taille de chaque ligne avant l’envoi de la ligne.

Le champ taille réelle n’est pas visible côté Automation. L’environnement d’exécution TI (Transaction Integrator) utilise les services Automation pour déterminer la taille des données d’entrée. Lorsque l’environnement d’exécution TI envoie des données à l’hôte, il définit automatiquement le champ de taille réelle.

L’Assistant Importation de COBOL ne crée jamais de jeu d’enregistrements comportant des lignes de taille variable. Affichez les propriétés du jeu d’enregistrements qui contient les lignes de taille variable. La propriété Lignes de taille variable permet à l’utilisateur de configurer manuellement cette option pour un jeu d’enregistrements spécifique. La propriété Lignes de taille variable offre des options avancées . Vous pouvez spécifier que la variable de taille de ligne réelle est un binaire à demi-mot ou à mot intégral. La variable de taille réelle s’inclut elle-même ou inclut uniquement la taille de la ligne.

L’exemple COBOL suivant montre comment l’application hôte envoie des lignes de taille variable. Le champ longueur est inclus dans la taille de ligne :

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’exemple COBOL suivant montre comment l’application hôte envoie des lignes de taille variable. Le champ de longueur n’est pas inclus dans la taille de ligne :

       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.  
  

Voir aussi

Définition d’un tableau de longueur variable avec la clause OCCURS DEPENDING
Chaînes de taille variable
Champs finaux délimités