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 :

Initialisation d'une zone sans utiliser INITIALIZE


Sujet :

Cobol

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Macao

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Initialisation d'une zone sans utiliser INITIALIZE
    Bonjour,

    Je demande si y'a un autre moyen plus pratique d'initialiser une zone sans passer par INITIALIZE, et sans passer par une initialisation ( variable par variable ).

    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    01  MXXXXXX-OP01.
       03 OP01-D-REF.
            05 C-FORMT-D PIC 9(4) COMP-4.
                 88 ED-ISO VALUE 0.
                 88 ED-XXX VALUE 1.  
                 88 ED-YYY VALUE 2.
            05 D-ISO.
                 06 D-ISO-AAAA PIC 9(4).
                 06 D-ISO-CT1 PIC X.
                 06 D-ISO-MM PIC 9(2).
                 06 D-ISO-CT2 PIC X. 
                 06 D-ISO-JJ PIC 9(2).
    Ceci est mon premier post sur ce forum, montrez moi votre chaleur d'accueil

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur et formateur Mainframe
    Inscrit en
    Février 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur et formateur Mainframe
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 44
    Points : 103
    Points
    103
    Par défaut
    Bonjour oviich

    Non il n'y a pas de commande autre que l'INITIALIZE et le MOVE variable par variable permettant d'initialiser une variable.

    Ce qui peut être fait en revanche c'est valoriser tes variables en les déclarant. Si on reprend ton code en exemple ça donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    01  MXXXXXX-OP01.
       03 OP01-D-REF.
            05 C-FORMT-D PIC 9(4) COMP-4.
                 88 ED-ISO VALUE 0.
                 88 ED-XXX VALUE 1.  
                 88 ED-YYY VALUE 2.
            05 D-ISO.
                 06 D-ISO-AAAA PIC 9(4) VALUE 0.
                 06 D-ISO-CT1  PIC X    VALUE SPACE.
                 06 D-ISO-MM   PIC 9(2) VALUE 0.
                 06 D-ISO-CT2  PIC X    VALUE SPACE. 
                 06 D-ISO-JJ   PIC 9(2) VALUE 0.
    Mais je ne vois pas en quoi l'INITIALIZE ne te semble pas pratique. Un INITIALIZE sur une zone groupe initialise les variables élémentaires selon leur PICTURE.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    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 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    Bonjour

    Sujet récurrent, dont voici l'un des clones http://www.developpez.net/forums/d13...on-initialize/

    Le souci éventuel d'initialize est la présence de redefines, auquel cas il faut faire les move avec les valeurs souhaitées (numérique par exemple)

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Macao

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour

    Sujet récurrent, dont voici l'un des clones http://www.developpez.net/forums/d13...on-initialize/

    Le souci éventuel d'initialize est la présence de redefines, auquel cas il faut faire les move avec les valeurs souhaitées (numérique par exemple)
    Merci escartefigue, je vais y jeter un coup d'oeil.

    Citation Envoyé par BernardBZH Voir le message
    Bonjour oviich

    Mais je ne vois pas en quoi l'INITIALIZE ne te semble pas pratique. Un INITIALIZE sur une zone groupe initialise les variables élémentaires selon leur PICTURE.
    INITIALIZE c'est pratique, mais le client avec lequel je travaille m'a demandé de ne pas l'utiliser, peut être, çà consôme trop en memoire. Vu qu'on travaille avec des copy oû y'a beaucoup de zones, et juste quelques unes qui seront utilisées à chaque traitement, c'est pas la peine de initializer 1000 variable si on ne va utiliser que 40 par exemple.

    Merci pou votre passage

  5. #5
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 044
    Points
    32 044
    Par défaut
    Citation Envoyé par oviich Voir le message
    (.../...)
    INITIALIZE c'est pratique, mais le client avec lequel je travaille m'a demandé de ne pas l'utiliser, peut être, çà consôme trop en memoire. Vu qu'on travaille avec des copy oû y'a beaucoup de zones, et juste quelques unes qui seront utilisées à chaque traitement, c'est pas la peine de initializer 1000 variable si on ne va utiliser que 40 par exemple.

    Merci pou votre passage
    Il est louche, le client. 99% des problèmes de perf, c'est de l'entrée/sortie en trop grand nombre. les 1% restants étant généralement des algorithmes aberrants(j'ai pratiqué, honte à moi). Franchement, l'emprunte d'un initialize, par rapport à une entrée sortie, c'est peanuts.

    Après, si il te fait chier là dessus, ben, pas d'autre choix que de faire un MOVE correspondant à la valeur à initialiser. Mais c'est vraiment chercher à économiser des grains de sables dans le Sahara...
    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.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Macao

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par el_slapper Voir le message
    ... pas d'autre choix que de faire un MOVE correspondant à la valeur à initialiser. Mais c'est vraiment chercher à économiser des grains de sables dans le Sahara...
    Y'a rien de plus chiantque ces MOVE.. TO pour initializer. Y'avais vraiment beaucoup d'allez retour concernant ce sujet, mais ce client insiste pour ne pas utiliser INITIALIZE. Je pense que je n'ai pas d'autre choix.

    Merci pour ton passage

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 763
    Points : 10 738
    Points
    10 738
    Par défaut
    Citation Envoyé par el_slapper Voir le message
    Franchement, l'emprunte d'un initialize, par rapport à une entrée sortie, c'est peanuts.
    Il y a quand même le cas des initialize de tableaux (à outrance) qui peuvent être très coûteux. Suite à une modification sur ce genre d'initialize j'ai eu une fois un gain avec un facteur 100 niveau temps CPU.

  8. #8
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par oviich Voir le message
    Y'a rien de plus chiantque ces MOVE.. TO pour initializer. Y'avais vraiment beaucoup d'allez retour concernant ce sujet, mais ce client insiste pour ne pas utiliser INITIALIZE. Je pense que je n'ai pas d'autre choix.
    Si c'est pour remplacer l'instruction COBOL INITIALIZE en un ensemble d'instructions MOVE élémentaires qui font exactement la même chose, et, souvent, en moins bien, c'est complètement idiot.

    La seule question pertinente à se poser, c'est de savoir, si, à l'endroit où je suis dans mon programme, dois je *vraiment* initialiser tout ou partie du bloc des données ?

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Macao

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Luc Orient Voir le message
    Si c'est pour remplacer l'instruction COBOL INITIALIZE en un ensemble d'instructions MOVE élémentaires qui font exactement la même chose, et, souvent, en moins bien, c'est complètement idiot.

    La seule question pertinente à se poser, c'est de savoir, si, à l'endroit où je suis dans mon programme, dois je *vraiment* initialiser tout ou partie du bloc des données ?
    Même s'il faut initializer tout le bloc, il nous a été *interdit* de le faire avec initialize.
    J'ai remarqué que on utilise pas beaucoup de variables numeriques, j'ai pensé à çà :
    1. J'initialize le bloc avec SPACE, un MOVE SPACE TO ... ( çà met toutes les variables alphanumeriques du bloc à SPACE).
    2. Je fais des MOVE ZERO TO (Mes variables numeriques).


    Mais ,toute autre proposition est la bienvenue.

  10. #10
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par oviich Voir le message
    Même s'il faut initializer tout le bloc, il nous a été *interdit* de le faire avec initialize.
    Eh bien, c'est *débile*, *crétin*, *idiot*, *stupide*, *navrant* ...


    J'ai remarqué que on utilise pas beaucoup de variables numeriques, j'ai pensé à çà :
    1. J'initialize le bloc avec SPACE, un MOVE SPACE TO ... ( çà met toutes les variables alphanumeriques du bloc à SPACE).
    2. Je fais des MOVE ZERO TO (Mes variables numeriques).
    C'est sans doute mieux (enfin j'espère), puisque le compilateur sur un MOVE bloc risque de générer une instruction machine MOVE LONG, d'une redoutable efficacité ...

    Reste l'épineux problème des tables avec OCCURS ...

  11. #11
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Bonjour

    Même si la discussion est fini, je poste la solution que j'avais mis en place pour les copies avec des REDEFINES.
    Nous avons réussi a résoudre notre problème comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MOVE SPACES        TO LA_ZONE
    INITIALIZE LA_ZONE REPLACING NUMERIC BY ZEROES

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    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 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Luc Orient Voir le message
    Eh bien, c'est *débile*, *crétin*, *idiot*, *stupide*, *navrant* ...
    Tout à fait d'accord, sauf si les gens qui ont pondu cette interdiction fournissent les explications qui vont avec... Je doute que des arguments acceptables soient produits !

  13. #13
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    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 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par el_slapper Voir le message
    Il est louche, le client. 99% des problèmes de perf, c'est de l'entrée/sortie en trop grand nombre. les 1% restants étant généralement des algorithmes aberrants(j'ai pratiqué, honte à moi). Franchement, l'emprunte d'un initialize, par rapport à une entrée sortie, c'est peanuts.
    Tout à fait d'accord concernant les I/O qui représentent le plus clair du temps de traitement, mais les développeurs oublient trop souvent l'impact du format des données.
    Ce n'est guère surprenant, ce genre de subtilités n'est plus enseigné, mais il faut quand même rappeler que les mêmes instructions appliquées sur des montants binaires, packés ou étendus n'ont pas du tout le même coût.
    Le format étendu, tant prisé par les débutants car facile à lire dans les dumps, coûte 8 fois plus cher que du binaire, et 3 fois plus que du packé !
    Le gain n'est pas toujours marginal, certains traitements qui font essentiellement du calcul, méritent qu'on soigne aussi cet aspect du code.

  14. #14
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Bonjour
    qques explications, et pas une excuse, sur l'interdiction de l'INITIALIZE:
    1. Certains programmeurs utilisent INITIALIZE sur des zones qui seront systématiquement remplies, comme avant de lire un record d'un fichier. Quand le prog traite des millions de records, la consommation cpu en prend un coup.
    2. Sur certains forums, on préconise de ne pas utliser INITIALIZE pour réduire la conso CPU. Et si on ne lit pas tout l'article ET la doc, c'est ce qui est décidé par les responsables et qques programmeurs.

  15. #15
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 044
    Points
    32 044
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Tout à fait d'accord concernant les I/O qui représentent le plus clair du temps de traitement, mais les développeurs oublient trop souvent l'impact du format des données.
    Ce n'est guère surprenant, ce genre de subtilités n'est plus enseigné, mais il faut quand même rappeler que les mêmes instructions appliquées sur des montants binaires, packés ou étendus n'ont pas du tout le même coût.
    Le format étendu, tant prisé par les débutants car facile à lire dans les dumps, coûte 8 fois plus cher que du binaire, et 3 fois plus que du packé !
    Le gain n'est pas toujours marginal, certains traitements qui font essentiellement du calcul, méritent qu'on soigne aussi cet aspect du code.
    ça, ça dépend des machines. Tu parles sans doute de MVS. Je peux te dire que j'ai fait des tests exhaustifs avec opencobol sur ma machine, et il y a un des types de binaires qui est juste 15 fois plus rapide que tout le reste. Mais si je passe à une machine 32 bits, ça sera tout à fait différent. L'idéal, en fait, c'est de mesurer sur la machine de prod.
    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.

  16. #16
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    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 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par el_slapper Voir le message
    ça, ça dépend des machines. Tu parles sans doute de MVS.
    MVS et Z/OS En effet

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

Discussions similaires

  1. [AC-2000] Re-initialisation d'une zone utilisée dans un select
    Par JP64700 dans le forum IHM
    Réponses: 3
    Dernier message: 26/06/2010, 07h11
  2. Réponses: 11
    Dernier message: 19/02/2007, 00h20
  3. Pause dans une application sans utiliser Sleep()
    Par CriPpLe dans le forum MFC
    Réponses: 9
    Dernier message: 25/03/2006, 12h00
  4. Réponses: 18
    Dernier message: 03/03/2006, 19h19
  5. Réponses: 9
    Dernier message: 30/11/2005, 19h18

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