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

AS/400 Discussion :

partie numérique d'une chaine


Sujet :

AS/400

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 38
    Points : 29
    Points
    29
    Par défaut partie numérique d'une chaine
    Bonjour
    Je voudrais extraire la partie numérique d'une chaine de caractère alpha numérique de longueur variable soit:
    en CL
    en rpg ile
    soit en SQL
    quelqu'un peut m'aider?
    exemple1 dans AT10356 je voudrais seulement recupérer 10356
    exemple2 dans q55AB5689 je voudrais recuperer seulement 5689.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut partie numerique d'une chaîne
    La question n'est pas très claire :
    - La position et la longueur de la partie numérique sont-elles connues d'avance ?
    - Si non, peut-il y avoir plus d'une chaine numérique ? (Cas de l'exemple 2)
    - Le résultat doit-il être numérique ou alpha ?

    En CLP :
    CHGVAR &ALPHA %SST(&VARIABLE Pos Long) permet de récupérer la partie numérique dans une chaine de caractères.
    CHGVAR &NUM &ALPHA permet de convertir la zone alpha en zone numérique.

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Fais une boucle en partant de la fin de la chaîne à analyser et arrête-la au premier caractère < 0.
    Je ferais le traitement en RPG IV car plus simple qu'en CL :

    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
           /free
    
         d InLen           s             10i 0 inz
         d i               s             10i 0 inz
         d j               s                   like(i)
         d InputParm       s             15a
         d Output          s                   like(InputParm)
    
         c     *entry        plist
         c                   parm                    InputParm
    
         c                   eval      *inlr = '1'
    
          /free
            InLen = %len(%trim(InputParm));
            Output = *ALL'0';
            j = %len(Output);
            for i = InLen DownTo 1;
             if %subst(InputParm : i : 1) < '0';
                leave;
             endif;
             %subst(Output : j : 1) = %subst(InputParm : i : 1);
             j -= 1;
            endfor;
            dsply Output;
            return;
    J'ai considéré que la zone à analyser (Input) se termine toujours par un ou plusieurs caractères numériques et j'ai limité volontairement la longueur des zones input et output à 15 caractères. A toi d'ajuster ces longueurs selon tes besoins.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Lisogane,

    Tu ne donnes pas signe de vie.

    Est-ce que ce que j'ai publié te convient ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Mercure
    Merci, votre proposition me convient. excuse moi j'étais en congé

  6. #6
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    686
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 686
    Points : 987
    Points
    987
    Par défaut
    Autre solution, plus "simple" qu'une boucle, utiliser %checkR pour trouver la position du 1er caractère non numérique en partant de la fin.

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/03/2013, 18h16
  2. [WD12] Extraire partie numérique d'une chaine
    Par zouzoukha dans le forum WinDev
    Réponses: 4
    Dernier message: 27/07/2010, 17h45
  3. [Toutes versions] Extraire partie numérique d'une chaine
    Par tAKAmAkA dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/11/2009, 23h15
  4. Partie numérique d'une chaine
    Par shell_man dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/04/2009, 16h57
  5. [Regex ?]Separer la partie numérique d'une chaine
    Par Pahcixam dans le forum Langage
    Réponses: 2
    Dernier message: 25/03/2007, 13h09

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