2008-09-05 4 views
4

COBOL에서 알 수없는 길이의 두 문자열을 어떻게 연결합니까? 그래서 예를 들면 :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   ' 
+0

@badp 빈칸을 표시하는 b의 포인트는 비난받은 ​​물건을 셀 수 있도록하기위한 것입니다. 왜 그들을 바 꾸었습니까? –

+0

각 문자열을 15 자로 채우는 지 알아야합니까? (''foo ''와''foo ''사이에 COBOL의 차이가있을 수 있습니까?) – badp

답변

4

나는 다음 내용이 당신이 원하는 것을 줄 것이라고 믿는다.

STRING 
FIRST-NAME DELIMITED BY " ", 
" ", 
LAST-NAME DELIMITED BY SIZE 
INTO FULL-NAME. 
3

,이 솔루션은 레퍼런스 수정을 사용하는 것입니다 공간을 포함하여 두 개의 문자열을 함께 STRING에 연결합니다. 문제는 FIRST-NAME에 몇 개의 후행 공백이 있는지를 알아야한다는 것입니다. 그렇지 않으면 'JOHNbbbbbbbbbbbbbDOE'와 같은 것을 생성하게됩니다. 여기서 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에게 업무 분야를 TO
    • MOVE 기능의 REVERSE (FIRST-NAME)를 역
    • .
    • WORK-FIELD에 후행 공백 대신 선행 공백이 포함됩니다.
    • 선행 스페이스 후미 공간 집계 WORK-FIELD 검사 FIRST-NAME에 후미 공간의 번호를 찾는다.
    • TRAILING-SPACE에 FIRST-NAME에 후행 공백 수가 포함됩니다.
  1. 은 FIRST-NAME 필드
    • COMPUTE FIELD-LENGTH = FUNCTION 길이 (FIRST-NAME)의 길이를 찾는다.
  2. 두 문자열을 연결하십시오.
    • 성 (1 : FIELD-LENGTH - TRAILING-SPACES) ""성, 전체 이름으로 제한된 성 ".
+0

"가장 빠름"은 그것을 묘사하는 이상한 방법이지만 삽입 된 공백을 올바르게 다룹니다. –