Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > AS/400
AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/02/2011, 10h18   #1
 
Inscription : juillet 2009
Messages : 27
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 27
Points : -2
Points : -2
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.
Lisogane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 13h13   #2
Membre éclairé
 
Homme
Inscription : septembre 2008
Messages : 251
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2008
Messages : 251
Points : 309
Points : 309
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.
FORMULARY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 13h56   #3
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
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 :
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.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 16h07   #4
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Lisogane,

Tu ne donnes pas signe de vie.

Est-ce que ce que j'ai publié te convient ?
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 13h36   #5
 
Inscription : juillet 2009
Messages : 27
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 27
Points : -2
Points : -2
Mercure
Merci, votre proposition me convient. excuse moi j'étais en congé
Lisogane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 14h03   #6
Membre régulier
 
Inscription : octobre 2006
Messages : 111
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 111
Points : 92
Points : 92
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.
m4k-Hurrican est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h10.


 
 
 
 
Partenaires

Hébergement Web