Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > z/OS
z/OS Forum d'entraide sur z/OS et MVS (Multiple Virtual Storage), les systèmes d'exploitation des ordinateurs « mainframes » IBM : JCL, Tso, Ispf, Vsam, Racf, SMS, Cics, Ims, OPC, Ca-7, Control-M, Dialog Manager ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 17/09/2009, 17h23   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2005
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 117
Points : 14
Points : 14
Envoyer un message via MSN à jam92400
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
jam92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2009, 18h27   #2
Expert Confirmé Sénior

 
Avatar de fsmrel
 
Spécialiste en bases de données
Inscription : septembre 2006
Messages : 2 835
Détails du profil
Informations professionnelles :
Activité : Spécialiste en bases de données
Secteur : Conseil

Informations forums :
Inscription : septembre 2006
Messages : 2 835
Points : 4 863
Points : 4 863
Un petit programme en COBOL (ou autre) ? Ça n'est quand même pas le bout du monde...
__________________
_
Faites simple, mais pas plus simple ! (A. Einstein)
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 (Bonne lecture !)
fsmrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2009, 11h37   #3
Membre chevronné
 
Avatar de bernard59139
 
Administrateur de base de données
Inscription : octobre 2006
Messages : 477
Détails du profil
Informations personnelles :
Localisation : France

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

Informations forums :
Inscription : octobre 2006
Messages : 477
Points : 657
Points : 657
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 ...).
bernard59139 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2009, 17h23   #4
Candidat au titre de Membre du Club
 
Inscription : décembre 2005
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 117
Points : 14
Points : 14
Envoyer un message via MSN à jam92400
Merci Bernard

aurais-tu un exemple de comment on doit un programme COBOL qui convertirai un VSAM en txt?
jam92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2009, 20h40   #5
Expert Confirmé Sénior

 
Avatar de fsmrel
 
Spécialiste en bases de données
Inscription : septembre 2006
Messages : 2 835
Détails du profil
Informations professionnelles :
Activité : Spécialiste en bases de données
Secteur : Conseil

Informations forums :
Inscription : septembre 2006
Messages : 2 835
Points : 4 863
Points : 4 863
Bonsoir jam92400,

Dans une optique COBOL :

Votre fichier est-il un KSDS, un ESDS, un RRDS ?
__________________
_
Faites simple, mais pas plus simple ! (A. Einstein)
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 (Bonne lecture !)
fsmrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2009, 17h12   #6
Candidat au titre de Membre du Club
 
Inscription : décembre 2005
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 117
Points : 14
Points : 14
Envoyer un message via MSN à jam92400
J'en ai aucune idée
c'est important?
jam92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2009, 19h50   #7
Expert Confirmé Sénior

 
Avatar de fsmrel
 
Spécialiste en bases de données
Inscription : septembre 2006
Messages : 2 835
Détails du profil
Informations professionnelles :
Activité : Spécialiste en bases de données
Secteur : Conseil

Informations forums :
Inscription : septembre 2006
Messages : 2 835
Points : 4 863
Points : 4 863
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 :
1
2
3
4
5
FILE-CONTROL.
    SELECT mon_fichier  ASSIGN TO ...
                        [ORGANIZATION SEQUENTIAL] 
                        [PASSWORD ...]
                        [FILE STATUS ...]
Exemple d’un fichier KSDS :

Code :
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/
__________________
_
Faites simple, mais pas plus simple ! (A. Einstein)
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 (Bonne lecture !)
fsmrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2009, 23h21   #8
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 071
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 071
Points : 1 659
Points : 1 659
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
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2009, 03h28   #9
Expert Confirmé Sénior

 
Avatar de fsmrel
 
Spécialiste en bases de données
Inscription : septembre 2006
Messages : 2 835
Détails du profil
Informations professionnelles :
Activité : Spécialiste en bases de données
Secteur : Conseil

Informations forums :
Inscription : septembre 2006
Messages : 2 835
Points : 4 863
Points : 4 863
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.
__________________
_
Faites simple, mais pas plus simple ! (A. Einstein)
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 (Bonne lecture !)
fsmrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2009, 13h15   #10
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 518
Points : 518
Citation:
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.

Citation:
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

Citation:
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 :
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 :
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 :
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 :
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.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 07h50.


 
 
 
 
Partenaires

Hébergement Web