|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre chevronné
![]() ![]() Fabrice Ingénieur systèmes et réseaux Inscription : juin 2005 Messages : 295 ![]() |
Bonjour,
J'ai cherché quelques trucs sur les tableaux à taille variable, les pointeurs... Mais sois c'est trop statique, soit je n'ai pas encore vu en détails et n'arriverait pas à implémenter. Voilà ce que je souhaiterais faire : J'ai un fichier contenant 3 colonnes : MONSIEUR X 02500 12012012 MONSIEUR X 01213 13012012 MONSIEUR Y 04042 16012012 MONSIEUR X 03615 17012012 MONSIEUR Z 01337 18012012 Vous l'aurez compris, il s'agit d'une feuille contenant les dépenses de chaque personne, avec la date. Je souhaiterais faire la moyenne des dépenses, et afficher la moyenne par personne. J'ai lu quelques livres et tutos pour lire ligne par ligne les entrées. Je peux donc faire un traitement ligne par ligne. Pour ne parser qu'une seule fois le fichier... Suis-je obligé de connaitre le nombre exact de personnes à l'avance ? Ou est-ce possible de faire un tableau totalement dynamique qui grandit à chaque fois qu'une nouvelle personne est lue ? Ou suis-je obligé de lire une fois entièrement le fichier, d'appeler une autre procédure qui va allouer un tableau.... avec la taille précédemment obtenue (est-ce possible ?), et faire les moyennes ? Je suis habitué au C et à quelques langages de scripts... Je démarre en COBOL (j'ai obtenu un stage dans le mainframe, et je préfère tater de ça avant de démarrer) Merci de votre aide ! |
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol Inscription : juin 2007 Messages : 1 781 ![]() |
Bonjour.
Je pense qu'il est inutile de passer par des tableaux, de toute façon tu dois lire toutes tes données à partir du fichier, du début à la fin. Tu n'as pas à repasser sur ces données puisque tu n'as pas de calcul de pourcentage par exemple. Si ton fichier n'est pas indexé ou trié sur le champ NOM (ou un identifiant quelconque), il faut le faire pour classer les enregistrements par ordre de cet identifiant sur lequel il suffit tout simplement de cumuler les dépenses et les compter. Quand il y a un changement d'identifiant, tu calcules ta moyenne et tu l'affiches, tu peux aussi l'écrire dans un fichier en sortie (fichier des moyennes). A la fin, tu peux calculer ta moyenne générale. En ce qui concerne les tableaux, on peux travailler avec des tableaux à taille variable sauf que de toute façon il faut prévoir la taille maximale, chose inappropriée dans ce cas. Ce sont les OCCURS DEPENDING ON (ODO). Et je pense que cela n'a rien à voir avec les pointeurs, qui sont par ailleurs très casse-patates en Cobol, mais on peut les utiliser et la moindre erreur nous envoie paître avec les vaches. |
|
|
00
|
|
|
#3 |
|
Membre chevronné
![]() ![]() Fabrice Ingénieur systèmes et réseaux Inscription : juin 2005 Messages : 295 ![]() |
Il faut donc un prétraitement ?
Normalement, ce serait le logiciel générant ces données, ou le SGBD qui renverrait ces données classées ? (okok, le SGBD pourrait fait le calcul :p) Est-il possible de faire ce tri en COBOL ? |
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol Inscription : juin 2007 Messages : 1 781 ![]() |
Bien entendu, généralement on l'évite pour des raisons évidentes de performances si les traitements sont récurrents. On essaie autant que faire se peut de prévoir des clés primaires ou secondaires une fois pour toutes.
On peut faire aussi des tris externes, si on a les outils qu'il faut, et soumettre le fichier trié à un programme Cobol. Le tri interne Cobol peut trier dans un fichier temporaire sans produire un fichier trié à l'extérieur du programme, mais soumettre le fichier temporaire trié au traitement du programme Cobol. Code :
|
||
|
|
10
|
|
|
#5 |
|
Membre chevronné
![]() ![]() Fabrice Ingénieur systèmes et réseaux Inscription : juin 2005 Messages : 295 ![]() |
Super !
Avez-vous de la documentation là dessus ? Et/Ou les méthodes à appliquer pour coder un tel tri dans un fichier temporaire ? Merci de votre aide ! |
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol Inscription : juin 2007 Messages : 1 781 ![]() |
Puisque tu t'intéresses aux mainframes
- manuels : http://ibmmainframes.com/manuals.php - et le site z/OS : http://publib.boulder.ibm.com/infoce...1r12/index.jsp |
|
|
00
|
|
|
#7 | ||||
|
Expert Confirmé
![]() Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol Inscription : juin 2007 Messages : 1 781 ![]() |
A titre d'exemple :
Code :
Citation:
Citation:
|
||||
|
|
20
|
|
|
#8 |
|
Membre chevronné
![]() ![]() Fabrice Ingénieur systèmes et réseaux Inscription : juin 2005 Messages : 295 ![]() |
Wow...
Merci ! J'avais un petit début pour l'écriture dans l'écriture de fichier.... je vais essayer de décortiquer et comprendra ça... Merci beaucoup ! |
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() Inscription : décembre 2007 Messages : 2 541 ![]() |
+1 avec les autres réponses, mais j'aimerais insister sur 3 points :
1)les pointeurs en cobol, c'est à oublier. Je sais que c'est indispensable en C, mais le COBOL n'est pas fait pour ça. 2)Le tri avant traitement est un système extrêmement efficace et performant - en tous cas sur MVS. La solution avec tri interne au programme marche aussi, mais elle est peu répandue(toujours en MVS, je crois que Hédhili Jaïdane bosse sur AS/400, ou les contraintes sont différentes). 3)Une gestion de mémoire vraiment dynamique n'existe pas. Ca a l'avantage d'interdire les fuites mémoires. Evidemment, c'est moins souple à coder. On gagne en exploitation ce qu'on perd en codage.
__________________
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
|
|
|
#10 | |
|
Expert Confirmé
![]() Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol Inscription : juin 2007 Messages : 1 781 ![]() |
Citation:
En effet je bosse sur AS/400 (et suivants) où le tri externe, avant traitement, existe sue l'AS/400, on l'imagine bien, par l'outil classique de tri de Big Blue (GSORT et compagnie). Mais dans la pratique on l'utilise très peu, comme d'ailleurs le tri interne. On préfère passer par les index secondaires des fichiers BD que l'on peut construire très aisément même à travers un programme CL appelé par un programme Cobol. Imaginez tout simplement qu'on est dans une cuisine d'un 5 étoiles |
|
|
|
00
|
|
|
#11 |
|
Membre régulier
![]() Bernard Développeur et formateur Mainframe Inscription : février 2007 Messages : 39 ![]() |
Bravo à Hédhili Jaïdane pour son exemple de code clair et précis !! Ça mériterait bien de figurer dans la partie "Contribuez" du forum.
Ça fait longtemps que j'avais vu un tri interne en COBOL. C'est vrai que sur z/OS c'est largement abandonné et c'est toujours une source de sueurs froides quand il faut intervenir dans ce genre de code. Là ça va ce n'est pas énorme mais quand le code fait plusieurs centaines de lignes ... |
|
|
10
|
|
|
#12 | ||
|
Membre chevronné
![]() ![]() Fabrice Ingénieur systèmes et réseaux Inscription : juin 2005 Messages : 295 ![]() |
Cela fait très longtemps que j'ai fini mon code, et qu'il marche...
Ca ne doit pas être aussi beau que ce que Hedhili proposait, mais je vais quand même mettre mon pitit code... Je l'ai produit avec vos idées et codes, ainsi qu'un livre emprunté à la bibliothèque de mon université pour débuter en COBOL. C'est issu évidemment d'un "nouveau" en COBOL qui a surtout généré du C pour le moment ! (les critiques sont évidemment bienvenues ! ^^' mais je ne pense pas pouvoir faire comme Hedhili en terme d'optimisation/efficacité par moi-même pour le moment...) Code :
|
||
|
10
|
|
|
#13 | ||
|
Expert Confirmé Sénior
![]() Inscription : décembre 2007 Messages : 2 541 ![]() |
Y'a toujours moyen de faire mieux(y compris pour moi), mais, franchement si tous les codes dont j'ai à assurer la maintenance étaient de ce niveau, je serais vraiment content.
*Des noms de paragraphe clairs. *Des noms de variables clairs. *Une indentation de qualité, qui ne varie pas entre les paragraphes. *Un seul point par paragraphe. *Une gestion standardisée des majuscules. C'est quand même très, très bien. Les numéros de paragraphe, ça n'est pas obligatoire, mais c'est propre, et ça participe généralement à la standardisation des noms de paragraphe, qui facilite la maintenance. J'aime aussi. Pour pinailler, je dirais qu'idéalement on place le point de fin de paragraphe tout seul(pour éviter les sueurs froides quand on encapsule tout dans un IF/END-IF) et qu'on aligne les ordres, mais c'est vraiment, vraiment pour pinailler. du genre : 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
|
|
|
#14 |
|
Membre chevronné
![]() ![]() Fabrice Ingénieur systèmes et réseaux Inscription : juin 2005 Messages : 295 ![]() |
Je note pour les . tous seuls !
Le C, et le fait que mon école nous a imposé une norme très très stricte pour nos projets m'a habitué à tout aligner... Mais pour connaitre l'indentation exacte, j'ai essayé de respecter au maximum le livre que je lisais... Il mettait tout en majuscule, et mettait des numéros pour les paragraphes... donc autant faire comme c'était présenté ! C'est ce livre là que j'ai utilisé : Stern, Stern, Ley: COBOL for the 21st Century, 11th Edition Il est un peu "long" et lent quand on a déjà fait pas mal d'impératif... mais les exemples sont clairs... Heureusement votre forum m'a permis de choisir les bons chapitres à lire ! (pour les tris internes par exemple) |
|
00
|
Copyright © 2000-2013 - www.developpez.com