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