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 12/12/2007, 12h06   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 1
Points : 1
Par défaut Champs identiques dans 2 fichiers

Bonjour,

J'ai commencé la programmation en rpg-ile il y a quelques jours et je suis bloqué sur un truc surement bête : j'ai deux fichiers dans mon programme contenant chacun le même champ avec une longueur différente. Pouvez-vous me dire comment faire pour renommer l'un des deux champs sans être obligé de modifier l'un des deux fichiers SVP ?

Merci.
dicus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2007, 16h10   #2
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
Bonjour.

Malheureusement je ne connais pas très bien le RPG, mais comme tu n'as pas encore de réponses, regarde dans la doc IBM (info centre) tout ce qui concerne le remane et le préfixage (définir un préfixe pour le fichier ou son format et l'utiliser pour qualifier les zones)
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2007, 18h56   #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
C'est pas très beau mais à situation exceptionnelle, moyens exceptionnels, pas vrai ?
Déclarations à placer après la dernière spécif D.

Code :
1
2
3
IFormatErroné                                          
I              Zone                        NewZone
Remarque.
On ne peut pas colonner sur ce forum, et ça manque.
Pour info, première ligne insérée sous l'éditeur SEU avec le prompt I et la seconde avec le prompt J.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2007, 19h48   #4
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 1
Points : 1
Merci à vous deux pour les réponses. J'ai déjà lu les 500 pages de doc sans pour autant trouver la solution.. j'ai peut être mal lu Je vais essayer ta solution Mercure. Tant que ca ne change pas mon fichier de base, tout me va

Merci beaucoup !!
dicus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2007, 19h58   #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
Tu peux essayer, ça va marcher, garanti !
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 18h20   #6
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 1
Points : 1
C'est bon, ca a très bien marché J'apporte juste une toute petite précision, il ne faut pas oublier d'ajouter un indicateur en position 21 sur la ligne où l'on entre le format à modifier. Et j'ai trouvé aussi comment préfixer les champs Hédhili Jaïdane mais ca n'allait pas avec la suite de mon programme.

Merci à tous les deux !!

Cordialement.
dicus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2007, 14h46   #7
Membre confirmé
 
Avatar de Green Hornet
 
Homme
Inscription : février 2004
Messages : 204
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : février 2004
Messages : 204
Points : 219
Points : 219
l'utilisation d'un prefixage (dansl a carte F) des noms de zone aurait aussi pu faire l'affaire
Green Hornet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2007, 10h40   #8
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
Oui, mais alors ce sont toutes les zones du format qui sont du coup préfixées et non plus une ou deux zones particulières.
De toute façon, s'il y a besoin de renommer des zones d'une façon ou d'une autre, ça veut dire que la base de données a été mal construite.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2007, 10h53   #9
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
Bonjour,

Citation:
Envoyé par Mercure Voir le message
...ça veut dire que la base de données a été mal construite.
Non pas forcément, je dirais même le contraire. Il n'y aucune raison de donner un autre nom à un champ d'un fichier qui en a déja un dans autre un fichier ou dans le référentiel général. Cette notion de qualification on l'a en Cobol depuis belle lurette, alors si on l'a maintenant en RPG ILE, il ne faut pas la négliger. Je pense et n'en suis pas sûr que si l'emploi d'une zone non préfixée ne prête pas à confusion, le compilateur n'y verrait pas d'erreur, donc on continuera à utiliser les zones sans préfixe sans aucun pb. Mais encore une fois je suis nul en RPG.
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2007, 15h33   #10
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 1
Points : 1
Ce n'est pas faux Hédhili Jaïdane. De plus quand on a une centaine de fichiers (1 fichier = 1 base de données pour moi..), il n'est pas très facile d'entrer des noms de champs différents. Je n'ai vraiment pas envie de renommer tous ces fichiers et en plus de réecrire tous les programmes
Mais par contre le préfixage devient très utile si on a 2 fichiers presques identiques ( par ex : "transport_france" et "transport_europe" qui sont susceptibles de posséder plusieurs champs identiques).
dicus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2007, 16h20   #11
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
On dit je crois la même chose. A savoir, le même nom symbolique ne peut servir qu'à définir une seule donnée particulière dans la société. Ce même nom ne peut plus être utilisé pour définir une autre donnée dès lors qu'il a été déjà employé pour en définir une autre. Dans ce cas, et pour reprendre l'exemple donné par dicus, "transport_france" et "transport_europe" devraient porter deux noms symboliques différents dans le référentiel et donc dans les fichiers puisque ces deux rubriques se réfèrent à deux définitions (données) différentes dans la société. Elles sont certes très ressemblantes mais correspondent à deux définitions bien distinctes.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2007, 17h45   #12
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 1
Points : 1
Mh mh.. je crois que j'ai perdu le fil de la conversation. Dans mes 2 fichiers, j'ai 2 champs : "n° transporteur" et "nom transporteur". Si j'utilise les 2 fichiers ensemble et que je compile, il va me dire qu'il y a un pb parce que plusieurs champs portent le même nom (mais n'ont pas forcément la même longueur). Donc, si j'ai bien compris ton raisonnement (j'en suis pas sûr ), j'aurais du, dans un des 2 fichiers, nommer mes 2 champs différemment ? Difficile à réaliser.

En fait c'est dommage que l'on ne puisse pas faire comme dans le langage SQL, à savoir <nom du fichier>.<champ> on se casserait moins la tête
dicus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 07h39   #13
Membre confirmé
 
Avatar de Green Hornet
 
Homme
Inscription : février 2004
Messages : 204
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : février 2004
Messages : 204
Points : 219
Points : 219
Citation:
Envoyé par dicus Voir le message
En fait c'est dommage que l'on ne puisse pas faire comme dans le langage SQL, à savoir <nom du fichier>.<champ> on se casserait moins la tête
c'est le principe du prefixage...
Green Hornet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 10h12   #14
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
Bonjour à tous.

Je suis d’accord avec Mercure avec ce qu’il dit dans son dernier post à quelques exceptions près. Surtout dans le cas cité par dicus où
Citation:
plusieurs champs portent le même nom (mais n'ont pas forcément la même longueur)
Si des champs ont des caractéristiques différentes, ils ne peuvent pas désigner la même donnée et donc ne peuvent pas avoir le même nom symbolique.

Néanmoins si dans une entreprise on désigne par MLECAMION, le N° d’immatriculation d’un camion, ce nom symbolique désignera toujours le camion que celui-ci est présent dans le fichier « COLISAGE » , dans le fichier « CAMIONS », dans le fichier « ENCIRCULATION » ou dans le fichier « ENENTRETIEN ». Est-ce que dans la modélisation de mes données je dois prévoir 4 champs pour désigner le CAMION ? Ma réponse à moi est non.

D’où cette notion de qualification (ou préfixage pour les gapistes). Alors on ne va pas chicaner la dessus trop longtemps. Ce qui est fait est fait. Les fichiers sont là et il faut les utiliser. Soit on fait un rename pour les champs prêtant à confusion, soit on préfixe les fichiers. D’après la doc, il y a plusieurs moyens : un préfixe avec substitution et un préfixe sans substitution sans que la longueur de la zone préfixée ne dépasse la longueur autorisée pour le "nommage" des variables.

Dicus, jette un coup d’œil la dessus pour voir des exemples de préfixage en RPG ILE :

http://publib.boulder.ibm.com/infoce...0925086374.htm

ou en général sur l’info center :

http://publib.boulder.ibm.com/infoce...v5r4/index.jsp

Bonne continuation.
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 10h58   #15
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
Dicus,

En RPG IV, tu peux faire "comme dans le langage SQL", c'est à dire qualifier une zone.

Exemple avec fichiers
Code :
1
2
3
4
5
6
7
8
9
10
11
12
D input           ds             likerec(FILE001R: *input) qualifié <== input 
D output          ds             likerec(FILE001R: *output) qualifié <== output
     
 /Free                                                          
                                                                 
    Read FILE001R InPut;   
    Dow not %Eof();
    clear OutPut;                                                 
    
     output.ARTNOM = input.ARTNOM;                                 
     output.ARTDESC = input.ARTDESC;                                 
     write FILE001R OutPut;
Autre exemple avec un tableau à 2 dimensions
Code :
1
2
3
4
5
6
7
8
9
10
D Annee            ds                     Dim(3) Qualified
D   Mois   		                 LikeDS(Paye) Dim(12)
 **
D Paye             ds                        Qualified
D   MtBrut                        9P 2
D   MtNet  		          9P 2

  * Chargement du tableau
C		EVAL	Annee(An).Mois(Mo).MtBrut = input.EmpMtBrut
C		EVAL	Annee(An).Mois(Mo).MtNet  = input.EmpMtNet
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 11h01   #16
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 Dicus
j'aurais du, dans un des 2 fichiers, nommer mes 2 champs différemment ? Difficile à réaliser.
Pourquoi est-ce difficile à réaliser ?
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 20h43   #17
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 1
Points : 1
Mercure : difficile à réaliser car il faurdrait recenser tous les champs de tous les fichiers et en créer de nouveaux pour la création d'un fichier.. Mais bon de toute façon j'ai compris ce que vous vouliez tous dire (un peu lent du cerveau )

Au final quand on recense une centaine de fichiers, on ne sait plus où on en est.

Citation:
Envoyé par Hédhili Jaïdane Voir le message
Si des champs ont des caractéristiques différentes, ils ne peuvent pas désigner la même donnée et donc ne peuvent pas avoir le même nom symbolique.
Sauf si on a mis une longueur de 3 au lieu de 2 par exemple alors qu'au final on voulait le même type de champ représentant la même donnée . Donc voilà les caractéristiques ont été mal définies mais grâce à vous, j'ai quand même réussi à avancer.

Merci beaucoup !!
dicus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 21h38   #18
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
Il n'y a pas de quoi. C'était un plaisir.

Bonne continuation et beaucoup de réussite.
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 00h01   #19
Membre confirmé
 
Avatar de Green Hornet
 
Homme
Inscription : février 2004
Messages : 204
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : février 2004
Messages : 204
Points : 219
Points : 219
Citation:
Envoyé par Mercure Voir le message
Dicus,

En RPG IV, tu peux faire "comme dans le langage SQL", c'est à dire qualifier une zone.

Exemple avec fichiers
Code :
1
2
3
4
5
6
7
8
9
10
11
12
D input           ds             likerec(FILE001R: *input) qualifié <== input 
D output          ds             likerec(FILE001R: *output) qualifié <== output
     
 /Free                                                          
                                                                 
    Read FILE001R InPut;   
    Dow not %Eof();
    clear OutPut;                                                 
    
     output.ARTNOM = input.ARTNOM;                                 
     output.ARTDESC = input.ARTDESC;                                 
     write FILE001R OutPut;
Autre exemple avec un tableau à 2 dimensions
Code :
1
2
3
4
5
6
7
8
9
10
D Annee            ds                     Dim(3) Qualified
D   Mois   		                 LikeDS(Paye) Dim(12)
 **
D Paye             ds                        Qualified
D   MtBrut                        9P 2
D   MtNet  		          9P 2

  * Chargement du tableau
C		EVAL	Annee(An).Mois(Mo).MtBrut = input.EmpMtBrut
C		EVAL	Annee(An).Mois(Mo).MtNet  = input.EmpMtNet
ah oui j'avais oublié cette possibilité
Green Hornet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 00h06   #20
Membre confirmé
 
Avatar de Green Hornet
 
Homme
Inscription : février 2004
Messages : 204
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : février 2004
Messages : 204
Points : 219
Points : 219
Citation:
Envoyé par dicus Voir le message
Mercure : difficile à réaliser car il faurdrait recenser tous les champs de tous les fichiers et en créer de nouveaux pour la création d'un fichier.. Mais bon de toute façon j'ai compris ce que vous vouliez tous dire (un peu lent du cerveau )

Au final quand on recense une centaine de fichiers, on ne sait plus où on en est.


Sauf si on a mis une longueur de 3 au lieu de 2 par exemple alors qu'au final on voulait le même type de champ représentant la même donnée . Donc voilà les caractéristiques ont été mal définies mais grâce à vous, j'ai quand même réussi à avancer.

Merci beaucoup !!
ce n'est pas si difficile à réaliser, il suffit de prendre l'habitude de pré ou post fixé le nom de tes zones avec une abréviation liée au fichier, art pour article, cdc pour commande client, cdf pour commande fournisseur ou cda pour commande achat, ensuite le reste du nom de zone peut être toujours le même et les tailles définies via une repertoire de données qui centralise le tout et zoup ça va bien et surtout ça complique moins la tâche à ceux qui passent derrière toi, que ce soit, dans 1 mois, 1 an ou 20 ans...
Green Hornet 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 07h15.


 
 
 
 
Partenaires

Hébergement Web