문제
COBOL에서 길이를 알 수 없는 두 문자열을 어떻게 연결합니까?예를 들면 다음과 같습니다.
WORKING-STORAGE.
FIRST-NAME PIC X(15) VALUE SPACES.
LAST-NAME PIC X(15) VALUE SPACES.
FULL-NAME PIC X(31) VALUE SPACES.
만약에 FIRST-NAME = 'JOHN '
그리고 LAST-NAME = 'DOE '
, 어떻게 얻을 수 있나요?
FULL-NAME = 'JOHN DOE '
반대로:
FULL-NAME = 'JOHN DOE '
해결책
나는 다음이 당신이 원하는 것을 얻을 것이라고 믿습니다.
STRING
FIRST-NAME DELIMITED BY " ",
" ",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.
다른 팁
언뜻 보기에 해결책은 참조 수정을 사용하여 공백을 포함하여 두 문자열을 함께 STRING하는 것입니다.문제는 FIRST-NAME에 후행 공백이 몇 개 있는지 알아야 한다는 것입니다. 그렇지 않으면 'JOHNbbbbbbbbbbbbDOE'와 같은 결과가 생성됩니다. 여기서 b는 공백입니다.
문자열의 후행 공백 수를 결정하는 내장 COBOL 함수는 없지만 문자열의 선행 공백 수를 결정하는 함수는 있습니다.따라서 내가 알 수 있는 한 가장 빠른 방법은 이름을 바꾸고 선행 공백 수를 찾은 다음 참조 수정을 사용하여 이름과 성을 함께 연결하는 것입니다.
작업 저장소에 다음 필드를 추가해야 합니다.
WORK-FIELD PIC X(15) VALUE SPACES.
TRAILING-SPACES PIC 9(3) VALUE ZERO.
FIELD-LENGTH PIC 9(3) VALUE ZERO.
- FIRST-NAME을 바꾸세요.
- 기능 역방향(이름)을 작업 필드로 이동합니다.
- WORK-FIELD에는 이제 후행 공백 대신 선행 공백이 포함됩니다.
- FIRST-NAME의 후행 공백 수 찾기
- 선행 공간에 대한 작업 필드 집계 후행 공간을 검사합니다.
- TRAILING-SPACE에는 이제 FIRST-NAME의 후행 공백 수가 포함됩니다.
- FIRST-NAME 필드의 길이 찾기
- 계산 필드 길이 = 함수 길이(이름).
- 두 문자열을 함께 연결합니다.
- STRING FIRST-NAME (1:FIELD-LENGTH – TRAILING-SPACES) “ “ 성은 크기로 구분되어 전체 이름으로 표시됩니다.
실제 길이를 얻으려면 루프를 만들어 볼 수 있습니다.
제휴하지 않습니다 StackOverflow