|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : septembre 2007 Messages : 38 ![]() |
Bonjour
Je souhaiterai pouvoir initialiser certaines rubriques d'un fichier, ces rubriques étant mentionnees dans un fichier de parametre (parametres = liste des rubriques a initialiser) <debut description fichier en sortie> RUB_00 PIC X(01) RUB_01 PIC X(01) RUB_02 PIC X(01) RUB_03 PIC X(01) RUB_04 PIC X(01) RUB_05 PIC X(01) <fin description fichier en sortie> <début fichier parametre : liste des rubriques a initialiser> RUBRIQUE RUB_01 RUBRIQUE RUB_02 <fin fichier parametre> <debut programme> ... lecture fichier parametre : on recupere la valeur RUB_01 on veut mettre a blanc la rubrique RUB_01 du fichier en sortie MOVE SPACES TO <valeur> lecture fichier parametre : on recupere la valeur RUB_02 on veut mettre a blanc la rubrique RUB_02 du fichier en sortie MOVE SPACES TO <valeur> Question : est-il possible d'utiliser une variable dans l'ordre "MOVE SPACES TO ..." ? Je vous remercie par avance pour vos réponses. Dominique |
|
|
00
|
|
|
#2 | |
|
Expert Confirmé
![]() Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol Inscription : juin 2007 Messages : 1 782 ![]() |
Citation:
Je pense que non à priori à moins d'utiliser des tableaux. Tes rubriques étant connues à l'avance et pas trop nombreuses, personnellement je ferais des tests en dur par des IF successifs : Code :
IF marubrique = "RUB_01" MOVE SPACES TO RUB_01. |
|
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : septembre 2007 Messages : 38 ![]() |
Bonsoir
Merci pour votre intervention. Cependant, mon exemple n'est malheureusement qu'un exemple. Mon souci est que j'ai une vingtaine d'enregistrements avec une moyenne de trente rubriques chacun. Donc beaucoup de lignes à coder ... |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol Inscription : juin 2007 Messages : 1 782 ![]() |
Tu peux nous indiquer les structures réelles de tes fichiers s'il te plait, peut être qu'on peut trouver des solutions en redéfinissant les rubriques sous la forme d'un tableau ou d'une clé de fichier indexé.
|
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : septembre 2007 Messages : 38 ![]() |
Voici une copie contenant les divers enregistrements du fichier en question (voir niveaux 01)
|
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : septembre 2007 Messages : 38 ![]() |
Le fichier parametre contiendrait les enregistrements suivants (exemple) :
MASQUE CN-P-ABA0-FA MASQUE NADLPRS-AB9Z-FA |
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol Inscription : juin 2007 Messages : 1 782 ![]() |
A la vue des structures données, personnellement je ne vois pas d'autres solutions que ce que j'ai préconisé dans mon premier post.
|
|
|
00
|
|
|
#8 | ||||
|
Expert Confirmé Sénior
![]() Inscription : décembre 2007 Messages : 2 544 ![]() |
+1. Il n'y a pas d'introspection en COBOL. Si toutes les rubriques avaient eu le même format et avaient été dans un seul bloc de données, il aurait été possible de faire un redefines sur un tableau avec des données génériques. Du genre :
Code :
Le seul élément qu'on peut avoir, et il n'est que faussement dynamique, c'est le LENGTH OF. Je m'en sers généralement de la manière suivante : Code :
__________________
Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten : 1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception 2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences 3)le temps de comprendre toutes les exigences, le projet est terminé 4)le temps de terminer le projet, les exigences ont changé Et le serment de non-allégiance : Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée. |
||||
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol Inscription : juin 2007 Messages : 1 782 ![]() |
Deux autres techniques sont possibles en plus de l'utilisation des tableaux redéfinissant la structure de données à utiliser :
- à la lecture de la littérature, il parait que les pointeurs peuvent être éventuellement utilisés, mais comme je les ai jamais utilisés sauf en ce qui concerne les userspaces, et encore juste en démo, je ne peux pas tellement en parler. - les CALL dynamiques, cette technique, quand le compilateur permet de faire des CALL à des s/programmes dont le nom est mis dans une variable, m'a permis de résoudre ce genre de problèmes mais, il faut le reconnaitre, par une véritable usine à gaz. D'ailleurs ce qui est pratiquement en train de se faire dans la culture des Service Oriented Application Programs. J'explicite un peu : - les rubriques à traiter (calculer, initialiser, etc...) sont associées à des s/programmes qui portent les même noms; - on récupère le nom de la rubrique et on appelle le s/programme qui a le même nom que cette rubrique; - le s/programme réalise l'action voulue, qui peut être différente d'une rubrique à l'autre, et retourne le contrôle au main programme. |
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Inscription : septembre 2007 Messages : 38 ![]() |
Bonjour
Merci pour toutes ces informations. Je suis à priori intéressé par le "faussement dynamique". Je vais voir comment je peux le traiter dans mon cas. Sinon, aurais-tu un programme exemple en ce qui concerne les CALL. Je vois vaguement ce que tu indiques mais s'il est possible d'avoir du concret, ça m'intéresserait. Merci Dvi |
|
|
00
|
|
|
#11 | |||||||
|
Expert Confirmé
![]() Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol Inscription : juin 2007 Messages : 1 782 ![]() |
Citation:
Voilà un jeu de simulation avec un main programme RUB_XX, et deux s/programmes, RUB_01, RUB_02. J'ai utilisé un LDA (ZCU) pour stocker les données en sortie et des données en dur pour les données en entrée. Dans le main j'ai 3 rubriques à initialiser mais je n'ai que deux s/programmes pour tester le fail du programme appelé quand il n'existe pas. Code RUB_XX :
Code RUB_01 :
Code RUB_02 :
NOTA BENE: Si tu ne voulais pas faire 30 IF ... ELSE dans ton programme pour tester les rubriques, avec cette méthode tu vas écrire 30 s/programmes rien que pour initialiser les rubriques à SPACES !! Cette méthode est utilisée pour les cas de traitements bien spécifiques à chaque rubrique et où le nombre de rubriques dépasse les centaines. Cette véritable usine à gaz n'est pas nécessaire pour cuire ton oeuf à la coque. |
|||||||
|
|
00
|
|
|
#12 |
|
Invité régulier
![]() Inscription : septembre 2007 Messages : 38 ![]() |
Bonsoir
Merci pour ta participation et tes exemples. Pour l'instant, j'ai créé un prog qui, à partir d'un résultat de compil, génère les "n" IF et INITIALIZE qu'il m'aurait fallu écrire, pour chaque rubrique de chaque type d'enregsitrement de mon fichier. Je vais insérer ces lignes dans le programme principal. Je pensais qu'il y aurait une solution plus souple et moins verbeuse. A priori, ça n'est pas le cas. Dommage. Merci encore pour ton assistance de ces derniers jours. Dvi |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com