2010-06-10 24 views
1

J'ai un fichier ayant un certain nombre d'enregistrements et je veux copier seulement les 10 premiers et 10 derniers enregistrements dans un autre fichier.Lire des enregistrements d'un fichier

Quelqu'un peut-il dire comment écrire JCL, utilisant le tri, icetool, etc.

Répondre

1

Vous pouvez utiliser ICETOOL pour copier un sous-ensemble de votre fichier d'entrée.

Voici le JCL pour copier le premier et le dernier 10 enregistrements dans un autre fichier. Je suppose des enregistrements de longueur fixe de 80 octets chacun.

Vous devrez également modifier la carte JOB pour l'adapter aux exigences de votre magasin mainframe.

//EXAMP JOB A400,PROGRAMMER 
//STEP1 EXEC PGM=ICETOOL 
//SYSOUT DD SYSOUT=* 
//SORTIN DD DSN=INPUT,DISP=SHR 
//T1  DD DSN=&&T1,DISP=(,PASS),UNIT=VIO 
//T2  DD DSN=&&T2,DISP=(,PASS),UNIT=VIO 
//T3  DD DSN=&&T3,DISP=(,PASS),UNIT=VIO 
//SORTOUT DD DSN=OUTPUT,DISP=(NEW,CATLG),UNIT=SYSDA, 
//   SPACE=(CYL,(5,1)) 
//SYSIN DD * 
    COPY FROM(IN) USING(CTL1)          
    COPY FROM(T1) USING(CTL2)          
    COPY FROM(T1) USING(CTL3) 
    COPY FROM(T2,T3) USING(CTL4) 
/* 
//CTL1CNTL DD * 
    OUTFIL FNAMES=T1,OUTREC=(1,80,SEQNUM,8,ZD) 
/* 
//CTL2CNTL DD * 
    OUTFIL FNAMES=T2,ENDREC=10 
/* 
//CTL3CNTL DD * 
    SORT FIELDS=(81,8,BI,D)          
    OUTFIL FNAMES=T3,ENDREC=10 
/* 
//CTL4CNTL DD * 
    SORT FIELDS=(81,8,BI,A)          
    OUTFIL FNAMES=SORTOUT,OUTREC=(1,80) 
// 

La première série de cartes de contrôle (CTL1CNTL) ajoute un numéro de séquence pour les enregistrements d'entrée.

Le deuxième jeu de cartes de contrôle (CTL2CNTL) obtient les 10 premiers enregistrements d'entrée.

Le troisième jeu de cartes de contrôle (CTL3CNTL) trie les enregistrements d'entrée dans l'ordre inverse et obtient les 10 premiers enregistrements (ce qui serait les 10 derniers). Le quatrième jeu de cartes de contrôle (CTL4CNTL) trie les enregistrements extraits dans le bon ordre et supprime les numéros de séquence ajoutés par le premier jeu de cartes de contrôle.

Voici IBM DFSORT Application Programming Guide pour plus d'informations.

+1

Vous devriez ajouter un peu plus d'explications ici. Vous supposez que les enregistrements d'entrée ont chacun 80 octets. Vous ajoutez un numéro de séquence au fichier donnant T1. Prenez les 10 premiers enregistrements de T1 donnant T2. Trier T1 dans l'ordre inverse en utilisant votre numéro de séquence. Prenez le premier (dernier) 10 enregistrements de T1 donnant T3. Fusionner T2 et T3, trier et supprimer les numéros de séquence donnant OUTPUT. Le résultat net est le premier et le dernier 10 enregistrements de l'entrée d'origine sont maintenant dans OUTPUT. Sans ce genre d'explication, il peut être difficile pour un débutant de comprendre ce que vous faites. Solution soignée cependant! – NealB

+0

@NealB: Merci. J'ai ajouté les explications. J'avais en fait l'hypothèse que les enregistrements d'entrée étaient de 80 octets, mais l'enlevé avant que j'ai soumis la réponse. –

0

Depuis juillet 2008, ICETOOL dispose de SUBSET.

//STEP1 EXEC PGM=ICETOOL 
//SYSOUT DD SYSOUT=* 
//IN  DD DSN=your input 
//OUT  DD DSN=your output 
//SYSIN DD * 
    SUBSET FROM(IN) TO(OUT) KEEP INPUT FIRST(10) LAST(10) 

Pour savoir si vous disposez de juillet 2008, consultez le message ICE201I à n'importe quelle étape de tri.

ICE201I F RECORD TYPE ... 

La lettre immédiatement après le numéro de message est F ou supérieure, alors vous avez inclus Juillet 2008.