문제

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.
  1. FIRST-NAME을 바꾸세요.
    • 기능 역방향(이름)을 작업 필드로 이동합니다.
    • WORK-FIELD에는 이제 후행 공백 대신 선행 공백이 포함됩니다.
  2. FIRST-NAME의 후행 공백 수 찾기
    • 선행 공간에 대한 작업 필드 집계 후행 공간을 검사합니다.
    • TRAILING-SPACE에는 이제 FIRST-NAME의 후행 공백 수가 포함됩니다.
  3. FIRST-NAME 필드의 길이 찾기
    • 계산 필드 길이 = 함수 길이(이름).
  4. 두 문자열을 함께 연결합니다.
    • STRING FIRST-NAME (1:FIELD-LENGTH – TRAILING-SPACES) “ “ 성은 크기로 구분되어 전체 이름으로 표시됩니다.

실제 길이를 얻으려면 루프를 만들어 볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top