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 25/01/2011, 18h37   #1
Nouveau Membre du Club
 
Homme
Inscription : juillet 2008
Messages : 110
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juillet 2008
Messages : 110
Points : 33
Points : 33
Par défaut Valeur de retour d'une proc = ARRAY tableau

Bonjour,

Est-il possible d'appeler une Procedure et d'avoir un tableau en valeur de retour ? je devine que oui par pointeur mais dans l'immédiat voici ma tentative de ce jour...

J'obtiens l'erreur ci-dessous a la compil (pour ma carte C) :
RNF5343 30 1 Trop d'indices omis dans le tableau ;


Code :
1
2
3
4
5
6
7
8
9
10
11
 D get_bra         pr            22S 2 dim(9)
 D  pà_deb                       22S 2
 D  pà_typ                       25A



 D  tab_key        s             22S 2 dim(9)


 C                   Eval      tab_key =get_bra(a_key:reket)
Hermelin,
hermellin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 18h48   #2
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
Ce que je ferais.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 D get_bra         pr            
 D  pa_deb                       22S 2   const
 D  pa_typ                       25A     const
 D  pa_tablo                             likeds(tab_key)


 D  tab_key        ds             
 D   tab_entry                   22S 2 dim(9)


  /free
              get_bra(pa_deb: pa_typ: pa_tablo);
              tab_key = pa_tablo;

Remarque : je n'emploie jamais des caractères spéciaux tels que à, @, £, $ etc pour raison de ccsids non supportés d'un pays à l'autre.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2011, 18h54   #3
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
En retour d'une procédure tu peux avoir 0 ou 1 valeur et non pas N valeurs.
Dans ton cas, utilise une DS (pas un pointeur) qui contient une (ou plusieurs) zone avec DIM.

Autre méthode que celle proposée par Philippe :

Code :
1
2
3
4
5
6
7
d MyDS1           ds                  Qualified     
d   Zones                       20    Dim(9)        
d                                                   
d                                                   
d Traitement      pr                  like(MyDS1)   
 /free                                              
     MyDS1 = Traitement();
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2011, 11h43   #4
Nouveau Membre du Club
 
Homme
Inscription : juillet 2008
Messages : 110
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juillet 2008
Messages : 110
Points : 33
Points : 33
Merci a tous les deux

je me disais bêtement :puisque le compilateur accepte que je mette une valeur de retour dim(9) sur la déclaration de proc PR, c'est que c'est faisable

quand au 'à' , c'est vrai que je devrais changer mon habitude car un simple transfert vers le PC peut parfois poser problème.

(parenthèse) En récupérant des fichiers PC dans l'IFS puis DB2, il m'arrive aussi parfois qu'il y ait 1 caractère dans 1 enreg qui plante la session 5250 si je tente un dsppfm, un upddta. Je dois passer par un prog RPG pour virer ce caractère.

Sinon Mercure, les routines de S.Klement pour surfer le web ca marche du tonnerre, je récupère les pages dans l'IFS très rapidement (bien plus vite que dans IE). Seul le traitement des pages après CPYFRMIMPF est assez lente mais j'ai vu des exemples de lecture directe des fichiers IFS en RPGLE donc vais voir si cela accèlere...

Hermelin
hermellin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 12h46   #5
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
Citation:
Envoyé par hermellin
...j'ai vu des exemples de lecture directe des fichiers IFS en RPGLE donc vais voir si cela accèlere...
Je ne suis pas sûr que tu gagnes du temps avec les APIs Unix-Type, mais bon !
Tu dois alors utiliser les définitions des APIs open(), read(), write(), close(), etc qui figurent sur la page Integrated File System APIs chez Big Blue, mais fais attention car toutes les APIs Unix-Type sont sensibles à la casse.
A ce propos, IBM n'a rien trouvé de mieux que de montrer les prototypes des ces APIs au format C comme si le langage C était le plus largement répandu sur les systèmes i ! Tu vas donc avoir besoin de convertir les prototypes C en prototypes RPG ILE et ce lien peut t'y aider le cas échéant.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2011, 23h12   #6
Nouveau Membre du Club
 
Homme
Inscription : juillet 2008
Messages : 110
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juillet 2008
Messages : 110
Points : 33
Points : 33
Citation:
Envoyé par Mercure Voir le message
Je ne suis pas sûr que tu gagnes du temps avec les APIs Unix-Type, mais bon !
alors cela attendra... Merci pour les conseils. C'est le CPYFRMIMPF qui est très lent.
hermellin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h12.


 
 
 
 
Partenaires

Hébergement Web