CEC 2012 Vienna Forum Francophone Power IBM i ( et AS/400, iSeries, System i, ... )
Forum Francophone Power IBM i ( et AS/400, iSeries, System i,  ... )   Forum Francophone Power IBM i ( et AS/400, iSeries, System i,  ... )   Forum Francophone Power IBM i ( et AS/400, iSeries, System i,  ... )   Forum Francophone Power IBM i ( et AS/400, iSeries, System i,  ... )
18 Mai,2012, 22:17:53 *
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?

Connexion avec identifiant, mot de passe et durée de la session
Nouvelles:
 
   Accueil   Aide Règles Rechercher Partenaires Identifiez-vous Inscrivez-vous Liens Common France Common Belgique Common Luxembourg  
Pages: [1]   Bas de page
  Imprimer  
Auteur Fil de discussion: Aide sur dev d'u pgm RPG  (Lu 701 fois) Average Rating: 0
0 Membres et 1 Invité sur ce fil de discussion.
scorpion
Membre Senior
****
Hors ligne Hors ligne

Messages: 211


OS:
Windows XP Windows XP
Navigateur:
Firefox 3.6.16 Firefox 3.6.16


Voir le profil
« le: 15 Avril,2011, 10:39:36 »

Bjr,

Es-ce que quelqu'un peu m'aider sur le développement d'un petit programme RPG

J'aurai besoin d'extraire un champ à partir d'une bdd et mettre le résultat dans une bdd

La structure de mon fichier pour l'extraction :

Attention c'est un copier/coller donc il peut y avoir un décalage de la position des champs sur l'image suivante pour celà je vous ai mis plus loin les clés des champs avec leurs valeurs

Code:
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+...10....+...11....+...12.....+....7....+....8....+....9....+...10....+...11....+...12....+...13....+...14....+...15....+...16....+...17....+...18
Fmp  Nomcmpt    Nom        Tpfl  Sgp  Comm  Colt   Phone #  Nomprn                            Site     Vsu#  Heure  Code  Nom-Pren                            Comp     Ttf#  Lmp  Codef  Mail adresse
**   ABCEDFGHIJ  ABCEDFGHIJ    0001   N    L                    Prenom NOM                     N             XXX   FRA   Prenom Nom                       N             XXX   FRA   Prenom.Nom@adressemail.fr

Je vous donnes les champs avec leurs valeurs et leurs positions

Fmp  = **                         Clé  = 1 sur 2
Nomcmpt = ABCEDFGHIJ             =  6 / 10
Nom = ABCEDFGHIJ                    = 18 / 10
TPFL = 0001                            = 30 / 4
Sgp = N                                  = 37 / 1
Comm = L                                = 42 / 1
Colt =                                     = 48 / 3
Phone =                                  = 53 / 8
Nomprn = Prenom Nom               = 63 / 30
Site = N                                  = 96 / 1
Vsu =                                     = 101 / 7    
Heure = XXX                            = 110 / 3
Code = FRA                             = 116 / 3
Nom-Pren = Prenom Nom            = 122 / 30
Comp = N                                = 156 / 1
Ttf =                                      = 161 / 7
Lmp =                                     = 170 / 3
Codef = FRA                            = 176 / 3
Mail adresse = Prenom.Nom@adressemail.fr         = 182 / 50

Mail adresse = Prenom.Nom@adressemail.fr c'est le champ que je souhaite extraire et mettre dans une bdd


Cette extraction je peux la faire en CL ou en SQL je sais mais en effectuant cette opération en RPG ça me permet d'avoir des exemples concrets pour la suite et de me familiariser avec le RPG qui mais actuellement un langage barbare pour moi.

Merci pour votre compréhension


                              
Journalisée
jmmd
Membre Complet
***
Hors ligne Hors ligne

Messages: 52

OS:
Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
Navigateur:
MS Internet Explorer 8.0 MS Internet Explorer 8.0


Voir le profil
« Répondre #1 le: 15 Avril,2011, 10:50:50 »

bonjour,
il n'est pas nécéssaire de faire un programme pour cela.

CRTPF FILE(bibdes/ficdes) RCDLEN(longueur de ton champs)
CPYF FROMFILE(BIBORI/FICORI) TOFILE(BIBDES/FICDES) MBROPT(*REPLACE) FMTOPT(*MAP *DROP)                                                                   
Journalisée
jmmd
Membre Complet
***
Hors ligne Hors ligne

Messages: 52

OS:
Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
Navigateur:
MS Internet Explorer 8.0 MS Internet Explorer 8.0


Voir le profil
« Répondre #2 le: 15 Avril,2011, 10:52:16 »

J'ai oublié, FICDES=nom de ton champs
Journalisée
scorpion
Membre Senior
****
Hors ligne Hors ligne

Messages: 211


OS:
Windows XP Windows XP
Navigateur:
Firefox 3.6.16 Firefox 3.6.16


Voir le profil
« Répondre #3 le: 15 Avril,2011, 11:13:28 »

Slt Jmmd

Oui je me doute que je ne suis pas obligé de faire un pgm pour ça mais comme je l'ai mis dans mon post c'est dans le cas de me familiariser avec le langage RPG tout simplement.

Par contre dans ton exemple je ne vois pas comment je vais faire pour extraire le champ ""Mail adresse"" de ma bdd

CPYF FROMFILE(BIBORI/FICORI) TOFILE(BIBDES/FICDES) MBROPT(*REPLACE) FMTOPT(*MAP *DROP)  

J'ai omis de dire que je veux extraire l'adresse mail par rapport au champ ""Nomcmpt"" qui sera passait en value à mon pgm

Exemple:

Call monpgm  parm('ABCEDFGHIJ')

Dans ma bdd je vais allez chercher la clé ABCEDFGHIJ et extraire l'email correspondante à celle-ci

Attention il peut y avoir plusieurs ABCEDFGHIJ donc je prends la première clé de ma bdd j'extrais dans une bdd et je fais fin de mon pgm

« Dernière édition: 15 Avril,2011, 11:29:46 par scorpion » Journalisée
jmmd
Membre Complet
***
Hors ligne Hors ligne

Messages: 52

OS:
Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
Navigateur:
MS Internet Explorer 8.0 MS Internet Explorer 8.0


Voir le profil
« Répondre #4 le: 15 Avril,2011, 12:14:47 »

et comme ça, avec bddentree=ton fichier de base
Attention au nom du champ mailadress, dans ta description il n'est pas valide


CRTPF FILE(bibdes/mailadress) RCDLEN(50)
ovrdbf mailadress bibdes/mailadress
call tonpgm
======================================

Fmailadressuf a e             disk    rename(mailadress:sortie)           
Fbddentree if   e           k disk                                       
C     *entry        plist                                                 
C                   parm                    nomcmpt                       
C     nomcmpt       chain     bddentree                          90       
C*  90=pas trouvé                                                         
C  n90              write     sortie                                     
C                   seton                                        lr       
Journalisée
GAPIII
Membre Senior
****
Hors ligne Hors ligne

Messages: 160


OS:
Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
Navigateur:
Firefox 4.0 Firefox 4.0


Voir le profil
« Répondre #5 le: 15 Avril,2011, 13:19:59 »

Bonjour Scorpion. Excuse-moi de n'avoir pas répondu plus tôt, mais je suis un peu charrette aujourd'hui
1: Tu donnes les positions des champs par rapport à un affichage style runqry.
Les champs sont séparés par 2 caractères. De plus "FMP" prenant 3 caractères, il y a un décalage supplémentaire.
Cependant, on s'en fout ! Comme tu as dû le voir, on déclare le fichier comme "externe" (e dans la carte F), indexé (k dans la carte F) et c'est tout. Le compilateur se débrouillera tout seul.
Remarques:
 Tu peux utiliser la commande DSPFFD pour voir le nom,la position et la longueur des zones d'un fichier
 Tu peux utiliser la commande DSPFD pour voir si le fichier est indexé et sur quelles zones.
 Tu peux utiliser la commande DSPDBR pour voir tous les index et vues d'un fichier physique.

2: Tu indiques que FMP serait la clé du fichier. jmmd a supposé que NOMCMPT est la clé.
Vérifies par la commande DSPFD quelle est la clé du fichier.
Si la clé n'est pas la bonne, vérifies par DSPDBR si il n'existe pas un index (ou fichier logique) avec la bonne clé.

3: Je ne vois pas bien pourquoi tu veux sortir l'adresse mail dans un fichier, mais c'est ton problème, pas le nôtre.
Par contre, le programme de jmmd ajoute un enregistrement contenant l'adresse mail sans regarder si un enregistrement existe déjà ou non dans le fichier de sortie (mailadress). A toi de gérer cela, sinon chaque appel du programme "grossira" ton fichier d'un enreg.
Journalisée
scorpion
Membre Senior
****
Hors ligne Hors ligne

Messages: 211


OS:
Windows XP Windows XP
Navigateur:
Firefox 3.6.16 Firefox 3.6.16


Voir le profil
« Répondre #6 le: 15 Avril,2011, 14:09:34 »

Slt Gap un grand merci à vous deux pour ces indications

Par contre lors du lancement de mon pgm je vais faire call monpgm parm('ABCDEFGHIJ') comment ce fait la correspondance du param passé par le call et le RPG il y a bien la ligne suivante

 C                   parm                    nomcmpt    

Faut-il déclarer une variable dans mon CL pour celà ?

Que veut dire la séquence ovrdbf mailadress bibdes/mailadress ce serait peut être la valeur que je souhaite mettre en variable (ABCDEFGHIJ) non?

seton     lr c'est quoi? je suppose que c'est un test mais il fonctionne comment?

Est-il possible de mettre un test si le champ adresse mail est vide alors on quitte le pgm puis à travers le CL il faudrait déclencher un message de type sndmsg pour prévenir de l'absence de l'adresse mail

Au faite y a pas de problème Gap déjà c'est hyper cool de me donner un tel coup de main je comprends que tu n'as pas que moi a t'occuper ta un métier et c'est lui qui est prioritaire avant tout  merci encore
« Dernière édition: 15 Avril,2011, 14:28:46 par scorpion » Journalisée
GAPIII
Membre Senior
****
Hors ligne Hors ligne

Messages: 160


OS:
Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
Navigateur:
Firefox 4.0 Firefox 4.0


Voir le profil
« Répondre #7 le: 15 Avril,2011, 18:29:55 »

Citation
comment ce fait la correspondance du param passé par le call et le RPG il y a bien la ligne suivante
 C                   parm                    nomcmpt   
Bien vu. C'est effectivement la ligne *Entry pList et la/les ligne(s) Parm qui la suivent qui définissent au RPG le paramètre à passer.
Citation
Faut-il déclarer une variable dans mon CL pour celà ?
Pas forcément. On peut passer une constante (Call prog parm('Constante') ou bien la variable peut venir d'un écran (et dans ce cas, elle a été définie automatiquement par la ligne DCLF de ton programme.
Citation
Que veut dire la séquence ovrdbf mailadress bibdes/mailadress ce serait peut être la valeur que je souhaite mettre en variable (ABCDEFGHIJ) non?
Alors là, pas du tout !
Si on déclare un fichier monfichier dans une carte F, le programme va essayer d'ouvrir le fichier monfichier de la bibliothèque *LIBL,
c'est à dire qu'il va chercher le fichier dans la liste des bibliothèques du job (souviens-toi de ADDLIBLE)
La commande ovrdbf permet d'ouvrir un autre fichier (mais il faut qu'il aie la même structure)
ovrdbf  monfichier   mabib/autrefichier signifiera au RPG qu'au lieu d'ouvrir monfichier dans *LIBL il faut ouvrir autrefichier dans mabib.
Citation
seton     lr c'est quoi? je suppose que c'est un test mais il fonctionne comment?
Encore tout faux !  RPG fonctionne à la base avec un cycle RPG. La dernière ligne du programme ne lui fait pas arrêter le programme, mais lire l'enregistrement suivant du fichier ... sauf si LR est mis on (true). Seton positionne un indicateur on. LR est l'indicateur qui indique la fin du fichier (LR = Last Record)
Citation
Est-il possible de mettre un test si le champ adresse mail est vide alors on quitte le pgm puis à travers le CL il faudrait déclencher un message de type sndmsg pour prévenir de l'absence de l'adresse mail
Il faudrait passer un second paramètre. Dans le CLP, on aurait
Code:
DCL &PARM1 *CHAR 10
DCL &PARM2 *CHAR  1
...
CALL MONPROG PARM(&PARM1 &PARM2)
IF   (&PARM2='A') DO
SNDMSG
RETURN
ENDDO
Et dans le RPG on aurait (Attention je n'aligne pas les zones ! )
Code:
C      *ENTRY   PLIST
C                   PARM      P1     10
C                   PARM      P2      1
C* bla bla
C        P1          CHAINFICADRESS                  50
C   N50 Adresse  COMP *BLANK                              50
C   N50   on traite l'adresse mail
C   N50           MOVE   ' '        P2
C     50           MOVE   'A'       P2
C                   SETON                                  LR
Oui je sais, seuls ceux qui savent lire le RPG pourront vraiment comprendre, mais bon. Je ne peux pas t'expliquer tout le RPG comme ça !
Journalisée
scorpion
Membre Senior
****
Hors ligne Hors ligne

Messages: 211


OS:
Windows XP Windows XP
Navigateur:
Firefox 3.6.16 Firefox 3.6.16


Voir le profil
« Répondre #8 le: 18 Avril,2011, 10:38:13 »

Slt Gap je t'ai transmis une demande en privée peux tu me dire si t'es ok ou pas par retour de mail merci
Journalisée
Pages: [1]   Haut de page
  Imprimer  
 
Aller à:  


Propulsé par MySQL Propulsé par PHP Common France © 2008, 2009  
AS/400, AS400, iSeries, i5, Power i sont des marques déposées d'International Business Machines Corp.

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines
SMFAds for Free Forums
SMF customization services by 2by2host.com
XHTML 1.0 Transitionnel valide ! CSS valide !
reserved
SimplePortal 2.1.1