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 :

[z/OS] Fichiers séquentiels taille variable


Sujet :

Cobol

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Par défaut [z/OS] Fichiers séquentiels taille variable
    Bonjour,

    Je travaille sur des fichiers en COBOL séquentiels de taille fixe avec des enregistrement de taille très grandes ( ~2000 caractères). Sauf que la totalité de l'enregistrement n'est pas exploitée : les données vont de 250 caractères pour certaines lignes, voir 1000 ou 1500 ou moins selon le traitement effectué.

    Mon but est d'alléger la taille de mes fichiers en sortie en les déclarants de taille variable ou dynamique de façon à tronquer automatiquement lors des WRITE les champs vides et les FILLER value '0' placées à la fin de chaque ligne après les données utiles.

    Ceci étant, j’aimerai garder une structure séquentielle de chaque fichier

    Comment déclarer les fichiers et les enregistrements FD appropriés ?

    Y'a t'il un moyen simple pour réduire la taille du fichier de façon à ce que seuls les donnés utiles soient enregistrées en sortie ou faut-il déclarer plusieurs enregistrements de tailles différentes (300, 500, 1000, 1500, …) pour chaque fichier où je ferai un STRING(1 :300 ou 1 :500 ….) de l’enregistrement des valeurs calculées après traitement ?

    Merci de votre participation

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

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Par défaut
    Citation Envoyé par lediscount
    ... Y'a t'il un moyen simple pour réduire la taille du fichier de façon à ce que seuls les donnés utiles soient enregistrées en sortie ou faut-il déclarer plusieurs enregistrements de tailles différentes (300, 500, 1000, 1500, …) pour chaque fichier où je ferai un STRING(1 :300 ou 1 :500 ….) de l’enregistrement des valeurs calculées après traitement ?
    Les deux solutions sont possibles :
    • Vous pouvez déclarer plusieurs niveaux 01 et votre fichier est de longueur variable avec un nombre limité de longueurs différentes (4 ou 5 par exemple ...)

    • Vous pouvez déclarer le fichier complètement variable (de 1 à n caractères) avec une clause OCCURS DEPENDING ON dans la description de l'enregistrement

    Question complémentaire :
    Vous êtes dans un environnement Mainframe ou autre ?

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut Alerte !
    Juste un mot d'avertissement.

    Attention aux enregistrements de longueur variable qui sont souvent difficiles à gérer dans les programmes.

    Je vous le signale pour l'avoir subi sur mainframe.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Par défaut suite
    Merci pour vos réponses. Il s'agit effectivement d'un environnement Mainframe.

    Pour la déclaration de plusieurs niveaux 01 avec un fichier de longueur variable et un nombre limité de longueurs différentes, ça peut être faisable sauf que j'ai plus de 20 de programmes à modifier, c'est une tâche assez lourde en temps.

    Je préfére commencer par tester la 2ème solution que vous me suggérer :

    Un fichier complètement variable (de 1 à n caractères) avec une clause OCCURS DEPENDING ON dans la description de l'enregistrement. Pourriez vous m'envoyer la syntaxe exacte pour la déclaration du fichier et de l'enregistrement ?? merci d'avance

    Les programmes à modifier sont en chaîne dans l'application, je ne sais pas si, aprés modification, l'intégration en entrée de chaque programme sera réussie.

    Mais comme la modification selon la solution (fichier complètement variable (de 1 à n caractères) avec une clause OCCURS DEPENDING ON dans la description de l'enregistrement) n'est pas fastidueuse en mise en oeuvre, j'aimerai bien tester cette méthode, quitte à faire un back-up avant au cas où il y aura des bugs dans l'intégration par les autres programmes

    Merci de m'envoyer la syntaxe exacte et me tenir au courant de vos remarques

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut Backup ? Assurément, oui !
    Un backup est toujours préférable et même inévitable lorsqu'on envisage une manip' de ce genre.

    Sauf erreur de ma part et si mémoire ne me joue pas un tour, rendre les enreg. de longueur fixe en variable ne consiste pas juste à mettre un niveau 01 et la clause occurs depending on, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    01 ENREG.
        05 DATA PIC X OCCURS 1 TO NNN DEPENDING ON CTR.
    Du moins, ça ne suffit pas. Il faut compter le nombre de caractères exacts que contient l'enregistrement et placer ce nombre dans un compteur (appelé compteur IOCS je crois) placé au début de l'enregistrement. Je crois même me souvenir que la longueur du compteur lui-même doit être prise en compte dans ce calcul mais je peux me tromper.

    Quant à lire le cas échéant ces fichiers sur un autre matériel que le Mainframe, ça promet d'être aussi une autre paire de manches.

    Tout ça pour dire de faire attention à ne pas sous-estimer la charge de travail qui semble légère a priori car elle ne fait AMHA que sembler !

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

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Par défaut
    Pour vous aider :
    Variable-Length Records

    Citation Envoyé par Mercure
    ... Il faut compter le nombre de caractères exacts que contient l'enregistrement et placer ce nombre dans un compteur (appelé compteur IOCS je crois) placé au début de l'enregistrement. Je crois même me souvenir que la longueur du compteur lui-même doit être prise en compte dans ce calcul mais je peux me tromper.
    C'est la variable qui suit le DEPENDING ON qui va donner la longueur réelle de l'enregistrement et il me semble bien que c'est la longueur des données sans le compteur de longueur lui-même.
    Le compilateur ajoutera les 4 octets nécessaires.
    Par contre au niveau de la carte DD du JCL (le paramètre LRECL) c'est bien la longueur totale qu'il faut indiquer ...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/05/2014, 09h44
  2. [DOS]Taille d'un fichier dans une variable
    Par liquideshark dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 04/08/2012, 00h58
  3. Réponses: 8
    Dernier message: 06/03/2012, 15h02
  4. Lire des lignes à taille variable à partir d'un fichier
    Par deep_blue dans le forum Langage
    Réponses: 1
    Dernier message: 13/04/2011, 22h30
  5. Réponses: 12
    Dernier message: 03/03/2009, 17h43

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