IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Cobol Discussion :

Remplacement de nombreux caractères dans une chaîne


Sujet :

Cobol

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 28
    Points : 25
    Points
    25
    Par défaut Remplacement de nombreux caractères dans une chaîne
    hello,

    voici mon pb :

    je dois remplacer dans un string tous les caractères n'étant pas un chiffre, une des 26 lettres de l'alphabet ou un underscore par un underscore.

    ça en fait des caractères à remplacer...
    avec l'ordre INSPECT, je peux seulement remplacer un caractère précis par ordre

    quelqu'un aurait il une petite idée pour faire ça de manière plus élégante et surtout légère ?

  2. #2
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 28
    Points : 25
    Points
    25
    Par défaut
    bon j'ai réfléchi un peu et j'ai trouvé tout seul comme un grand

    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
    01 WS-CPT-CHAR PIC S9(4) COMP.
    
    PROCEDURE DIVISION.
    
    INITIALIZE   WS-CPT-CHAR    
    * je sais que le string à traiter (SIIM-REF-IMPRIME) fait 15 de longueur                          
    PERFORM UNTIL WS-CPT-CHAR >= 15                                             
        ADD 1 TO WS-CPT-CHAR                        
        IF SIIM-REF-IMPRIME (WS-CPT-CHAR:1)               
           NOT = X'C1'      
          ...  
    * je mets ici tout les hexa à ne PAS remplacer, plus court et j'évite les oublis.                         
                                             
            MOVE X'6D' TO SIIM-REF-IMPRIME (WS-CPT-CHAR:1)
        END-IF                              
    END-PERFORM
    c'est certainement plus élégant, quid de la légèreté ?

  3. #3
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par Jean_Peuplus Voir le message
    Bonjour.
    - Je pense que tu aurais pu utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PERFORM VARYING WS-CPT-CHAR FROM 1 BY 1 UNTIL WS-CPT-CHAR > 15
    à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INITIALIZE   WS-CPT-CHAR    
    PERFORM UNTIL WS-CPT-CHAR >= 15                                             
        ADD 1 TO WS-CPT-CHAR                        
    ...
    - Le INSPECT CONVERTING aurait pu marcher, quitte à faire plusieurs passage.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 26
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Hédhili Jaïdane Voir le message

    - Le INSPECT CONVERTING aurait pu marcher, quitte à faire plusieurs passage.
    Bonjour,

    en effet cela me surprend que vous n'utilisiez pas la fonction converting.

    Par exemple, pour transformer des minuscules en majuscules ainsi que les caractères accentués, cette méthode fonctionne très bien.

    Définir en working :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    01 DATA-A-FORMATEE PIC X(080) VALUE 'abcdefghijklm
    - 'nopqrstuvwxyz.âäáãåÂÄÀÁÃÅàêëéèÉÊËÈíîïìÍÎÏÌôöòóõÔÖÒÓÕùûüúÛÜÙÚ
    - 'ýÿÝñÑçÇ'. 
    01 DATA-FORMATEE PIC X(080) VALUE 'ABCDEFGHIJKLM
    - 'NOPQRSTUVWXYZ AAAAAAAAAAAAEEEEEEEEIIIIIIIIOOOOOOOOOOUUUUUUUU
    - 'YYYNNCC'. 
     
    Utiliser la ligne de commande suivante :
    INSPECT DATA-IN CONVERTING DATA-A-FORMATEE TO DATA-FORMATEE
    Il n'y a pas besoin de boucles, il suffit de mettre en entrée les données suceptibles de recevoir et en sortie leur équivalent....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/03/2008, 15h18
  2. Comment remplacer plusieurs caractères dans une chaîne?
    Par Antigonos Ier Gonatas dans le forum Général Python
    Réponses: 5
    Dernier message: 16/06/2006, 16h04
  3. Réponses: 5
    Dernier message: 08/03/2006, 22h20
  4. Réponses: 5
    Dernier message: 03/02/2006, 18h47
  5. [String] Remplacement caractères dans une chaîne
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 4
    Dernier message: 19/07/2004, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo