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
43move 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 ?








Répondre avec citation
Partager