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 20/02/2008, 16h20   #1
Membre du Club
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 44
Points : 44
Par défaut RPG4 - Probleme avec fonction %lookup

Bonjour,

Je travaille actuellement sur un programme qui utilise deux tableaux dans lesquel je stocke des informations lors d'une premiere lecture d'un fichier.
Au deuxieme passage je souhaite extraire certaine information du 2eme tableau grace a une comparaison dans le 1er.
Dans l'idée je voulais connaitre la position dans le 1er tableau pour extraire mon information du 2eme tableau.

1ere question :
Est-il possible de travailler dans un seul tableau?

2eme question :
j'utilise la fonction %lookup et j'aimerais savoir si avec cette fonction je peux connaitre la position d'un élement dans le tableau.

Et pour finir la fonction tel que je l'ai écrite mais qui ne fonctionne pas :

eval recup=%lookup(ediseg:zonkey)

ediseg=le champs que je compare
zonkey=le nom de mon tableau
recup=la variable dans laquelle je souhaite récupérer la position.

Je continue les recherches de mon coté, si quelqu'un sait comment utiliser cette focntion ou même avais de la doc, j'en serais ravi !!!

Merci à tout ceux qui prendront le temps de me lire.

A+
Bertrand
BBert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 17h01   #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
Je ne comprends pas la première question. Explique un peu plus ce que tu cherches à faire.

Citation:
2eme question :
j'utilise la fonction %lookup et j'aimerais savoir si avec cette fonction je peux connaitre la position d'un élement dans le tableau.
Oui, fais comme suit :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
D                 ds                                            
D Ds_Array                      35     Dim(100)                 
D  Ds_Zone1                     5s 0  Overlay(Ds_Array)         
D  Ds_Zone2                    10a    Overlay(Ds_Array:*next)   
D  Ds_Zone3                    20a    Overlay(Ds_Array:*next)   

D  DS_Zone1_3                 15a   Overlay( Ds_Array )

D  Position               s       10i 0

/free
  // Mets dans la variable Recherche la valeur que tu recherches qui  
  // correspond aux valeurs des zones Ds_Zone1 et DsS_zone2.  
  // Le %LOOKUP ci-dessous va rechercher uniquement les 15 premieres
  // positions du poste car DS_Zone1_3 recouvre les 15 premières positions
  // du tableau  Ds_Array.
  Position = %Lookup( Recherche : DS_Zone1_3 );
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2008, 07h27   #3
Membre du Club
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 44
Points : 44
Merci pour cette réponse !!!
je vais essayer de l'implémenter ce matin.

Pour en revenir à la première question, actuellement j'utilise 2 tableaux, mais j'aimerais en utiliser un seul, par exemple dans la 1ere colonne ma première information et dans la seconde colonne, la deuxième information. Je pense que tu as répondu à cette question dans ton exemple ou tu utilise la DS.

A+
BBert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 10h50   #4
Membre du Club
 
Inscription : décembre 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 95
Points : 44
Points : 44
Merci pour la solution,

J'ai conservé ma méthode mais je m'en suis sortis avec vos explication sur la fonction %lookup.
Code :
1
2
3
4
5
6
Mes tableaux
Dzonkey           s              4  0 dim(999)
Dzongrp           s              8    dim(999)

eval      recup=%lookup(edikey:zonkey)
Encore merci pour votre aide !!!
Bertrand
BBert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2008, 20h36   #5
Invité régulier
 
Inscription : novembre 2003
Messages : 14
Détails du profil
Informations personnelles :
Âge : 53

Informations forums :
Inscription : novembre 2003
Messages : 14
Points : 8
Points : 8
Par défaut Table ou Occurence

Bonsoir,

Bien que solutionné, j'apporte une précision dans l'utilisation de tables dont l'indice du poste d'une table correspond au poste de la table où est stockée l'information nécessaire à un traitement.

L'instruction OCCUR autorise la création de Table/tableau à multiple dimensions de taille maximale bien supérieure à celle des 9999 postes d'une table mono dimension.

Le revers de la médaille est la contrainte d'une routine d'initialisation, en effet l'instruction CLEAR, MOVEA ne nettoie que le 1er poste d'une occurence.
Mais les possibilités offertes balaie d'une main cette contrainte.

Création d'une table multi-dimentionnelle avec l'instruction OCCUR :
D TBLx OCCURS(32xxx) Cf. doc pour le maxi
D TBL1 1 30 DIM(10) => 10 postes de 3
D TBL2 1 30 DIM(01) => 30 postes de 1
D TBL3 1 30 DIM(02) => 15 postes de 2

Chargement d'un fichier paramètre de 150 enregistrements maxi
D PARM OCCURS(150)
D PRM_ENRGT 1 75 Longeur de l'enregistrement
D PRM_COD 1 3 Code table
D PRM_TYP 4 5 Type d'enregistrement
D PRM_CLE 6 20 Clé d'accès
D PRM_RES 21 70 Paramètres à récupérer
D PRM_Tbl1 21 70 DIM(05) => 10 poste de 5

Il va de soit que c'est au programmeur de gérer l'overflow !

Ce ne sont que des exemples d'utilisation.

@+
OverSlach34 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 03h24.


 
 
 
 
Partenaires

Hébergement Web