0

入力でも可変長データに対して以下のコードが機能するようにします。そのため、最後に二重引用符を追加できます。COBOL を使用したくありません。出来ますか?

  1. ZZZZ.VVVV.FILE.CORR1 には次のレコードが含まれています:-

    ABCDEFG_AAAAAA_BBB0001.csv  
    ABCDEFG_AAAAAA_BBB0002.csv  
    ABCDEFG_AAAAAA_BBB0003.csv 
    
  2. 次のコードによるファイル ZZZZ.VVVV.FILE.CORR2 の出力レコードは次のとおりです。

    r_file1="ABCDEFG_AAAAAA_BBB0001.csv"  
    r_file2="ABCDEFG_AAAAAA_BBB0002.csv"  
    r_file3="ABCDEFG_AAAAAA_BBB0003.csv" 
    

JCL コードは次のとおりです。

//STEPSRT5 EXEC PGM=SORT                                              
//SYSOUT   DD  SYSOUT=*                                               
//SORTIN   DD  DSN=ZZZZ.VVVV.FILE.CORR1,       <ID>
//             DISP=SHR                                               
//SORTOUT  DD  DSN=ZZZZ.VVVV.FILE.CORR2,      <OD>
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=0),                     
//             SPACE=(27920,(29,6),RLSE),                             
//             DISP=(NEW,CATLG,DELETE)                                
//SYSIN    DD  *                                                      
 SORT FIELDS=COPY                                                     
 OUTREC FIELDS=(1:C'r_file',7:SEQNUM,1,ZD,8:C'="',10:1,26,36:C'"',44X)
/*
4

2 に答える 2

2
 SORT FIELDS=COPY                                                     
 INREC BUILD=(C'r_file',SEQNUM,1,ZD,C'="',5,44,80:X)
 OUTREC FINDREP=(STARTPOS=14,IN=C' ',OUT=C'"',DO=1)

ちなみに、これは JCL ではなく、SORT コントロール カードです。すべての詳細は、サイトの SORT 製品のマニュアルに記載されています。

INREC/OUTREC/OUTFIL には、BUILD、OVERLAY、IFTHEN のうち 1 つだけ、または 1 つ以上の IFTHEN を含めることができます。2 つの関数を無条件に使用する場合は、上記のようにするか、IFTHEN の関数使用部分で 2 つの IFTHEN=(WHEN=NONE を使用します。

あなたの記録は可変ではありません。それらは固定長 (または既存のコードが機能しない) で、おそらく 80 バイトです (80 でない場合は、80:X を適切に変更してください)。

入力レコードが 10 を超えると、シーケンス番号が重複することに注意してください (10 番目は r_file0 になります)。

データに空白が埋め込まれていないため、SQZ (スクイーズ) を確認することもできます。

于 2013-10-15T06:47:23.007 に答える
1

次のことを試してください。

//STEP01   EXEC PGM=SORT
//SYSOUT   DD  SYSOUT=*
//SORTOUT  DD  SYSOUT=*
//SYSIN    DD  *
 SORT FIELDS=COPY
 INREC BUILD=(C'r_file',SEQNUM,3,CSF,C'="',1,68,C'"')
 OUTREC BUILD=(1,80,SQZ=(SHIFT=LEFT))
/*
//SORTIN   DD  *
ABCDEFG_AAAAAA_BBB0001.csv
ABCDEFG_AAAAAA_BBB0002.csv
ABCDEFG_AAAAAA_BBB0003.csv
ABCDEFG_AAAAAA_0702.csv
ABCDEFG_AAAAAA_AAAYZ0702.csv
ABCDEFG_AAAAAA_BBB.csv
ABCDEFG_AAAAAA_XXXXXXXAMY0702.csv
ABCDEFG_AAAAAA_YZ0702.csv
ABCDEFG_AAAAAA_C0702.csv
ABCDEFG_AAAAAA_0702.csv
ABCDEFG_AAAAAA_702.csv
ABCDEFG_AAAAAA_02.csv
ABCDEFG_AAAAAA_2.csv
/*
//SORTMSG DD SYSOUT=*
//

SORTOUT には以下が含まれます。

r_file1="ABCDEFG_AAAAAA_BBB0001.csv"
r_file2="ABCDEFG_AAAAAA_BBB0002.csv"
r_file3="ABCDEFG_AAAAAA_BBB0003.csv"
r_file4="ABCDEFG_AAAAAA_0702.csv"
r_file5="ABCDEFG_AAAAAA_AAAYZ0702.csv"
r_file6="ABCDEFG_AAAAAA_BBB.csv"
r_file7="ABCDEFG_AAAAAA_XXXXXXXAMY0702.csv"
r_file8="ABCDEFG_AAAAAA_YZ0702.csv"
r_file9="ABCDEFG_AAAAAA_C0702.csv"
r_file10="ABCDEFG_AAAAAA_0702.csv"
r_file11="ABCDEFG_AAAAAA_702.csv"
r_file12="ABCDEFG_AAAAAA_02.csv"
r_file13="ABCDEFG_AAAAAA_2.csv"

INREC次のようなレコードを作成します。

    r_file 10="ABCDEFG_AAAAAA_0702.csv                                       "

トリックは、先頭のスペースで作成されるようにシーケンス番号に使用することです。そうすれば、必要なように先頭のゼロをCFS削除しようとして混乱することはありません。組み込みおよび末尾を含むすべてのゼロを取り除きます)ZDSQZPREBLANK=C'0'

次にOUTREC、レコードからスペースを絞り出し、必要に応じてファイル名を表示します。

注:このソリューションでは、ファイル名に埋め込みスペースが含まれていないことを前提としています。もしそうなら、やるべきことはもっとあります。

于 2013-10-16T19:45:02.723 に答える