Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > z/OS
z/OS Forum d'entraide sur z/OS et MVS (Multiple Virtual Storage), les systèmes d'exploitation des ordinateurs « mainframes » IBM : JCL, Tso, Ispf, Vsam, Racf, SMS, Cics, Ims, OPC, Ca-7, Control-M, Dialog Manager ...
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 22/02/2010, 14h52   #1
Membre confirmé
 
Inscription : mars 2004
Messages : 1 149
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 149
Points : 224
Points : 224
Par défaut REXX et problème de Storage

Bonjour,

j'ai le REXX suivant

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14

DROPBUF 0                                   
NB=0                                        
"EXECIO * DISKR IN2(FINIS "                 
DO I=1 TO QUEUED()                          
PULL IN.I                                   
IF SUBSTR(IN.I,2,8) ^= ' '                  
THEN DO                                     
     NB = NB +1                             
     END                                    
ELSE DO                                     
     END                                    
END
Il plante avec le message suivant :

IRX0802E Storage not available.
IRX0673E EXECIO error while trying to put an element on the data stack.


DO I=1 TO QUEUED()

Savez-vous cce que je peux faire pour palier à ce problème ?

De plus c'est un REXX qui s'exécute par Batch. Alors, je ne vois pas l'utilité du :

PULL IN.I ....

Merci pour votre aide.
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2010, 15h41   #2
Membre chevronné
 
Avatar de bernard59139
 
Administrateur de base de données
Inscription : octobre 2006
Messages : 477
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : octobre 2006
Messages : 477
Points : 657
Points : 657
Bonjour


le fichier en entrée est trop volumineux.

et le rexx n'est pas optimiser pour utiliser les automatismes du langage.

pour essayer de passer, je coderai
Code :
1
2
3
4
5
6
7
8
NB=0                                        
"EXECIO * DISKR IN2(STEM IN. FINIS "                 
DO I=1 TO IN.0
     IF SUBSTR(IN.I,2,8) ^= ' '   THEN DO                                     
         NB = NB +1                             
     END                                    
END
ou encore, je prefererai pour economiser la mémoire:
Code :
1
2
3
4
5
6
7
8
9
10
NB=0 
vrc = 0                                       
"EXECIO 1 DISKR IN2 (stem in.  "                 
vrc = rc
do while vrc = 0             
   IF SUBSTR(IN.1,2,8) ^= ' '  THEN  NB = NB +1                             
   "EXECIO 1 DISKR IN2 (stem in.  "                 
END
"execio 0 diskr in2 (finis"
bernard59139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2010, 15h47   #3
Membre habitué
 
Inscription : janvier 2008
Messages : 120
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 120
Points : 141
Points : 141
Bonjour, puisque c'est un Batch j'augmenterais le parametres JCl
REGION= sur le STEP et la carte Job.

enfin.. dans la limite du raisonnable bien sur. si c'est vraiment un gros fichier, alors j'éviterais l'utilisation de l'EXECIO sous cette forme
xfanx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2010, 16h12   #4
Membre confirmé
 
Inscription : mars 2004
Messages : 1 149
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 149
Points : 224
Points : 224
OK.

Merci bernard59139, je vais essayer ta deuxième solution.

Par contre quelqu'un peut me dire à quoi sert le PULL IN.I... ?
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2010, 05h48   #5
Membre chevronné
 
Avatar de bernard59139
 
Administrateur de base de données
Inscription : octobre 2006
Messages : 477
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : octobre 2006
Messages : 477
Points : 657
Points : 657
Bonjour

L'action du "PULL IN.I' :
  1. prend une ligne dans la pile
  2. et la stocke dans une variable "IN" indicée par la variable "I"
bonne journée
bernard59139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2010, 10h20   #6
Membre confirmé
 
Inscription : mars 2004
Messages : 1 149
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 149
Points : 224
Points : 224
OK.

Merci.
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2010, 10h42   #7
Membre confirmé
 
Inscription : mars 2004
Messages : 1 149
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 149
Points : 224
Points : 224
ou encore, je prefererai pour economiser la mémoire:
Code :
1
2
3
4
5
6
7
8
9
10
NB=0 
vrc = 0                                       
"EXECIO 1 DISKR IN2 (stem in.  "                 
vrc = rc
do while vrc = 0             
   IF SUBSTR(IN.1,2,8) ^= ' '  THEN  NB = NB +1                             
   "EXECIO 1 DISKR IN2 (stem in.  "                 
END
"execio 0 diskr in2 (finis"
[/QUOTE]

Heu je crois qu'il y a un souci...

Dans cette partie, le VRC est tout le temps = à 0....
Ca fait une boucle éternelle ce truc là...
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2010, 10h47   #8
Membre chevronné
 
Avatar de bernard59139
 
Administrateur de base de données
Inscription : octobre 2006
Messages : 477
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : octobre 2006
Messages : 477
Points : 657
Points : 657
oups!
c'est un bout de code écrit rapidement sans tests possible de mon coté.

Code :
1
2
3
4
5
6
7
8
9
10
NB=0 
vrc = 0                                       
"EXECIO 1 DISKR IN2 (stem in.  "                 
vrc = rc
do while vrc = 0             
   IF SUBSTR(IN.1,2,8) ^= ' '  THEN  NB = NB +1                             
   "EXECIO 1 DISKR IN2 (stem in.  "
   VRC=rc   /* <===== */                 
END
"execio 0 diskr in2 (finis
bernard59139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2010, 15h30   #9
Membre confirmé
 
Inscription : mars 2004
Messages : 1 149
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 149
Points : 224
Points : 224
J'avais corrigé exactement de la même façon ;-))

Merci.
sam01 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 +1. Il est actuellement 13h23.


 
 
 
 
Partenaires

Hébergement Web