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

z/OS Discussion :

Fichier VSAM en txt, csv


Sujet :

z/OS

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Points : 44
    Points
    44
    Par défaut Fichier VSAM en txt, csv
    Bonjour à tous,

    J'aimerai savoir s'il existe un moyen simple de convertir un fichier VSAM (avec les champs EBCDIC...) en un fichier txt ou csv qu'on puisse lire et exploiter.

    On m'a parlé de faire un transfert ftp sur une autre machine et spécifiant un encodage en ASCII.

    Mais est-une bonne piste? comment je peux faire ca exactement?
    et est-ce que cela garanti la qualité des données et surtout est-ce qu'un tel encodoge permet de "decompresser" les formats type COM-3..

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Un petit programme en COBOL (ou autre) ? Ça n'est quand même pas le bout du monde...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    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

    La question aurait du être posée dans la partie Z/os du forum, mais bon.

    FTP ne peut pas travailler avec des fichiers VSAM.

    Pour ton cas, tu devras:
    1. mettre tes données à plat par programme (sort, cobol ...). Toutes les données devront être au format étendu (pas de comp-3 ou autre)
    2. transférer le fichier à plat (via FTP ou autre)

    Faire très attention aux options de transfert si le fichier à plat contient des signes en ascii étendu (lettres accentuées, signe euro €, etc ...).

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Points : 44
    Points
    44
    Par défaut
    Merci Bernard

    aurais-tu un exemple de comment on doit un programme COBOL qui convertirai un VSAM en txt?

  5. #5
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir jam92400,

    Dans une optique COBOL :

    Votre fichier est-il un KSDS, un ESDS, un RRDS ?
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Points : 44
    Points
    44
    Par défaut
    J'en ai aucune idée
    c'est important?

  7. #7
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir,

    Ça n’est pas fondamental, mais il y a quelques différences dans la partie ENVIRONMENT DIVISION. Je suppose que vous lisez le fichier séquentiellement, sinon pour un KSDS ça peut se compliquer.

    La clause SELECT du paragraphe FILE-CONTROL diffère selon que le fichier à lire est un ESDS ou un KSDS (je ne parle pas des RRDS).

    Exemple d’un fichier ESDS (ce qui est facultatif est entre crochets) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FILE-CONTROL.
        SELECT mon_fichier  ASSIGN TO ...
                            [ORGANIZATION SEQUENTIAL] 
                            [PASSWORD ...]
                            [FILE STATUS ...]
    Exemple d’un fichier KSDS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FILE-CONTROL.
        SELECT mon_fichier  ASSIGN TO ...
                            ORGANIZATION INDEXED 
                            RECORD-KEY ...
                            [PASSWORD ...]
                            [FILE STATUS ...]
    Pour le reste, il ne devrait pas y avoir de différence si vous lisez le fichier séquentiellement :
    OPEN INPUT mon_fichier

    READ mon_fichier [NEXT] RECORD [INTO ...] [AT END ...]

    CLOSE mon_fichier
    Par ailleurs, si le fichier est un KSDS vous pouvez utiliser l’instruction START pour commencer la lecture ailleurs qu’en début de fichier.

    Ci-joint les références des PDF COBOL, notamment le Language Reference et le Programming Guide :

    http://www-01.ibm.com/software/awdto...os390/library/

    Si vous préférez utiliser DFSORT, je vous renvoie à l’Application Programming Guide :

    http://www-03.ibm.com/systems/z/os/zos/bkserv/r11pdf/
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  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 fsmrel Voir le message
    ... Exemple d’un fichier ESDS ...
    Je crois que "assignement name" (ce qui suit le mot clé ASSIGN) a une particularité pour un fichier VSAM ESDS et ceci pour pouvoir le distinguer d'un fichier QSAM "classique".

    cf :
    ASSIGN clause

  9. #9
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par Luc Orient Voir le message
    Je crois que "assignement name" (ce qui suit le mot clé ASSIGN) a une particularité pour un fichier VSAM ESDS et ceci pour pouvoir le distinguer d'un fichier QSAM "classique".
    Bien vu, Oeil de Lynx. Effectivement, la constante "AS-" doit précéder le nom du fichier dans le cas d'un ESDS.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  10. #10
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    J'aimerai savoir s'il existe un moyen simple de convertir un fichier VSAM (avec les champs EBCDIC...) en un fichier txt ou csv qu'on puisse lire et exploiter.
    ....
    Un petit programme en COBOL (ou autre) ? Ça n'est quand même pas le bout du monde...
    Certes, mais il a quand même des utilitaires en z/OS pour convertir un fichier VSAM : REPRO IDCAMS en particulier pour le vider sur un QSAM et SORT ou ICETOOL pour remettre en forme l'enregistrement suffisent largement.

    Pour ton cas, tu devras:
    mettre tes données à plat par programme (sort, cobol ...). Toutes les données devront être au format étendu (pas de comp-3 ou autre)
    transférer le fichier à plat (via FTP ou autre)
    +1. Si tu as des données binaires ou packées, tu devras les reformater. Si comme c'est probable, le VSAM est géré en COBOL (nb. Pas mieux pour traiter un VSAM, en référance à la dernière discution sur l'opportunité de COBOL),
    Il y a certainement une COPY COBOL qui décrit le fichier qu'il te faut obtenir pour formater tes données en étendu. Pour ça SORT ou ICETOOL font l'affaire et il y a assez de spécialistes sur ce forum pour t'aider au besoin.
    D'autant que quand on a ce genre de demande d'externalisation de fichier, on peut éventuellement s'attendre à ce que d'autres suivent, il est donc préférable de s'habituer aux utilitaires standards

    Votre fichier est-il un KSDS, un ESDS, un RRDS ?
    ....
    J'en ai aucune idée
    c'est important?
    Quand même oui, il y a des informations utiles dans la définition d'un fichier VSAM. KSDS et ESDS c'est du variable, il faudra donc en tenir compte pour les décharger par REPRO sur un fichier QSAM.
    RRDS devient fort rare, mais c'est du fixe
    Si c'est un KSDS, savoir où se trouve la clé, la longueur maxi d'un enregistrement et connaître le nombre d'enregistrements est utile.
    C'est un LISTCAT qui donne ça. Exemple par JCL (mais on peut aussi bien le passer sous TSO :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //STEPLC   EXEC PGM=IDCAMS            
    //SYSPRINT DD  SYSOUT=*               
    //SYSIN    DD  *                      
      LISTCAT ENT(MON.FICHIER.VSAM) ALL
    On obtient quelque chose comme ça :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    ....
    DATA ------- MON.FICHIER.VSAM.DATA                                     
      IN-CAT --- USERCAT.DEMO                                               
      HISTORY                                                               
        DATASET-OWNER-----(NULL)     CREATION--------2009.267               
        RELEASE----------------2     EXPIRATION------0000.000               
        ACCOUNT-INFO-----------------------------------(NULL)               
      PROTECTION-PSWD-----(NULL)     RACF----------------(NO)               
      ASSOCIATIONS                                                          
        CLUSTER--MON.FICHIER.VSAM                                          
      ATTRIBUTES                                                            
        KEYLEN----------------51     AVGLRECL-------------220     BUFSPACE--
        RKP--------------------3     MAXLRECL-------------220     EXCPEXIT--
        SHROPTNS(2,3)   RECOVERY     UNIQUE           NOERASE     INDEXED   
        UNORDERED        NOREUSE     NONSPANNED                             
      STATISTICS                                                            
        REC-TOTAL-----------8849     SPLITS-CI--------------0     EXCPS-----
        REC-DELETED------------0     SPLITS-CA--------------0     EXTENTS---
        REC-INSERTED-----------1     FREESPACE-%CI---------10     SYSTEM-TIM
        REC-UPDATED------------0     FREESPACE-%CA---------10          X'C4D
        REC-RETRIEVED----------0     FREESPC-----------684032               
     ALLOCATION                                                             
       SPACE-TYPE------CYLINDER     HI-A-RBA---------2949120                
       SPACE-PRI--------------1     HI-U-RBA---------2949120                
       SPACE-SEC--------------1                                             
     VOLUME                                                                 
       VOLSER------------VOL123     PHYREC-SIZE---------4096     HI-A-RBA---
       DEVTYPE------X'3010200F'     PHYRECS/TRK-----------12     HI-U-RBA---
       VOLFLAG------------PRIME     TRACKS/CA-------------15                
       EXTENTS:                                                             
       LOW-CCHH-----X'001C0000'     LOW-RBA----------------0     TRACKS-----
       HIGH-CCHH----X'001C000E'     HIGH-RBA----------737279                
       LOW-CCHH-----X'00230000'     LOW-RBA-----------737280     TRACKS-----
       HIGH-CCHH----X'0023000E'     HIGH-RBA---------1474559                
       LOW-CCHH-----X'00360000'     LOW-RBA----------1474560     TRACKS-----
       HIGH-CCHH----X'0036000E'     HIGH-RBA---------2211839                
       LOW-CCHH-----X'00370000'     LOW-RBA----------2211840     TRACKS-----
       HIGH-CCHH----X'0037000E'     HIGH-RBA---------2949119                
    ....
    Pour cet exemple :
    - INDEXED : C'est un KSDS. Il contient 8849 enregistrements pour juste une insertion. Donc le Freespace n'est pratiquement pas utilisé, donc un QSAM au 3/4 de la taille de la composante DATA du VSAM suffira. (On A 4 Extent d'un Cylindre allouées, le QSAM sorti du REPRO ne prendra pas plus de 45 pistes)

    - MAXLRECL 220 : c'est la taille maxi d'un enregistrement
    - AVGLRECL 220 : c'est la taille MOYENNE, Il peut très bien contenir des enregistrements de taille inférieure. D'autant que l'on met souvent un enregistrement 'amorce' de LRECL 80 dans un nouveau KSDS crée (pas d'insertion possible par programme si le fichier est vide)
    - KEYLEN, RKP : la clé fait 51 caractères, sa position relative à 0 sur l'enregistrement est 3. Elle est donc en colonne 4.

    Tu peux tenter un REPRO sur un FB de LRECL 220 pour ce cas (BLKSIZE 0) mais tu aura des erreurs pour tous les enregistrements de taille inférieure.
    Si c'est juste l'enregistrement amorce, le REPRO le laissera tomber
    Sinon, tu crée un VB avec un LRECL au moins égal au MAXLRECL + 4

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //STEPIDR2 EXEC PGM=IDCAMS                    
    //SYSPRINT DD  SYSOUT=*                                                 
    //IN1      DD  DISP=SHR,DSN=MON.FICHIER.VSAM                            
    //OUT1     DD DISP=(NEW,CATLG),DSN=MON.FICHIER.VSAM.QSAMFB,             
    //           SPACE=(TRK,(45,15)),UNIT=3390,                             
    //           DCB=(BLKSIZE=0,LRECL=224,RECFM=VB)                         
    //*          DCB=(BLKSIZE=0,LRECL=32756,RECFM=VB)  /* CAS PASSE PARTOUT 
    //SYSIN    DD  *                                                        
      REPRO IFILE(IN1) OFILE(OUT1)                                          
    //*
    Un SORT dans ce genre te permettra de tout repasser en FB sur la taille maxi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //STEPSFB  EXEC PGM=SORT                                         
    //SYSOUT   DD  SYSOUT=*                                          
    //SYSPRINT DD  SYSOUT=*                                          
    //SORTIN   DD  DISP=SHR,DSN=MON.FICHIER.VSAM.QSAMVB              
    //SORTOUT  DD  DISP=(NEW,CATLG),DSN=MON.FICHIER.VSAM.QSAMFB,     
    //           SPACE=(TRK,(15,15)),UNIT=3390,                      
    //           DCB=(BLKSIZE=0,LRECL=220,RECFM=FB)                  
    //SYSIN    DD  *                                                 
     SORT FIELDS=COPY                                                
     OUTFIL FNAMES=SORTOUT,VTOF,OUTREC=(5,220),VLFILL=C' '           
    //*

    A partir de là tu as un QSAM FB simple que tu pourras reformater ou trier comme tu veux avant de fait le transfert.

Discussions similaires

  1. Formatage fichier de sortie txt /csv via isql / analyseur
    Par jayan dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/01/2008, 15h15
  2. Pb import et reformatage de fichier txt(csv)
    Par dguff dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/11/2007, 21h55
  3. Débutant, Comment traiter un fichier txt (csv)?
    Par djodjo2050 dans le forum VB.NET
    Réponses: 2
    Dernier message: 26/10/2007, 17h41
  4. [CSV] Traitement fichiers txt/csv avec php
    Par cirtey dans le forum Langage
    Réponses: 4
    Dernier message: 26/01/2007, 16h46
  5. Réponses: 12
    Dernier message: 27/06/2005, 19h06

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