2014-01-31 3 views
0

성명 : 이전 파일이 원격 서버 위치에서 메인 프레임으로 반입되었습니다. 그런 다음 파일의 내용을 메인 프레임에서 순차 파일로 가져 와서 저장했습니다. 그러나 때때로 일부 파일 이름에 공백이 포함됩니다. 이 작업으로 인해 콘텐츠를 가져 오는 동안 오류가 발생합니다.파일에 DFSORT를 사용하여 기호 값 전달

이제이 문제를 해결하기 위해 서버에서 모든 파일을 가져 와서 양호한 파일 과 잘못된 파일을 분리했습니다. 이제 좋은 파일 내용 만 가져옵니다.

문제점 : 파일의 이름을 바꾸는 동안 접두어 Process_ 및 Odate (Control M에서 가져온 파일)를 파일 이름에 추가합니다. 하지만 이전에는 유닉스 코드를 통해 아래의 jcl에서 수행되었습니다.

의사 코드 : 인쇄 $ 1 "" "Process_"%% DAT를 "이름 바꾸기" "_"$ 1

우리는 소프트웨어 제어-M에서오다를 가져 오는 있습니다.

JCL 코드 :

//JOBNAME JOB (DEE),'Job Desc',CLASS=P,MSGCLASS=J, 
//  MSGLEVEL=(1,1),COND=(0,NE)       
//* %%SET %%DAT = %%$ODATE 
//STEP01 EXEC PROC1 

PROC1 코드 :

//STEP02 EXEC PGM=SORT                
//SORTIN DD DSN=DS.FILE1,   
//    DISP=SHR      
//SORTOUT DD DSN=DS.FILE2,  
//    UNIT=SYSSF,         
//    DCB=(RECFM=FB,LRECL=80,BLKSIZE=0),    
//    SPACE=(27920,(29,6),RLSE),  
//    DISP=(NEW,CATLG,DELETE)      
//SYSIN DD DSN=DS.PARM(PARM03),DISP=SHR  

PARM03 포함 : 여기 내가 파일 이름을 유닉스 코드를 만드는 오전 :

SORT FIELDS=COPY            
OUTFIL BUILD=(1:C'print "get " r_fi',18:SEQNUM, -    
    3,ZD,22:C'" //DD:upload"',/,1:C'print "rename " r_fi', - 
     21:SEQNUM,3,ZD,24:C' ', -       
25:C' " " "Process_" %%DAT "_" r_fi',53:SEQNUM,3,ZD,80:X)  
/*               

유닉스 코드를하는 I 동적으로 생성 중임 : 여기 파일 수에 따라 p_fi01, p_fi02, p_fi03 .....이 생성됩니다. 유닉스 코드를 데이터 세트에 저장하고이를 instream으로 전달하여 실행합니다.

문제는 DAT 변수에서 값을 가져올 수 없다는 것입니다. 거기에 어떤 방법이 있습니까, 나는 proc에 jcl에서 D의 값을 전달하고 그것을 추가 할 수
proc에서 정렬 카드를 사용하여 "Process_".

예 데이터 : 파일 File1.csv 내용이 가져온 다음 코드의 나머지는 OK라고 가정 Process_20140101_File1.csv

+1

JCL을 볼 수 있습니까? – SaggingRufus

+0

@BillWoodger 여기에 다른 COBOL 프로그래머를 만나서 너무 흥분했습니다. – SaggingRufus

+0

@BillWoodger : 여기 DFSORT를 사용했습니다. 일부 예제 데이터도 제공했습니다. – deepaklearner

답변

1

로 이름이 변경되어, 그것은 특별한 JPN를 사용하여, DFSORT와 매우 간단하다 제어 카드에 최대 10 개의 매개 변수 값을 사용할 수있는 DFSORT 기호. 여기

은 예입니다

// SET INPARM='ABC' 
//* 
//STEP0100 EXEC PGM=SORT,PARM='JP0"&INPARM"' 
//SYSOUT DD SYSOUT=* 
//SYMNOUT DD SYSOUT=* 
//SORTOUT DD SYSOUT=* 
//SYSIN DD * 
    OPTION COPY 
    INREC BUILD=(JP0) 
//SORTIN DD * 
IRRELEVANT DATA, JUST AN EXAMPLE 

나는 JCL 기호를 만들 SET를 사용했다,하지만 당신은 너무 당신의 CONTROL-M 기호가 PARM에 & INPARM를 교체 CONTROL-M에서 이미 당신이 .

JPn은 JP0-JP9를 의미합니다. 그것은 당신에게 기호의 번역 된 값을 표시하므로, 매우, 매우 유용

//STEP0100 EXEC PGM=SORT,PARM='JP0"&INPARM1",JP1"&INPARM2",JP2"&INPARM3"' 

SYMNOUNT DD는 선택 사항이지만 : 데이터의 세 가지 별도의 조각과 같이 할 수있다.PARM='JP0"[yourControl-M-symbol]"'

가 그 SyncSort가가, JPN이없는 것입니다

있도록

25:C' " " "Process_"',JP0,C'"_" r_fi',53:SEQNUM,3,ZD,80:X) 

그리고 EXEC 카드의 PARM을 포함한다 : 코드의 나머지 부분이 올바른지 가정

,이 변화를 만들 것 DFSORT를 가지고 계셔서 다행입니다. SyncSort에는 다른 기술이 필요합니다.

+0

고마워. 나는 노력하고있어. 윌 당신이 알려주지, 작동 여부. :-) – deepaklearner

+0

그것의 작동. :) – deepaklearner

+0

@ Raushan 당신은이 답변을 받아들이면 다른 사람들이 그것이 다음과 같이 보이도록 고려할 수 있습니다. 1) 찾고 있던 것; 2) 당신의 문제를 정확하게 sloved; 3) 가장 좋은 답변이 게시되어 있는지 (이것은 유일한 대답 일 수 있지만 다른 사람들이 체크 표시를하기를 희망하여 후속 답변을 게시하는 경우는 드뭅니다) – NealB