|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() Inscription : mars 2004 Messages : 1 187 ![]() |
existe-t-il un programme qui permet de connaître la taille d'un fichier ?
exemple : si le fichier est trop volumineux, je n'exécute pas le step précédent. |
|
|
00
|
|
|
#2 | ||
|
Membre expérimenté
![]() Inscription : octobre 2007 Messages : 449 ![]() |
En MVS les informations de taille d'un fichier ne sont même pas inscrites au catalogue. Elles sont contenues dans les DSCB de la VTOC qu'il faut donc lire. Ca ne laisse que deux possibilités : Un Assembleur ou un REXX via l'instruction LISTDSI. Un tel REXX ne peut en plus pas être appelé via un EXEC PGM=IRXJCL mais via IKJEFT01 (TSO).
Exemple de REXX pour pour vérifier une bonne partie des variables accessibles via la fonction LISTDSI : Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Inscription : mars 2004 Messages : 1 187 ![]() |
Merci. Par rexx je connais.
C'est dommage qu'il n'y ait pas de pgm ibm. Tanpis. |
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Inscription : octobre 2008 Messages : 7 ![]() |
Dans le cas de fichier multi-volumes, la procédure ne semble lire les infos que du premier volume.
Peut-on me le confirmer? Y'a t il moyen de passer outre? |
|
|
00
|
|
|
#5 |
|
Membre expérimenté
![]() Inscription : octobre 2007 Messages : 449 ![]() |
Exact, après vérification, LISTDSI renvoie un Reason Code 19 dans ce cas (SYSREASON).
Pour autant, LISTDSI répond bien à la question d'origine : connaitre la taille d'un fichier. A ma connaissance, les allocations totale et utilisée (SYALLOC, SYSUSED) sont rendues correctement, même pour un fichier multi volumes. Si le fichier est multi volumes, on reçoit un message IKJ8419I explicite dans SYSMSGLVL1 et 2 et on ne récupère que le premier volume dans SYSVOLUME. On peut toujours dans ce cas passer un LISTCAT VOL pour récupérer la liste des volumes. Au niveau d'un fichier il faudrait essayer mais on devrait aussi retrouver l'info via Library Management. Au niveau gestion globale des fichiers, encore une fois c'est plutôt le DCOLLECT la bonne solution. |
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : octobre 2008 Messages : 7 ![]() |
Je vais te contredire mais SYALLOC, SYSUSED ne donne que l'alloc et le used du premier volume (en général ont a la meme valeur).
Et le prob du DCOLLECT c'est que les info ne sont pas exploitable directement à moins que tu n'es qqchose pour exploiter le résultat. |
|
|
00
|
|
|
#7 |
|
Membre expérimenté
![]() Inscription : octobre 2007 Messages : 449 ![]() |
Oups, je viens de vérifier, tu as raison et mes fichues idées reçues étaient fausses. En cas de fichier multi-volumes LISTDSI ne donne que le premier volume, donc SYSALLOC = SYSUSED au maximum d'extent pour l'allocation utilisée sur le premier volume.
Pour le DCOLLECT j'utilise un REXX qui s'inspire du LISTVTOC proposé en modèle par Thierry Fallisard sur CBTTAPE (vraiment très bien construit ce sample) qui fusionne en fait les info du DCOLLECT et du catalogue via un programme d'appel IGGCSI. Voir aussi ARCETOOLS en SYS1.SAMPLIB : il y a tout ce qu'il faut. Sorti de là j'ai déjà dans des temps anciens géré ça en Assembleur (lecture CAMLST des DSCB VTOC) mais je n'ai pas d'autre idée sur le sujet dans l'immédiat et vais je explorer qques pistes par curiosité également (DFDSS par exemple, les autres programmes standards capables de lire les DSCB VTOC ne doivent pas être foules) |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : octobre 2008 Messages : 7 ![]() |
Pourrais tu diffuser ton rexx ou donner des liens stp
|
|
|
00
|
|
|
#9 | ||
|
Membre expérimenté
![]() Inscription : octobre 2007 Messages : 449 ![]() |
En cherchant dans la doc Library Management je suis tombé sur la solution REXX/ISPF :
DSINFO que j'avais un peu oublié : Code :
|
||
|
|
00
|
|
|
#10 |
|
Membre expérimenté
![]() Inscription : octobre 2007 Messages : 449 ![]() |
Pour le lien CBTTAPE et le mode d'emploi je j'avais déjà donné recemment sur ce forum :
http://www.developpez.net/forums/d61...iste-fichiers/ |
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : octobre 2008 Messages : 7 ![]() |
Nom code
"EXECIO * DISKR LIST (FINIS STEM List." "FREE FI(LIST)" DO i=1 to List.0 Fic="'"WORD(List.i,1)"'" /* SAY Fic */ address ISPEXEC "DSINFO DATASET('"Fic"')" CALL _Info END _Info: say "ZDSVOL First or only volume :" ZDSVOL say "ZDS£VOLS Number of volumes :" ZDS£VOLS say "ZDSDEVT Device type :" ZDSDEVT . . . Return Le résultat ZDSVOL First or only volume : ZDSVOL ZDS£VOLS Number of volumes : ZDS£VOLS ZDSDEVT Device type : ZDSDEVT ... Qu'est ce que j'ai bien pu oublié? |
|
|
00
|
|
|
#12 | ||
|
Membre expérimenté
![]() Inscription : octobre 2007 Messages : 449 ![]() |
Code :
Je pense que l'erreur vient du fait que tu ajoutes une quote devant et après le DSN lors de l'affectation FIC= et une nouvelle fois dans le DSINFO qui ne devrait pas aimer ''Fic''. Nb. Si réellement tu dois gérer une liste de fichier et que celle-ci est assez conséquente, si tu n'as besoin que des infos catalogue (pas les allocations QSAM mais on a les alloc VSAM) tu trouveras éventuellement un intérêt à regarder le sample IGGCSIRX en SYS1.SAMPLIB. C'est une gestion moins évidente mais terriblement plus performante. |
||
|
|
00
|
|
|
#13 |
|
Invité régulier
![]() Inscription : octobre 2008 Messages : 7 ![]() |
J'ai essayé sans les quotes, à chaque fois j'ai un RC -3.
|
|
|
00
|
|
|
#14 |
|
Membre expérimenté
![]() Inscription : octobre 2007 Messages : 449 ![]() |
Il faut entourer le DSN d'une appostrophe mais d'une seule.
RC-3 : Tu n'essaierais pas de passer ça en Batch par hasard ? Sous TSO ISPF est lancé, en Batch il faut un JCL spécial. J'avais bien noté qu'il n'y a pas d'alloc avant l'execio mais j'avais mis ça sur le compte d'une copie partielle avec seulement la fin du REXX. Pour le Batch, si on a besoin de passer un ISPEXEC dans son REXX, il faut faire monter ISPF par un ISPSTART et indiquer une ISPPROF et toutes les ISPxLIB en particulier qui vont bien. J'ai déjà indiqué un JCL exemple sur ce forum : http://www.developpez.net/forums/d61...ebcopy-select/ |
|
|
00
|
|
|
#15 |
|
Invité régulier
![]() Inscription : octobre 2008 Messages : 7 ![]() |
J'utilise en effet un batch, je vais essayer tout ca. Et mci bcp pour ton aide.
|
|
|
00
|
|
|
#16 |
|
Membre expérimenté
![]() Inscription : octobre 2007 Messages : 449 ![]() |
Juste un point de détail, dans ton batch, entre l'acquisition de la liste des fichiers à traiter et la recup. des infos fichiers un par un, certains peuvent ne plus être accessibles (REXX est un langage très bien mais il ne brille pas en performances). Penser à réinitialiser les variables ou ajouter un truc tu genre IF RC > 0 then iterate apres le DSINFO dans la boucle, sinon ils ressortiraient avec les attributs du fichier précédent.
|
|
|
00
|
|
|
#17 |
|
Invité régulier
![]() Inscription : octobre 2008 Messages : 7 ![]() |
Yep nikel c'est parfait.
Aller je vais abuser de tes connaissances. A part "ALLOC DD(DDIN) dsn(" fic ") SHR REUSE" "EXECIO * DISKRU DDIN (FINIS STEM NBR." Count=NBR.0 Aurais tu qqchose pour compter le nombre d'enregistrement dans un PDS sans avoir à l'ouvrir car pour les gros (tres gros fichiers) c'est tres lent voir çà plante. |
|
|
00
|
|
|
#18 |
|
Membre expérimenté
![]() Inscription : octobre 2007 Messages : 449 ![]() |
Peux-tu préciser ? Un PDS ? De quel type Fixe ou indéfini (LOADLIB)
Dans un PDS tu peux éventuellement t'appuyer sur les statistiques Directory à condition que celles-ci soient à jour (LMMFIND ou LMMSTATS). Si c'est un simple fichier QSAM, il n'y a pas le choix, il faudra le lire jusqu'au bout ou déduire grosso modo le nombre d'enregistrements d'après un ratio de sa taille / à son blksize. En clair le nombre d'enregistrement n'est ni au catalogue ni en VTOC à ma connaissance. Si on veut lire un gros fichier en REXX (mais pour des raisons des performances, je préfererai largement COBOL en particulier), il faudra éviter un EXECIO 0 DISKR qui risque de planter s'il n'a pas la place de tout charger en mémoire mais boucler sur un EXECIO 1 DISKR et réserver le paramètre FINIS sur un dernier appel EXECIO 0 DISKR ddname (FINIS. Point de détail, j'éviterai aussi le DISKRU qui fait un OPEN OUTPUT et va en plus provoquer un ENQ et donc dégrader les performances. Si le fichier doit être MAJ, en cas de plantage c'est en plus assez dangereux. |
|
|
00
|
|
|
#19 |
|
Membre expérimenté
![]() Inscription : octobre 2007 Messages : 449 ![]() |
Juste une précision. Si tu veux compter le nombre total des enregistrements d'un PDS tu peux le mettre 'à plat' dans un fichier QSAM via l'utilitaire IEBPTPCH
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com