Nous avons un logiciel qui utilise des noms de zone dans un fichier commençant par £. La compilation échoue. Comment faire ??? renommer les noms de zone ??? si oui comment
Nous avons un logiciel qui utilise des noms de zone dans un fichier commençant par £. La compilation échoue. Comment faire ??? renommer les noms de zone ??? si oui comment
Les habitudes ont la peau dure, surtout les mauvaises.Envoyé par Duchemole
Remède
1/ Crée un ALIAS de ces zones dans un fichier logique.
Exemple. Je crée le logique MonLogique :
2/ Fais un COPY DD-ALL-FORMATS dans ton programme Cobol :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 A R RCD PFILE(MonPFAvec£) A £ZONE1 ALIAS(ZONE1) A ZONE2 A £ZONE3 ALIAS(ZONE3) A . A . A . A K £ZONE1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 COPY DD-ALL-FORMATS OF MonLogique.
- Le COPY DD copie le nom ALIAS des colonnes du fichier, alors que le COPY DDS copie le nom des colonnes du fichier sans tenir compte du nom alias.
- La clé sera utilisée dans le programme sous la forme du nom alias, c'est à dire ZONE1 et non pas £ZONE1 dans l'exemple ci-dessus.
Merci pour votre réponse, c'est ce que j'ai fais mais hélas une multitude de fichiers de la sorte d'où ma question.
Alors je crois malheureusement qu'il ne te reste plus qu'à recréer autant de logiques qu'il y a de fichiers concernés par ton application en utilisant les alias. Sélectionne les logiques concernés seulement et pas tous les fichiers et crée par SQL des index plutôt que des LF car les performances seront meilleures (pagesize). Les chemins d'accés seront partagés avec les logiques existants donc pas de souci d'espace disque.
Il y aurait bien également la solution bâtarde consistant à jouer avec le CCSID de tes sources Cobol de façon à ce que le compilateur accepte le caractère "£". Tu dois avoir affaire à un logiciel US et dans ce cas tu pourrais travailler sous CCSID 37, mais ce n'est certainement pas une méthode à conseiller car même si tu résouds ton pb de compil, tu vas te casser le nez plus tard à coup sûr.
tu as essayé le "REPLACING .. BY .."
exemple :
avec TEST.cpy :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 COPY TEST REPLACING £TAVAR-1 BY VAR-1 £TAVAR-2 BY VAR-2 £TAVAR-3 BY VAR-3
devriendrait dans la compile :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 01 £TAVAR-1. 05 £TAVAR-2 pic X. 05 £TAVAR-3 pic X.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 01 VAR-1. 05 VAR-2 pic X. 05 VAR-3 pic X.
@delphine35,
Ce que tu proposes ne marchera pas en ILE Cobol mais ça doit je pense marcher sous mainframe.
J'ai vu qu'après que s'etait sous Iseries.
Sous mainframe, je sais pas, mais ca fonctionne très bien sous Unix
Bon courage, pour trouver
Bonjour.
Moi, j'utiliserais COPY DDSR, elle permet de substituer les caractères spéciaux
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 A £RT_CODE 6S 0 A £RT_NOM 20A A £RT_NOMA 20A A £RT_ADRF 20A A £RT_AFRA 20A
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 COPY DDS-ALL-FORMATS OF SPECAR. +000004 05 SPECARRD REDEFINES SPECAR-RECORD. +000005 06 £RT_CODE PIC S9(6). +000006 06 £RT_NOM PIC X(20). +000007 06 £RT_NOMA PIC X(20). +000008 06 £RT_ADRF PIC X(20). +000009 06 £RT_AFRA PIC X(20).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 COPY DDSR-ALL-FORMATS OF SPECAR. +000005 06 NRT-CODE PIC S9(6). +000006 06 NRT-NOM PIC X(20). +000007 06 NRT-NOMA PIC X(20). +000008 06 NRT-ADRF PIC X(20). +000009 06 NRT-AFRA PIC X(20).Tu peux même utiliser un préfixe avec la clause PREFIX BY "XXX".The DDSR Option: The DDSR option does everything that the DDS option does. It also copies the internal DDS field names in the specified DDS format, replacing the invalid COBOL characters @, #, $, and _ with the valid COBOL characters A, N, D, and - accordingly. This option also removes any underscores from the ends of the field names.
Tu as tout à fait raison Hédhili, c'est LA bonne solution en effet
Je ne connaissais pas "DDSR".
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager