Archives par mot-clé : INSPECT

8.5 L’INSTRUCTION INSPECT

Cette instruction (INSPECT) permet de compter le nombre de fois qu’une configuration particulière de caractères apparaît dans une zone de données et/ou de remplacer ces caractères par d’autres. Cette instruction ne s’applique pas aux variables avec index même à un niveau 01.

Format 1 :

Nom-de-donnée-1 est la zone que l’on désire inspecter. Elle doit être en USAGE DISPLAY.

TALLYING signifie que l’on désire compter le nombre de fois qu’une configuration de caractères désignée par nom-de-donnée-3 ou litéral-3 apparaît dans nom-de-donnée-1 et que le résultat du comptage soit placé dans nom-de-donnée-2.

ALL signifie que toutes les occurrences doivent être comptées. Les caractères déjà utilisés dans un comptage ne sont jamais réutilisés.
Exemple: INSPECT VARA TALLYING COMPTEUR FOR ALL "NN".
Si VARA contient “NNNNN+NNN” COMPTEUR contiendra après l’opération de comptage 3, car le 5ème et le 9ème N ne peuvent pas être regroupés avec ceux déjà utilisés.

LEADING signifie que seules les premières apparitions contiguës doivent être comptées.
Exemple: INSPECT VARB TALLYING COMPTEUR FOR LEADING "N".
Si VARB contient “NN+NNN+NNN” COMPTEUR contiendra 2 puisqu’il y a 2 N en tête.
L’opération VARE contiendra “00000000”.

CHARACTERS compte le nombre de caractères contenu dans nom-de-donnée-1.
Exemple: INSPECT VARC TALLYING COMPTEUR FOR CHARACTERS.
Si VARC contient “N&N+MOI+123” COMPTEUR contiendra 11.
Pour rendre l’usage de cette instruction plus partiel nous disposons des options BEFORE et AFTER.

BEFORE INITIAL : (nom-de-donnée-4 ou litéral-4) signifie que le comptage doit s’arrêter dès que la première apparition du ou des caractères désignés est rencontrée.
Exemple:
INSPECT VARD TALLYING COMPTEUR FOR CHARACTERS
BEFORE INITIAL "+".

Si VARD contient “N&N+MOI++123” COMPTEUR contiendra 3.

AFTER INITIAL est l’inverse du BEFORE, on compte les caractères qui se trouvent après nom-dedonnée-4 ou litéral-4.
Exemple:
INSPECT VARDAF TALLYING COMPTEUR FOR CHARACTERS
AFTER INITIAL "+".

Si VARD contient “N&N+MOI++123” COMPTEUR contiendra 8.

REPLACING : indique que nous voulons remplacer certains caractères par d’autres.

CHARACTERS, tous les caractères de nom-de-donnée-1 doivent être remplacés par le caractère désigné par nom-de-donnée-5 ou litéral-5.
Exemple: INSPECT VARE REPLACING CHARACTERS BY "0".
Si VARE contient “N&N+MOI3” après l’opération VARE contiendra “00000000”.

ALL indique que toutes les occurrences désignées par nom-de-donnée-7 ou litéral-7 doivent être remplacées par nom-de-donnée-8 ou litéral-8. Il n’y a jamais réutilisation de caractères déjà utilisés dans une occurrence préalable.
Exemple: INSPECT VARF REPLACING ALL "N" BY "0".
Si VARF contient “NN+NT23N” après l’opération VARF contiendra “00+0T230”.

LEADING indique que le remplacement s’arrêtera dés qu’un autre caractère que nom-de-donnée-7 est rencontré.

FIRST indique que le remplacement ne doit être effectué que pour la première apparition de nom-dedonnée-7.
Exemple: INSPECT VARG REPLACING FIRST "N" BY "0".
Si VARG contient “NN+NT23N” après l’opération VARG contiendra “0N+NT23N”.

Les options BEFORE et AFTER sont utilisées de la même manière que dans TALLYING.

Les clauses TALLYING et REPLACING peuvent être utilisées en même temps.
Exemple:
INSPECT VARTOT TALLYING COMPTE FOR CHARACTERS
BEFORE “+” REPLACING ALL “N” BY ““.
Si VARTOT contient “NN+NT23N” après l’opération VARTOT contiendra “+T23*” et COMPTE contiendra 2.

!!!!Le programmeur doit initialiser nom-de-donnée-2 à zéro car TALLYING additionne sans remettre à zéro.!!!!

Format 2:

Exemple:
INSPECT VAR11 CONVERTING "ABCD" TO "WXYZ"
AFTER QUOTE BEFORE "=".

Si VAR11 contient (AC”AEBDFBCD=AB”D) alors le résultat est (AC”WEXZFXYZ=AB”D)

INSPECT CHAINE CONVERTING MIN TO MAX
Avec MIN pic x(26) value ‘abc…yz’.
Et Max pic x(26) value ‘A Z’.

Remarque :
Inspect ZONE TALLYING CPT1 FOR ALL ‘A’
                                                         CPT2 FOR ALL ‘E’
                                                         CPT3 FOR ALL ‘I

Exemple – INSPECT TALLYING REPLANCING

Voici un programme utilisant le INSPECT TALLYING REPLANCING :

IDENTIFICATION DIVISION.
PROGRAM-ID.  INSPECT.
AUTHOR.      LA COMMUNAUTE DU COBOL.

ENVIRONMENT DIVISION.                                            
CONFIGURATION SECTION.                                           
SPECIAL-NAMES.                                                   
    DECIMAL-POINT IS COMMA. 

DATA DIVISION.
WORKING-STORAGE SECTION.

01  WS-AUXILIARES.
    05  ITEM-1        PIC X(014)  VALUE 'EFABDBCGABEFGG'.
    05  ITEM-2        PIC X(006)  VALUE 'BABABC'.
    05  ITEM-3        PIC X(004)  VALUE 'BBBC'.
    05  COMPTEUR-0    PIC 9(006)  VALUE ZEROES.
    05  COMPTEUR-1    PIC 9(006)  VALUE ZEROES.
    05  COMPTEUR-2    PIC 9(006)  VALUE ZEROES.
    05  COMPTEUR-3    PIC 9(006)  VALUE ZEROES.
    05  COMPTEUR-4    PIC 9(006)  VALUE ZEROES.

PROCEDURE DIVISION.

001-INIT.

Exemple 1

    INSPECT ITEM-1 TALLYING
            COMPTEUR-0 FOR ALL "AB", ALL "D"
            COMPTEUR-1 FOR ALL "BC"
            COMPTEUR-2 FOR LEADING "EF" 
            COMPTEUR-3 FOR LEADING "B" 
            COMPTEUR-4 FOR CHARACTERS

    INSPECT ITEM-1 REPLACING
            ALL "AB" BY "XY", "D" BY "X"
            ALL "BC" BY "VW"
            LEADING "EF" BY "TU" 
            LEADING "B" BY "S" 
            FIRST   "G" BY "R" 
            FIRST   "G" BY "P" 
            CHARACTERS BY "Z"

    DISPLAY 'ITEM-1     : ' ITEM-1
    DISPLAY 'COMPTEUR-0 : ' COMPTEUR-0  
    DISPLAY 'COMPTEUR-1 : ' COMPTEUR-1  
    DISPLAY 'COMPTEUR-2 : ' COMPTEUR-2  
    DISPLAY 'COMPTEUR-3 : ' COMPTEUR-3  
    DISPLAY 'COMPTEUR-4 : ' COMPTEUR-4  

* Resultat de test:

* ITEM-1     : TUXYXVWRXYZZPZ
* COMPTEUR-0 : 000003
* COMPTEUR-1 : 000001
* COMPTEUR-2 : 000001
* COMPTEUR-3 : 000000
* COMPTEUR-4 : 000005

Exemple 2

    MOVE ZEROES TO COMPTEUR-0 COMPTEUR-1 COMPTEUR-2 
                   COMPTEUR-3 COMPTEUR-4        
  
    INSPECT ITEM-2 TALLYING
            COMPTEUR-0 FOR ALL "AB", ALL "D"
            COMPTEUR-1 FOR ALL "BC"
            COMPTEUR-2 FOR LEADING "EF" 
            COMPTEUR-3 FOR LEADING "B" 
            COMPTEUR-4 FOR CHARACTERS

    INSPECT ITEM-2 REPLACING
            ALL "AB" BY "XY", "D" BY "X"
            ALL "BC" BY "VW"
            LEADING "EF" BY "TU" 
            LEADING "B" BY "S" 
            FIRST   "G" BY "R" 
            FIRST   "G" BY "P" 
            CHARACTERS BY "Z"

    DISPLAY 'ITEM-2     : ' ITEM-2
    DISPLAY 'COMPTEUR-0 : ' COMPTEUR-0  
    DISPLAY 'COMPTEUR-1 : ' COMPTEUR-1  
    DISPLAY 'COMPTEUR-2 : ' COMPTEUR-2  
    DISPLAY 'COMPTEUR-3 : ' COMPTEUR-3  
    DISPLAY 'COMPTEUR-4 : ' COMPTEUR-4  

* Resultat de test:

* ITEM-2     : SXYXYZ
* COMPTEUR-0 : 000002
* COMPTEUR-1 : 000000
* COMPTEUR-2 : 000000
* COMPTEUR-3 : 000001
* COMPTEUR-4 : 000001

Exemple 3

    MOVE ZEROES TO COMPTEUR-0 COMPTEUR-1 COMPTEUR-2 
                   COMPTEUR-3 COMPTEUR-4        
  
    INSPECT ITEM-3 TALLYING
            COMPTEUR-0 FOR ALL "AB", ALL "D"
            COMPTEUR-1 FOR ALL "BC"
            COMPTEUR-2 FOR LEADING "EF" 
            COMPTEUR-3 FOR LEADING "B" 
            COMPTEUR-4 FOR CHARACTERS

    INSPECT ITEM-3 REPLACING
            ALL "AB" BY "XY", "D" BY "X"
            ALL "BC" BY "VW"
            LEADING "EF" BY "TU" 
            LEADING "B" BY "S" 
            FIRST   "G" BY "R" 
            FIRST   "G" BY "P" 
            CHARACTERS BY "Z"

    DISPLAY 'ITEM-3     : ' ITEM-3
    DISPLAY 'COMPTEUR-0 : ' COMPTEUR-0  
    DISPLAY 'COMPTEUR-1 : ' COMPTEUR-1  
    DISPLAY 'COMPTEUR-2 : ' COMPTEUR-2  
    DISPLAY 'COMPTEUR-3 : ' COMPTEUR-3  
    DISPLAY 'COMPTEUR-4 : ' COMPTEUR-4  

* Resultat de test:

* ITEM-3     : SSVW
* COMPTEUR-0 : 000000
* COMPTEUR-1 : 000001
* COMPTEUR-2 : 000000
* COMPTEUR-3 : 000002
* COMPTEUR-4 : 000000

Exemple – INSPECT TALLYING

Voici un programme utilisant le INSPECT TALLYING :

IDENTIFICATION DIVISION.
PROGRAM-ID.  INSPECT.
AUTHOR.      LA COMMUNAUTE DU COBOL.

ENVIRONMENT DIVISION.                                            
CONFIGURATION SECTION.                                           
SPECIAL-NAMES.                                                   
    DECIMAL-POINT IS COMMA. 

DATA DIVISION.
WORKING-STORAGE SECTION.

01  WS-AUXILIARES.
    05  CHAMP-1         PIC X(006)   VALUE '000670'.
    05  CHAMP-2         PIC X(006)   VALUE '123450'.
    05  CHAMP-3         PIC X(006)   VALUE '007800'.
    05  COMPTEUR-1      PIC 9(006)   VALUE ZEROES.
    05  COMPTEUR-2      PIC 9(006)   VALUE ZEROES.
    05  COMPTEUR-3      PIC 9(006)   VALUE ZEROES.

PROCEDURE DIVISION.

001-INICIO.

    INSPECT CHAMP-1 TALLYING COMPTEUR-1 FOR ALL ZEROES

    INSPECT CHAMP-2 TALLYING COMPTEUR-2 FOR CHARACTERS
            BEFORE INITIAL ZEROES 

    INSPECT CHAMP-3 TALLYING COMPTEUR-3 FOR LEADING ZEROES

    DISPLAY 'COMPTEUR-1 : ' COMPTEUR-1  
    DISPLAY 'COMPTEUR-2 : ' COMPTEUR-2  
    DISPLAY 'COMPTEUR-3 : ' COMPTEUR-3  

    STOP RUN.

* Resultat de test:

* COMPTEUR-1 : 000004
* COMPTEUR-2 : 000005
* COMPTEUR-3 : 000002

Exemple – INSPECT FUNCTION REVERSE

Voici plusieurs exemples de programme utilisant le INSPECT FUNCTION REVERSE :

Exemple 1

IDENTIFICATION DIVISION.
PROGRAM-ID. CARACTERES.
DATA DIVISION. 
WORKING-STORAGE SECTION.
01  WS-AUXILIARES.
    05  WS-FIN       PIC 9(09)  VALUE 0.
    05  WS-IND       PIC 9(09)  VALUE 1.
    05  WS-TAILLE    PIC 9(09)  VALUE 0.
    05  WS-TAILLE-1  PIC 9(09)  VALUE 0.
    05  WS-RESULTAT  PIC 9(09)  VALUE 0.
    05  WS-CHAMP     PIC X(30)  VALUE 'LA COMMUNAUTE'.

PROCEDURE DIVISION.

INSPECT FUNCTION REVERSE (WS-CHAMP) 
        TALLYING WS-TAILLE-1 FOR LEADING SPACES

DISPLAY 'Nombre de blancs après le dernier caractère significatif '
DISPLAY 'WS-TAILLE-1 - ' WS-TAILLE-1.

COMPUTE WS-RESULTAT = FUNCTION LENGTH (WS-CHAMP)
MOVE 0 TO WS-FIN WS-TAILLE
PERFORM VARYING WS-IND FROM 1 BY 1 
     UNTIL WS-IND GREATER THAN WS-RESULTAT
     IF WS-CHAMP(WS-IND:1) NOT EQUAL SPACES
        ADD 1 TO WS-TAILLE
     END-IF
END-PERFORM

DISPLAY 'Nombre de caractères dans le champ'
DISPLAY 'WS-TAILLE   - ' WS-TAILLE.
STOP RUN.

Resultat de test:

Nombre de blancs après le dernier caractère significatif 
WS-TAILLE-1 - 000000017

Nombre de caractères dans le champ
WS-TAILLE   - 000000012

Exemple 2

IDENTIFICATION DIVISION.
PROGRAM-ID. CARACTERES.
DATA DIVISION. 
WORKING-STORAGE SECTION.
01  WS-AUXILIARES.
    05  WS-FIN       PIC 9(09)  VALUE 0.
    05  WS-IND       PIC 9(09)  VALUE 1.
    05  WS-TAILLE    PIC 9(09)  VALUE 0.
    05  WS-TAILLE-1  PIC 9(09)  VALUE 0.
    05  WS-RESULTAT  PIC 9(09)  VALUE 0.
    05  WS-CHAMP     PIC X(50)  VALUE 'LA COMMUNAUTE DU COBOL'.

PROCEDURE DIVISION.

INSPECT FUNCTION REVERSE (WS-CHAMP) 
        TALLYING WS-TAILLE-1 FOR LEADING SPACES

DISPLAY 'Nombre de blancs après le dernier caractère significatif  '
DISPLAY 'WS-TAILLE-1 - ' WS-TAILLE-1.

COMPUTE WS-RESULTAT = FUNCTION LENGTH (WS-CHAMP)
MOVE 0 TO WS-FIN WS-TAILLE
PERFORM VARYING WS-IND FROM 1 BY 1 
     UNTIL WS-IND GREATER THAN WS-RESULTAT
     IF WS-CHAMP(WS-IND:1) NOT EQUAL SPACES
        ADD 1 TO WS-TAILLE
     END-IF
END-PERFORM

DISPLAY 'Nombre de caractères dans le champ'
DISPLAY 'WS-TAILLE   - ' WS-TAILLE.
STOP RUN.

Resultat de test:

Nombre de blancs après le dernier caractère significatif  
WS-TAILLE-1 - 000000028

Nombre de caractères dans le champ
WS-TAILLE   - 000000020

Exemple 3

IDENTIFICATION DIVISION.
PROGRAM-ID. CARACTERES.
DATA DIVISION. 
WORKING-STORAGE SECTION.
01  WS-AUXILIARES.
    05  WS-FIN       PIC 9(09)  VALUE 0.
    05  WS-IND       PIC 9(09)  VALUE 1.
    05  WS-TAILLE    PIC 9(09)  VALUE 0.
    05  WS-TAILLE-1  PIC 9(09)  VALUE 0.
    05  WS-RESULTAT  PIC 9(09)  VALUE 0.
    05  WS-CHAMP     PIC X(50)  VALUE 'LA C O M M U N A U T E DU COBOL'.

PROCEDURE DIVISION.

INSPECT FUNCTION REVERSE (WS-CHAMP) 
        TALLYING WS-TAILLE-1 FOR LEADING SPACES

DISPLAY 'Nombre de blancs après le dernier caractère significatif  '
DISPLAY 'WS-TAILLE-1 - ' WS-TAILLE-1.

COMPUTE WS-RESULT = FUNCTION LENGTH (WS-CHAMP)
MOVE 0 TO WS-FIN WS-TAILLE
PERFORM VARYING WS-IND FROM 1 BY 1 
     UNTIL WS-IND GREATER THAN WS-RESULT
     IF WS-CHAMP(WS-IND:1) NOT EQUAL SPACES
        ADD 1 TO WS-TAILLE
     END-IF
END-PERFORM

DISPLAY 'Nombre de caractères dans le champ'
DISPLAY 'WS-TAILLE   - ' WS-TAILLE.
STOP RUN.

Resultat de test:

Nombre de blancs après le dernier caractère significatif 
WS-TAILLE-1 - 000000019

Nombre de caractères dans le champ
WS-TAILLE   - 000000020

Exemple 4

IDENTIFICATION DIVISION.
PROGRAM-ID. CARACTERES.
DATA DIVISION. 
WORKING-STORAGE SECTION.
01  WS-AUXILIARES.
    05  WS-FIN       PIC 9(09)  VALUE 0.
    05  WS-IND       PIC 9(09)  VALUE 1.
    05  WS-TAILLE    PIC 9(09)  VALUE 0.
    05  WS-TAILLE-1  PIC 9(09)  VALUE 0.
    05  WS-RESULTAT  PIC 9(09)  VALUE 0.
    05  WS-CHAMP     PIC X(50)  VALUE 'LA COMM DU COBOL'.

PROCEDURE DIVISION.

INSPECT FUNCTION REVERSE (WS-CHAMP) 
        TALLYING WS-TAILLE-1 FOR LEADING SPACES

DISPLAY 'Nombre de blancs après le dernier caractère significatif  '
DISPLAY 'WS-TAILLE-1 - ' WS-TAILLE-1.

COMPUTE WS-RESULTAT = FUNCTION LENGTH (WS-CHAMP)
MOVE 0 TO WS-FIN WS-TAILLE
PERFORM VARYING WS-IND FROM 1 BY 1 
     UNTIL WS-IND GREATER THAN WS-RESULTAT
     IF WS-CHAMP(WS-IND:1) NOT EQUAL SPACES
        ADD 1 TO WS-TAILLE
     END-IF
END-PERFORM

DISPLAY 'Nombre de caractères dans le champ'
DISPLAY 'WS-TAILLE   - ' WS-TAILLE.
STOP RUN.

Resultat de test:

Nombre de blancs après le dernier caractère significatif 
WS-TAILLE-1 - 000000034

Nombre de caractères dans le champ
WS-TAILLE   - 000000013

Exemple 5

IDENTIFICATION DIVISION.
PROGRAM-ID. CARACTERES.
DATA DIVISION. 
WORKING-STORAGE SECTION.
01  WS-AUXILIARES.
    05  WS-TAILLE    PIC 9(09)  VALUE 0.
    05  WS-TAILLE-1  PIC 9(09)  VALUE 0.
    05  WS-RESULTAT  PIC 9(09)  VALUE 0.
    05  WS-CHAMP     PIC X(30)  VALUE 'LA COMMUNAUTE        '.

PROCEDURE DIVISION.

INSPECT FUNCTION REVERSE (WS-CHAMP) 
        TALLYING WS-TAILLE-1 FOR LEADING SPACES

DISPLAY 'Nombre de blancs après le dernier caractère significatif  '
DISPLAY 'WS-TAILLE-1 - ' WS-TAILLE-1.
COMPUTE WS-RESULTAT = FUNCTION LENGTH (WS-CHAMP)
COMPUTE WS-RESULTAT = WS-RESULTAT - WS-TAILLE-1
DISPLAY 'Quantité de données jusqu'au dernier caractère significatif' 
DISPLAY 'WS-RESULTAT  - ' WS-RESULTAT
DISPLAY 'WS-CHAMP     - ' WS-CAMPO  (1:WS-RESULT)

STOP RUN.

Resultat de test:

Nombre de blancs après le dernier caractère significatif  
WS-TAILLE-1 - 000000017

Quantité de données jusqu'au dernier caractère significatif 
WS-RESULTAT  - 000000013
WS-CHAMP     - LA COMMUNAUTE

Exemple – INSPECT REPLACING

Voici un programme utilisant le INSPECT REPLACING :

IDENTIFICATION DIVISION.
PROGRAM-ID.  INSPECT.
AUTHOR.      LA COMMUNAUTE DU COBOL.

ENVIRONMENT DIVISION.                                            
CONFIGURATION SECTION.                                           
SPECIAL-NAMES.                                                   
    DECIMAL-POINT IS COMMA. 

DATA DIVISION.
WORKING-STORAGE SECTION.

01  WS-AUXILIARES.
    05  DATE-JOUR        PIC X(010)   VALUE '06-03-1951'.
    05  NUMERO-1         PIC X(008)   VALUE '44 21 11'.
    05  NUMERO-2         PIC X(006)   VALUE '442111'.
    05  NUMERO-3         PIC X(006)   VALUE '112111'.
    05  NUMERO-4         PIC X(006)   VALUE 'ABCXYZ'.

PROCEDURE DIVISION.

001-INIT.

    INSPECT DATE-JOUR REPLACING ALL '-' BY '/'                
    DISPLAY 'DATE-JOUR ' DATE-JOUR 
	 
    INSPECT NUMERO-1 REPLACING ALL SPACES BY '-'
    DISPLAY 'NUMERO-1  ' NUMERO-1 

    INSPECT NUMERO-2 REPLACING LEADING '4' BY '5'
    DISPLAY 'NUMERO-2  ' NUMERO-2 

    INSPECT NUMERO-3 REPLACING CHARACTERS BY '3'
            BEFORE INITIAL '2'
    DISPLAY 'NUMERO-3  ' NUMERO-3 

    INSPECT NUMERO-4 REPLACING FIRST 'X' BY 'Y'
    DISPLAY 'NUMERO-4  ' NUMERO-4 

    STOP RUN.

* Resultat de test:

* DATE-JOUR 06/03/1951
* NUMERO-1  44-21-11
* NUMERO-2  552111
* NUMERO-3  332111
* NUMERO-4  ABCYYZ

Exemple – INSPECT CONVERTING

Voici un programme utilisant le INSPECT CONVERTING :

IDENTIFICATION DIVISION.
PROGRAM-ID.  INSPECT.
AUTHOR.      LA COMMUNAUTE DU COBOL.

ENVIRONMENT DIVISION.                                            
CONFIGURATION SECTION.                                           
SPECIAL-NAMES.                                                   
    DECIMAL-POINT IS COMMA. 

DATA DIVISION.
WORKING-STORAGE SECTION.

01  WS-AUXILIARES.
    05  ITEM-1          PIC X(016) VALUE 'AC"AEBDFBCD#AB"D'. 
    05  ITEM-2          PIC X(026) VALUE "ABCDEFGHIJKLMNOPQRSTUVWXYZ".

PROCEDURE DIVISION.

001-INIT.

    DISPLAY "ITEM-1 AVANT  : " ITEM-1
    INSPECT ITEM-1 CONVERTING
            "ABCD" TO "XYZX" AFTER QUOTE BEFORE "#"
    DISPLAY "ITEM-1 APRES  : " ITEM-1

    DISPLAY "ITEM-2 AVANT  : " ITEM-2
    INSPECT ITEM-2 CONVERTING "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                           TO "abcdefghijklmnopqrstuvwxyz"
    DISPLAY "ITEM-2 APRES  : " ITEM-2
    STOP RUN.

* Resultat de test:

* ITEM-1 AVANT  : AC"AEBDFBCD#AB"D
* ITEM-1 APRES  : AC"XEYXFYZX#AB"D

* ITEM-2 AVANT  : ABCDEFGHIJKLMNOPQRSTUVWXYZ
* ITEM-2 APRES  : abcdefghijklmnopqrstuvwxyz