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

Cobol Discussion :

Instruction WRITE FROM


Sujet :

Cobol

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Instruction WRITE FROM
    Soit les fichiers EFIC en entree et SFIC en sortie.

    FILE SECTION

    FD EFIC
    01 ENR-EFIC
    05 echamps PIC X(132)

    FD SFIC
    01 ENR-SFIC
    05 schamps PIC X(132)

    WORKING-STORAGE SECTION.
    01 W-Variable
    05 wchamps PIC X(132).

    Ma question est la suivante : peut-on faire directement WRITE ENR-SFIC FROM ENR-EFIC ? Ou fautil passer par la variable de travail W-variable :

    MOVE echamps TO wchamps
    WRITE ENR-EFIC FROM W-VARIABLE.

  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
    Bonjour.

    Oui, on peut faire un WRITE FROM directement voire même un READ INTO sans passer par un MOVE vers une zone de travail intermédiaire.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    FILE SECTION
    
    FD  EFIC
        01 ENR-EFIC
            05 echamps PIC X(132)
    
    FD  SFIC
        01 ENR-SFIC
            05 schamps PIC X(132)
    
    WORKING-STORAGE SECTION.
         01 W-Variable
              05 wchamps PIC X(132).
    * .../...
    
    * On peut faire : 
    READ EFIC ...
    WRITE ENR-SFIC  FROM ENR-EFIC ...
    
    * ou 
    READ EFIC INTO ENR-SFIC ....
    WRITE ENR-SFIC ...
    
    * ou 
    READ EFIC ....
    MOVE ENR-EFIC TO ENR-SFIC
    WRITE ENR-SFIC ...
    * toutes ces formes sont équivalentes.
    Un petit coup d'oeil sur la documention est grandement nécessaire. Et rien ne vaut un petit test.
    Ne pas hésiter à utiliser les balises code.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Non seulement on peut, mais c'est même fortement recommandé

    L'essentiel est de ne pas utiliser les zones de FD mais celles de working

    le mieux, pour éviter l'usage des buffers de FD est de ne décrire qu'une zone groupe en FD (plus la clef obligatoire si fichier indexé et accès par clef),
    et ne découper les zones des fichiers qu'en WSS (via des copy).

  4. #4
    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 escartefigue Voir le message
    Non seulement on peut, mais c'est même fortement recommandé

    L'essentiel est de ne pas utiliser les zones de FD mais celles de working

    le mieux, pour éviter l'usage des buffers de FD est de ne décrire qu'une zone groupe en FD (plus la clef obligatoire si fichier indexé et accès par clef),
    et ne découper les zones des fichiers qu'en WSS (via des copy).
    Personnellement je ne vois pas trop ce qui milite en ce sens et je n'en suis nullement convaincu, la seule raison qui nous obligerait à passer par la WSS est quand on veut sauvegarder et préserver, pour traitement ultérieur, les données obtenues dans une lecture précédant la toute dernière lecture. C'est le cas par exemple des maps d'écran ou en vue de rapprochement, rupture, etc.., ou quand voudrait encore utiliser des champs d'un buffer en sortie après son écriture effective.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 767
    Points : 10 764
    Points
    10 764
    Par défaut
    Citation Envoyé par Hédhili Jaïdane Voir le message
    Personnellement je ne vois pas trop ce qui milite en ce sens et je n'en suis nullement convaincu, la seule raison qui nous obligerait à passer par la WSS est quand on veut sauvegarder et préserver, pour traitement ultérieur, les données obtenues dans une lecture précédant la toute dernière lecture. C'est le cas par exemple des maps d'écran ou en vue de rapprochement, rupture, etc.., ou quand voudrait encore utiliser des champs d'un buffer en sortie après son écriture effective.
    Pour les fichiers VB typiquement, ne passer que par la FD peut occasionner quelques surprises ...

  6. #6
    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 Darkzinus Voir le message
    Pour les fichiers VB typiquement, ne passer que par la FD peut occasionner quelques surprises ...
    Peut être mais je n'ai aucun soucis avec ce genre de fichier lorsqu'il est correctement structuré en type et en longueur, aussi bien en Cobol/2 et MF/MS qu'en Cobol OPM/ILE sur AS/400 (et suivants). Pour ce qui est des autres plateformes, aucune idée.
    Ceci dit, il faudrait bien s'adapter à son environnement de développement et adopter les meilleures solutions pour éviter les accros même minimes et peu fréquents.

    Merci pour ta remarque.

  7. #7
    Membre averti
    Femme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 179
    Points : 350
    Points
    350
    Par défaut
    Citation Envoyé par Hédhili Jaïdane Voir le message
    Personnellement je ne vois pas trop ce qui milite en ce sens et je n'en suis nullement convaincu, la seule raison qui nous obligerait à passer par la WSS est quand on veut sauvegarder et préserver, pour traitement ultérieur, les données obtenues dans une lecture précédant la toute dernière lecture. C'est le cas par exemple des maps d'écran ou en vue de rapprochement, rupture, etc.., ou quand voudrait encore utiliser des champs d'un buffer en sortie après son écriture effective.
    je suis plutôt d'accord avec escartefigue sur ce sujet: passer systématiquement par la working.
    les FD sont des buffer d'I/O, ce qui signifie que physiquement pour les fichiers de sortie , ce n'est pas quand tu fais le WRITE que ton enregistrement est écrit dans le fichier mais uniquement quand le Buffer d'I/o est plein ou que tu passe sur le CLOSE.
    je ne sais pas si c'est toujours d'actualité avec les versions du compilateur actuel, mais j'ai des souvenir de Bug applicatifs bien tordu à cause de l'utilisation direct sur des fichiers output du buffer d'I/O.
    par exemple, tu WRITE (sans FROM) un enregistrement directement via la zone de la FD, puis, pour je ne sais quelle raison tu modifies une des données de cette FD, cette dernière modification sera appliqué quand même sur ton fichier de sortie même si tu ne fais plus de WRITE

  8. #8
    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 xfanx Voir le message
    ...les FD sont des buffer d'I/O, ce qui signifie que physiquement pour les fichiers de sortie , ce n'est pas quand tu fais le WRITE que ton enregistrement est écrit dans le fichier mais uniquement quand le Buffer d'I/o est plein ou que tu passe sur le CLOSE.
    Nous sommes d'accord, bien que les enregistrements logiques soient considérés comme écrits mais ils ne sont pas disponibles pour une lecture par un autre programme, sauf on si on les force.
    ...par exemple, tu WRITE (sans FROM) un enregistrement directement via la zone de la FD, puis, pour je ne sais quelle raison tu modifies une des données de cette FD, cette dernière modification sera appliqué quand même sur ton fichier de sortie même si tu ne fais plus de WRITE
    Par contre là je suis un peu étonné, mais je fais confiance à ton expérience.
    La seule contrainte que je connaisse pour les WRITE est que un buffer écrit peut très bien être déplacé par l'OS et que par conséquent il peut contenir des données bien différentes de celles qui y étaient avant le WRITE, mais dès qu'on l'initialise à nouveau, les données sont disponibles jusqu'au nouveau WRITE.

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Il faut aussi mentionner que en cas d'utilisation du buffer de FD après fermeture des fichiers, le cancel est garanti

  10. #10
    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 escartefigue Voir le message
    Il faut aussi mentionner que en cas d'utilisation du buffer de FD après fermeture des fichiers, le cancel est garanti
    En effet, il ne faut jamais toucher à la moindre zone des FD quand les fichiers associés ne sont pas ouverts ou viennent d'être fermés (donc non ouverts). Les pointeurs ne seront pas résolus, exception faite des fichiers de tri et des fichiers en USING et GIVING de ce même tri dont les OPEN/CLOSE sont gérés par les routines du SORT, mais là c'est une autre paire de manche.

    Un plaisir de discuter avec des connaisseurs.

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Il faut voir aussi comment est enseigné le cobol de nos jours

    Plus personne n'enseigne les fondamentaux et de nombreux développeurs ont été élevés à la sauce générateur de code dont le produit est d'une très piètre qualité.

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Autre argument en faveur du write from (et du read into) :
    en cas d'utilisation d'un debugeur (orthographe non garantie ) genre intertest ou expeditor, on a dans la working exactement ce qu'on écrit (ou lit) alors que la zone FD est inaccessible, et si move il y a, il n'est pas forcément exactement contigu au write ou move, il a donc pu être altéré (exemple courant : par un dépassement de capacité d'un tableau à occurrences ou d'une zone d'appel d'un sous-programme)

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 767
    Points : 10 764
    Points
    10 764
    Par défaut
    D'ailleurs je parlais de la gestion du VB sur ce sujet. Et bien j'ai encore vu un cas cette semaine de programme mal écrit avec la description fichier en FD avec un joli plantage. Je vois également régulièrement des fichiers VB qui passent d'un "vrai" format d'un enregistrement, par exemple du VB 1300, qui en sortie se trouvent au format VB 5000 du fait de la mauvaise gestion de ceux-ci.

Discussions similaires

  1. Problème avec l'instruction WRITE
    Par Yu Cloud dans le forum Fortran
    Réponses: 3
    Dernier message: 19/01/2012, 19h17
  2. Réponses: 1
    Dernier message: 04/07/2011, 21h35
  3. Erreurs sur instruction Write
    Par taoufiq07 dans le forum Fortran
    Réponses: 11
    Dernier message: 25/10/2010, 21h08
  4. Type illégal dans une instruction Write/writeln
    Par vuong1 dans le forum Delphi
    Réponses: 4
    Dernier message: 10/01/2007, 06h24
  5. [SQL] Problème dans instruction FROM
    Par Virgile59 dans le forum Access
    Réponses: 7
    Dernier message: 21/08/2006, 14h28

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