« COBOL/Opérations sur les chaînes » : différence entre les versions

Contenu supprimé Contenu ajouté
Guillpetiot (discussion | contributions)
→‎Conversion de caractères : ajout d'un exemple
Guillpetiot (discussion | contributions)
mAucun résumé des modifications
Ligne 21 :
 
Il est possible de remplacer des caractères dans une chaîne, utilisons pour cela l'instruction INSPECT définie comme suit :
 
<source lang="cobol">INSPECT chaine CONVERTING s1 TO s2</source>
 
où chaine, s1 et s2 sont des chaînes de caractères. Les caractères de chaine vont être remplacés en respectant cette règle : des correspondances vont être établies position par position entre les caractères de s1 et s2, pour chaque position, le caractère de s1 sera remplacé (dans chaine) par le caractère de s2 se trouvant à cette même position.
Ligne 27 ⟶ 28 :
Voici par exemple une instruction qui remplace dans la chaîne s toutes les voyelles minuscules par leur équivalent majuscule :
 
<source lang="cobol">INSPECT s CONVERTING "aeiouy" TO "AEIOUY"</source>
 
===Exemple : Jeu du pendu===
Ligne 33 ⟶ 34 :
Et voici un programme complet illustrant cette instruction : le jeu du pendu dans lequel vous devez deviner les lettres d'un mot (ici, "mammouth").
 
<source lang="cobol">
* IDENTIFICATION DIVISION.
* PROGRAM-ID.IDENTIFICATION penduDIVISION.
000002 PROGRAM-ID. concatpendu.
*
* DATA DIVISION.
* WORKING-STORAGEDATA SECTIONDIVISION.
000005 WORKING-STORAGE SECTION.
* 77 chaine PIC X(20) VALUE "mammouth".
* 77 chaine-c PIC X(20) VALUE "mammouth".
* 77 chaine-c PIC X(20).
77 lettres PIC X(26) VALUE "azertyuiopqsdfghjklmwxcvbn".
* 77 lettres-p PIC X(26) VALUE ALL "_".
* 77 char PIC X.
*
* PROCEDURE DIVISION.
* pendu.
* MOVE chaine TO chaine-c.
* INSPECT chaine-c CONVERTING lettres TO lettres-p.
* DISPLAY chaine-c.
* PERFORM TEST AFTER UNTIL chaine = chaine-c
* ACCEPT char
* INSPECT lettres CONVERTING char TO "_"
* MOVE chaine TO chaine-c
* INSPECT chaine-c CONVERTING lettres TO lettres-p
* DISPLAY chaine-c
* END-PERFORM.
* STOP RUN.
* END PROGRAM pendu.</source>
 
==Concaténation de chaînes de caractères==
Ligne 63 ⟶ 65 :
Nous pouvons concaténer plusieurs chaînes de caractères, c'est-à-dire les mettre "bout-à-bout" à l'aide de l'instruction STRING qui a cette forme :
 
<source lang="cobol">STRING {s [DELIMITED c]} ...
INTO z [POINTER k]</source>
 
Entre les mots-clés STRING et INTO figure une liste de chaînes de caractères, ce sont ces chaînes qui seront concaténées. Pour chacune d'elles, vous pouvez préciser la clause DELIMITED dans laquelle vous indiquez la chaîne que vous utiliserez pour délimiter cette chaîne (ici c).
Ligne 72 ⟶ 74 :
Voici un programme d'exemple dans lequel 3 chaînes (correspondant à un jour, un mois et une année) vont être concaténées pour n'en former qu'une seule (une date) :
 
<source lang="cobol">
000001 IDENTIFICATION DIVISION.
* 000001 IDENTIFICATION DIVISION.
000002 PROGRAM-ID. concat.
000002 PROGRAM-ID. extractionconcat.
000003
000004 DATA DIVISION.
* 000004 DATA DIVISION.
000005 WORKING-STORAGE SECTION.
000005 WORKING-STORAGE SECTION.
000006 77 j PIC 99 VALUE 22.
000007000006 77 mj PIC 99 VALUE 1222.
000008000007 77 am PIC 999999 VALUE 200812.
000009000008 77 da PIC 99/99/9999 VALUE 2008.
000006000009 77 jd PIC 99 VALUE 22/99/9999.
000010
000011 PROCEDURE DIVISION.
000012 main.
000013 STRING j "/" m "/" a INTO d.
000014 DISPLAY d.
000015000014 STOPDISPLAY RUNd.
000015 STOP RUN.
000016 END PROGRAM concat.</source>
 
==Extraction de chaînes de caractères==
Ligne 93 ⟶ 96 :
Il est également possible d'effectuer l'opération inverse : extraire plusieurs sous-chaînes à partir d'une seule chaîne. Pour cela, nous utilisons l'instruction UNSTRING dont le format est le suivant :
 
<source lang="cobol">UNSTRING s [DELIMITED c]
INTO z ... [POINTER k]</source>
 
La "chaîne-souche" est celle qui suit UNSTRING (ici s), les sous-chaînes suivent INTO. La clause optionnelle DELIMITED permet de préciser quel sera le séparateur utilisé pour délimiter les sous-chaînes. La clause POINTER, optionnelle, permet de stocker dans un compteur (ici k) le nombre de caractères traités (l'extraction débute à la position de ce pointeur).
Ligne 100 ⟶ 103 :
Pour bien comprendre, voici un autre programme d'exemple, il permet de décomposer une date au format 99/99/9999 en un jour, un mois et une année :
 
<source lang="cobol">
000001 IDENTIFICATION DIVISION.
000001 IDENTIFICATION DIVISION.
000002 PROGRAM-ID. extraction.
000002 PROGRAM-ID. extraction.
000003
000004 DATA DIVISION.
000004 DATA DIVISION.
000005 WORKING-STORAGE SECTION.
000005 WORKING-STORAGE SECTION.
000006 77 j PIC 99.
000007000006 77 mj PIC 99.
000008000007 77 am PIC 999999.
000008 77 a PIC 9999.
000009 77 d PIC 99/99/9999 VALUE "22/12/2008".
000010
000011 PROCEDURE DIVISION.
000012 main.
000013 UNSTRING d DELIMITED "/" INTO j m a.
000014 DISPLAY j SPACE m SPACE a.
000015 STOP RUN.
000016 END PROGRAM extraction.</source>
 
La clause DELIMITED précise que la chaîne sera découpée selon le séparateur "/".