필자는 파일에 7 자리의 십진법 필드를 가지고 있습니다. 이 7 자리를 추출/분리하는 데이터 항목을 어떻게 정의 할 수 있습니까?팩 십진 필드에서 숫자 분할
예를 들어 한 데이터 항목의 처음 두 자리와 다른 자리의 다른 자리를 갖고 싶기 때문에 나중에 조작 할 수 있습니다.
필자는 파일에 7 자리의 십진법 필드를 가지고 있습니다. 이 7 자리를 추출/분리하는 데이터 항목을 어떻게 정의 할 수 있습니까?팩 십진 필드에서 숫자 분할
예를 들어 한 데이터 항목의 처음 두 자리와 다른 자리의 다른 자리를 갖고 싶기 때문에 나중에 조작 할 수 있습니다.
다른 언어에서는 흔히 볼 수있는 것 중 하나가 '적절한 배수'인 '10의 배수로 나누기'입니다.
그러나 COBOL을 고려하지 마십시오. "나누기"는 "비싸다". 그런 다음
05 input-packed-decimal
PACKED-DECIMAL PIC 9(7).
는 :
05 FILLER
REDEFINES input-packed-decimal.
10 ipd-split-two-and-five
PACKED-DECIMAL PIC 99V9(5).
01 two-digits PIC 99.
01 five-digits PIC 9(5).
01 FILLER
REDEFINES five-digits.
05 five-digits-as-decimals PIC V9(5).
MOVE ipd-split-two-and-five TO two-digits
five-digits-as-decimals
그런 다음 당신은 당신이 원하는에 대한
two-digits
및
five-digits
를 사용할 수 있습니다.
또 다른 방법 :
01 ws-input-seven PIC 9(7).
01 FILLER
REDEFINES ws-input-seven.
05 two-digits PIC 99.
05 five-digits PIC 9(5).
MOVE input-packed-decimal TO ws-input-seven
서명 된 소스 필드 작동합니다 첫 번째 방법은 (단지 그림의 각 절에서 적절한 위치에 S를 넣어).
소스 부호는 two-digits
필드로 전달되지 않으므로 MOVE는 해당 필드가 있음을 인식하지 못하기 때문에 부호있는 필드에서는 두 번째가 작동하지 않습니다.
PACKED-DECIMAL 또는 BINARY 필드를 다시 정의 할 때주의하십시오 (IBM 메인 프레임에서는 USAGE COMP-3 및 COMP/COMP-4/COMP-5도 사용할 수 있습니다). 동일하거나 유사한 USAGE를 정의 할 때 항상 동일한 자릿수를 정의하십시오. REDEFINES 필드의 경우 컴파일러는 사용자가 수행중인 작업을 항상 알고 있다고 가정하므로 "소스의 잘림"을 수행하지 않습니다. 따라서 REDEFINES에 종속 된 필드를 사용할 때 명시 적으로 또는 암시 적으로 원본 잘림을 예상하지 않아야합니다.
두 번째 자리를 얻으려면, 지금까지이 작업을 수행하지 않습니다 05 FILLER
REDEFINES input-packed-decimal.
10 ignore-one-use-2nd-next-five
PACKED-DECIMAL PIC 9V9(5).
두 번째 자리를 얻기 위해 사용 포장 된-DECIMAL은 PIC 99V9 (5) 이전하지만, 함께 필드를 수신 정의 한 자리 만 가능합니다. 컴파일러는 행복하게 다음 자르기를 수행하는 코드를 생성합니다.
"다시 정의를 사용할 수없는 경우"입력 필드와 동일한 특성으로 작업 저장 영역에 새 필드를 만들어서 사용해야합니다.
여기서 사용한 데이터 이름은이 일반적인 설명을위한 것입니다. 작업에 알기 쉬운 설명적인 이름을 사용하십시오. 처음 두 자릿수가 파트 유형이고 마지막 다섯 자릿수가 파트 번호 인 경우 이름 지정이 명확해야합니다.
"Var (n)"또는 이와 유사한 이름을 지정하지 마십시오. 오해의 소지가있는 이름을 지정하지 마십시오.
01 the-array.
03 filler pic x(02) value '00'.
03 filler pic x(02) value '01'.
03 filler pic x(02) value '02'.
등,
까지03 filler pic x(02) value 'FF'.
01 개의 어레이가 배열을 재정의.
03 harry occurs 256 pic x(02).
91 sub1.
03 filler pic x(01) value low-values.
93 sub1-byte2 pic x(01).
01 sub2는 sub1 comp를 재정의합니다.
01 pd pic x (04).
01 펍 그림 9 (04).
01 알.
03 eggs1 pic x(01).
03 eggs2 pic x(01).
는> 4
move pd(pub:1) to sub1-byte2
move harry(sub2 + 1) to eggs
display eggs1 egg2
최종 수행 바까지 1
1 내지
바
다양한 수행한다.값이 'FF'인 256 2 바이트 필드의 배열입니다.
단계는 포장 된 10 진수 필드를 보유하는 4 바이트 필드입니다.
각 바이트를 배열의 첨자로 사용합니다 (배열에서 첫 번째 필드의 '00'점을 확인하려면 1을 더하십시오).
2 바이트 필드는 패킹 된 10 진수 필드의 해당 바이트를 나타내는 2 니블 값을가집니다.
패킹 된 십진수 필드의 네 번째 바이트의 오른손 니블은 부호 용입니다.
@Murad, 태그를 선택해야합니다. JCL이 적절한 경우 OpenCOBOL 및 COBOL.Net은 적합하지 않습니다. OpenCOBOL이 적절한 경우 COBOL.Net은 그렇지 않으며 그 반대의 경우도 마찬가지입니다. –
@Murad : 질문에 답이있는 경우 :이 방법으로 표시하거나 세부 정보를 제공하십시오. –