Skip to content

Instantly share code, notes, and snippets.

@kunst1080
Last active December 18, 2015 21:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kunst1080/5845011 to your computer and use it in GitHub Desktop.
Save kunst1080/5845011 to your computer and use it in GitHub Desktop.
固定長レコード形式行順ファイルでもAWKがしたい! (ref http://www.slideshare.net/kunst1080/awk-23363479) で使用したコード。
cat TESTCPY.cbl | cut -b8- | tr -d "\n" | tr "." "\n" | sed 's/^ *//g' | sed 's/(0*/(/g' | sed 's/[()]/ /g' \
|nawk '$3=="PIC" ? ($4=="N" ? $5=$5*2:1) :1' \
|sed 's/ *PIC *[9XN] */ PIC A/g' \
|nawk '$3=="PIC" ? ($6=="COMP-3" ? $4="S9COMP3":1):1' | sed 's/S9COMP3 */H/g' | sed 's/ *COMP-3 *//g' \
|sed 's/ *PIC */ /g' | cut -d " " -f1,3- \
|nawk '{if($2=="OCCURS"){for(i=0;i<$3-1;i++){$(10+i)=$4;$2="";$3=""}}; $1="";print $0}' \
|tr -d " " | tr -d "\n" | xargs -I% perl -nle "@o=unpack(%, \$_);print join(',',@o)" cobolfile.txt
000200 03 FILEID PIC 9(02).
000300 03 NAME PIC X(10).
000400 03 PRICE PIC S9(11) COMP-3.
000500 03 TAGS.
000600 10 YYYY PIC 9(04).
000700 10 MM PIC 9(02).
000800 10 DD PIC 9(02).
001000 03 YOBI PIC X(24).
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OUT01 ASSIGN TO "cobolfile.txt"
ORGANIZATION IS SEQUENTIAL.
*
DATA DIVISION.
FILE SECTION.
FD OUT01
LABEL RECORD STANDARD
DATA RECORD OUT01-R.
01 OUT01-REC PIC X(51).
*
WORKING-STORAGE SECTION.
01 OUT01-INIT PIC X(51).
01 OUT01-R.
COPY TESTCPY.
03 LF PIC X(01).
*
01 FILLER.
10 WK-PACK PIC 9(4) comp-3.
10 WK-STR PIC X(1).
*
PROCEDURE DIVISION.
MAIN-RTN.
PERFORM INITIAL-RTN.
PERFORM EDIT1-RTN.
WRITE OUT01-REC FROM OUT01-R.
PERFORM EDIT2-RTN.
WRITE OUT01-REC FROM OUT01-R.
PERFORM EDIT3-RTN.
WRITE OUT01-REC FROM OUT01-R.
PERFORM END-RTN.
MOVE 0 TO RETURN-CODE.
EXIT.
STOP RUN.
*
INITIAL-RTN SECTION.
OPEN OUTPUT OUT01.
* 固定長行順ファイルのフォーマット
INITIALIZE OUT01-R.
MOVE X'0A' TO LF OF OUT01-R.
MOVE OUT01-R TO OUT01-INIT.
EXIT.
*
END-RTN SECTION.
CLOSE OUT01.
EXIT.
*
EDIT1-RTN SECTION.
MOVE OUT01-INIT TO OUT01-R.
MOVE 1 TO FILEID.
MOVE 'HOGE' TO NAME.
MOVE 123456 TO PRICE.
MOVE '20130621' TO TAGS.
EXIT.
*
EDIT2-RTN SECTION.
MOVE OUT01-INIT TO OUT01-R.
MOVE 2 TO FILEID.
MOVE 'FUGA' TO NAME.
MOVE -123456 TO PRICE.
MOVE '20130622' TO TAGS.
*
EDIT3-RTN SECTION.
MOVE OUT01-INIT TO OUT01-R.
MOVE 3 TO FILEID.
MOVE 'FOO' TO NAME.
MOVE 123 TO PRICE.
MOVE '20130622' TO TAGS.
EXIT.
@kunst1080
Copy link
Author

S9 COMP-3のテンプレートはもしかしてHじゃないかも?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment