IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AS/400 Discussion :

CL / AS400 - Lecture de fichier(s) non défini(s) à l'avance


Sujet :

AS/400

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 10
    Points : 6
    Points
    6
    Par défaut CL / AS400 - Lecture de fichier(s) non défini(s) à l'avance
    Bonjour,

    Dans une bibliothèque SETUP, il y a (ou pas) un ou plusieurs fichiers (PAR1, PAR2, etc...) contenant les paramètres utiles pour effectuer des RSTOBJ.
    Avec un DSPOBJD, j'arrive à obtenir un objet LISTE contenant l'ensemble de ces fichiers PARx. Et ,dans une boucle, je récupère dans &ITEM le nom des fichiers.

    Maintenant, j'aimerai à partir de la variable &ITEM lire le contenu des fichiers PARx.

    Je ne sais pas trop comment lire le contenu d'un fichier qui n'est pas déclaré au début d'un programme.

    OVRDBF peut servir à ça?
    Peut-on faire ça en CL?

  2. #2
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par edw4rd Voir le message
    Bonjour,

    Dans une bibliothèque SETUP, il y a (ou pas) un ou plusieurs fichiers (PAR1, PAR2, etc...) contenant les paramètres utiles pour effectuer des RSTOBJ.
    Avec un DSPOBJD, j'arrive à obtenir un objet LISTE contenant l'ensemble de ces fichiers PARx. Et ,dans une boucle, je récupère dans &ITEM le nom des fichiers.

    Maintenant, j'aimerai à partir de la variable &ITEM lire le contenu des fichiers PARx.

    Je ne sais pas trop comment lire le contenu d'un fichier qui n'est pas déclaré au début d'un programme.

    OVRDBF peut servir à ça?
    Peut-on faire ça en CL?
    Bonjour.

    Dans le même CL tu ne pourras pas, du moins jusqu'à nouvel ordre, par contre tu le fais dans un autre CL auquel tu passes le nom du fichier à lire, si et seulement si tes fichiers PARx ont la même description. Tu compiles ce CL avec un fichier bidon PARx et puis tu fais un override pour utiliser PARx.

    Ensuite le plus simple est de passer l'enregistrement lu de PARx à un troisième CL qui traitera les données, si par contre tu veux revenir au premier CL avec ton enregistrement, il faudrait gérer un n° d'enregistrement pour pointer sur le prochain au prochain appel du 2è CL.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    On peut utiliser ovrdbf pour pointer sur le fichier et lire le fichier dans un RPG avec un fichier déclaré en interne.
    On peut utiliser un RPGSQLLE pour utiliser un "Select * from ..."
    On peut créer un fichier dans QTEMP avec une certaine structure ou une certaine longueur, utiliser CPYF avec FMTOPT(*NOCHK) pour copier le fichier dans celui de QTEMP et enfin lire le fichier de QTEMP avec un RPG classique. Seules les zones packées pourraient poser problème ...

    Et je suis sûr qu'il y a encore plein d'autres possibilités ...
    Le tout est de savoir ce que vous voulez faire des données lues ...

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci pour vos réponses.

    La technique du fichier bidon pour la compilation a résolu une partie du problème.

    Je commence à comprendre le fonctionnement de OVRDBF, mais je n'arrive pas à lire tous les fichiers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
                DCLF       FILE(LIB/LISTE)  OPNID(ITEM_LISTE) 
                DCLF       FILE(LIB/PARTEMP)  OPNID(PARAM) 
    LECTURE:    RCVF       OPNID(ITEM_LISTE)                                  
                MONMSG     MSGID(CPF0864) EXEC(GOTO CMDLBL(FINOK))            
                OVRDBF     FILE(PARTEMP) +                                 
                             TOFILE(&SETUP/&ITEM_LISTE_ODOBNM)                
    
    TRTSAVF:    RCVF       OPNID(PARAM)                                       
                MONMSG     MSGID(CPF0864) EXEC(GOTO CMDLBL(FINSAVF))          
       /* Traitement SAVF ici */                                                  
                GOTO       CMDLBL(TRTSAVF)                                    
                                                                              
    FINSAVF:    DLTOVR     FILE(*ALL)       
                GOTO       CMDLBL(LECTURE)
    J'arrive à lire le premier fichier et ... c'est tout.
    D'après ce que je vois dans le DSPJOBLOG, il reste bloqué sur le premier fichier.
    Et l'ajout de la commande DLTOVR ne change rien.

    Est-ce que cela vient de la commande OVRDBF? ou le problème est ailleurs?

  5. #5
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Re,

    - Tu as le droit à un seul DCLF par programme CL, c'est pour cela que j'ai parlé d'un deuxième CL.
    -L'OVRDBF doit précéder le premier RCVF

    Voilà un petit exemple vite fait et qui fonctionne sur tous les fichiers listés par DSPOBJD.

    Programme RCVFMULTI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    0001.00  DEBUT:     PGM                                                        
    0002.00             DCLF QSYS/QADSPOBJ                                         
    0003.00  DSPOBJD:                                                              
    0004.00              DSPOBJD    OBJ(JAIDANE1/SRC80*) OBJTYPE(*FILE) +          
    0005.00                           OUTPUT(*OUTFILE) OUTFILE(JAIDANE1/LIST_SRC80)
    0006.00             OVRDBF QADSPOBJ TOFILE(JAIDANE1/LIST_SRC80)                
    0007.00  RCVF:                                                                 
    0008.00             RCVF                                                       
    0009.00             MONMSG CPF0864 EXEC(GOTO RCVF_FIN)                         
    0010.00             IF (&ODOBNM *EQ 'SRC80_XX') GOTO RCVF                      
    0011.00              CALL JAIDANE1/RCVFMULTI1 +                                
    0012.00                   PARM(&ODOBNM)                                        
    0013.00                                                                        
    0014.00  RCVF_RET:  GOTO RCVF                                                  
    0015.00  RCVF_FIN:                                                             
    0016.00  FIN:       DLTOVR *ALL


    Programme RCVFMULTI1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    0001.00  DEBUT:     PGM &FILE                                            
    0002.00             DCLF JAIDANE1/SRC80_XX                               
    0003.00             DCL &FILE *CHAR 10                                   
    0004.00                                                                  
    0005.00             OVRDBF SRC80_XX TOFILE(JAIDANE1/&FILE)               
    0006.00  RCVF:                                                           
    0007.00             RCVF                                                 
    0008.00             MONMSG CPF0864 EXEC(GOTO RCVF_FIN)                   
    0009.00             SNDUSRMSG &SRCDTA                                    
    0010.00                                                                  
    0011.00  RCVF_RET:  GOTO RCVF                                            
    0012.00  RCVF_FIN:                                                       
    0013.00  FIN:       DLTOVR *ALL                                          
    0014.00             ENDPGM


  6. #6
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 684
    Points : 985
    Points
    985
    Par défaut
    Bonjour,
    Comme il te l'a été indiqué au départ, tu ne peux pas mettre l'OVRDBF dans le CL ou tu vas lire. En effet le fichier est ouvert au début du programme.
    Fais ton OVRDBF et appelle le CL où tu ouvriras et liras le fichier concerné.
    Reste que faire çà en CL est un peu étrange.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Fais ton OVRDBF et appelle le CL où tu ouvriras et liras le fichier concerné.
    Reste que faire çà en CL est un peu étrange.
    Dans mon cas, je fais un OVRDBF uniquement dans le programme appelé.

    Programme principal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                DCLF       FILE(LIB/LISTE)  OPNID(ITEM_LISTE) 
    LECTURE:    RCVF       OPNID(ITEM_LISTE)                       
                MONMSG     MSGID(CPF0864) EXEC(GOTO CMDLBL(FINOK)) 
    /*********  **********************************  ******/        
                CALL       LIBPGM/TEST PARM(&ITEM_LISTE_ODOBNM)                                   
                                                                              
                GOTO       CMDLBL(LECTURE)
    Programme TEST:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                PGM       &FILE                                      
                DCL       &FILE *CHAR 10                             
                DCLF       FILE(LIB/PARTEMP)  OPNID(PARAM)
                                                                     
                OVRDBF     FILE(PARTEMP) TOFILE(LIB/&FILE)                      
                                           
    LECT:       RCVF       OPNID(PARAM)                                 
                MONMSG     CPF0864 EXEC(GOTO FINOK)                      
          /* Traitement SAVF ici */                       
                GOTO       CMDLBL(LECT)
    Effectivement, ça fonctionne tout de suite mieux avec un 2e CL.



  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    petite précision: avec mon exemple j'obtiens l'erreur suivante:
    " Erreur de niveau sur fichier xxx de xxx, membre xxx. "

    J'ai du ajouter l'option suivante pour la commande OVRDBF:

  9. #9
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par edw4rd Voir le message
    petite précision: avec mon exemple j'obtiens l'erreur suivante:
    " Erreur de niveau sur fichier xxx de xxx, membre xxx. "

    J'ai du ajouter l'option suivante pour la commande OVRDBF:
    Bonjour.

    OK. Mais méfie toi quand même, un petit quelque chose a changé dans la description des champs du fichier ou les propriétés du fichier lui même entre le moment où il a été utilisé par le compilateur lors de la création du programme et le moment où il a été utilisé par ce programme.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/09/2007, 09h31
  2. Lecture de fichier et méthodes non documentées
    Par alexrtz dans le forum Ruby
    Réponses: 4
    Dernier message: 04/06/2007, 14h41
  3. Réponses: 2
    Dernier message: 05/01/2006, 15h17
  4. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 12h57
  5. [AS400][Intranet][PC] Lecture de "fichiers" AS400
    Par lando dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 16/07/2003, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo