Bonjour,

Je vous propose un nouvel élément à utiliser : Remplacer chaine par une chaine de longueur différente

INSPECT REPLACING en Cobol ne permet de remplacer dans une chaine de caractères une chaine spécifique que par une chaine de meme longueur.

Ainsi vous pouvez donner l'ordre

INSPECT w-ZONE replacing "TOTO" by "ZOZO", mais vous avez une erreur si vous donner l'ordre

INSPECT w-ZONE replacing "TOTO" by "T"le code qui suit donne une méthode pour le faire par une astuce et sans trop se fatiguer dans l'exemple donné on remplace " 000000;" par ";"

voila la portion de code qui le fait l'astuce vient de l'utilisation de deux séparateurs (qui ne doivent pas figurer dans le texte de base) dont la longueur totale représente avec la chaine remplacante un longueur égale à la chaine à remplacer.





Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
              move 0 to w-tally

                inspect w-ficent1 tallying w-tally

                for all "000000;"

*         On obtient le nombre de fois que la chaine a remplacer figure

                if (w-tally > 0)

* On remplace la chaine avec une chaine de meme longueur contenant des séparateurs étranges

                perform varying w-i from 1 by 1

                until w-i > w-tally

                inspect w-ficent1 replacing 

                first

                " 000000;" by ";(@)(**)"

                unstring w-ficent1 delimited by "(**)"

                into w-prient1 w-secent1

                end-unstring

* ces séparateurs permettent de reconstituer la chaine 

                string w-prient1 delimited by "(@)"

                w-secent1 delimited by size

                into

                w-ficent1

                end-string

                end-perform

                end-if[




Le code a télécharger est relatif à la transformation d'un fichier texte pour que la séquence 000000; soit remplacé par ;

le code fonctionne sous Cobol microfocus mais à mon avis il fonctionnera sans problème sur un mainframe

Qu'en pensez-vous ?