2010-07-21 6 views

답변

5

Paxdiablo에는 몇 가지 유효한 방법이 있습니다. 또 다른 방법은 STRING 동사 외에 참조 수정을 사용하는 것입니다. 전체 프로그램의 예는 다음과 같습니다 이것은 상세에 꽤 줄인다 단일 문에서 연결을 캡처

IDENTIFICATION DIVISION.          
    PROGRAM-ID. EXAMPLE9.           
    DATA DIVISION.             
    WORKING-STORAGE SECTION.          
    01 STRINGS.             
     05 STRING1 PIC X(10) VALUE 'AAAAAAAAAA'.    
     05 STRING2 PIC X(10) VALUE 'BBBBBBBBBB'.    
     05 STRING3 PIC X(10) VALUE 'CCCCCCCCCC'.    
     05 STRING4 PIC X(10) VALUE 'DDDDDDDDDD'.    
     05 STRING5 PIC X(10) VALUE 'EEEEEEEEEE'.    
     05 STRING6 PIC X(10) VALUE 'FFFFFFFFFF'.    
     05 STRING7 PIC X(10) VALUE 'GGGGGGGGGG'.    
     05 STRING8 PIC X(10) VALUE 'HHHHHHHHHH'.    
     05 STRING-OUT PIC X(40) VALUE SPACES.      
    PROCEDURE DIVISION. 

     STRING STRING1(1:5) STRING2(1:5) STRING3(1:5) STRING4(1:5) 
       STRING5(1:5) STRING6(1:5) STRING7(1:5) STRING8(1:5) 
       DELIMITED BY SIZE         
     INTO STRING-OUT 

     DISPLAY STRING-OUT           
     GOBACK.              

. 가장 좋은 조언은 STRING 동사를 읽는 것입니다. 사용할 수있는 혁신적인 방법이 많이 있습니다.

COBOL은 BASIC MID 문과 정확한 아날로그를 제공하지 않습니다. STRING, UNSTRING, INSPECT 및 참조 수정의 조합을 사용하여 유사한 작업을 수행 할 수 있습니다. 참조 수정의 예는 다음과 같습니다. SOME-VARIABLE-NAME(1:5) - 1 : 5 비트는 SOME-VARIABLE-NAME의 하위 문자열을 길이가 5 문자 인 첫 번째 문자로 시작하여 지정합니다. 수정자는 그 자체가 숫자 변수 일 수 있습니다. STRINGUNSTRING 동사는 매우 강력한 기능을 제공합니다.

일반적으로 COBOL은 문자열 조작에 특히 좋지 않습니다 (일부는 그다지 좋지 않다고 말할 수도 있지만 그 진술에는 동의하지 않습니다). 여기에 문자열 구문에서

+0

가 대단히 감사합니다, thsis 내 문제를 해결 :) – friedkiwi

2

는 나는 이런 식 생각 :

WORKING STORAGE SECTION. 
    01 NORMAL-STRING-A PIC X(80) 
    01 NORMAL-STRING-B PIC X(80) 
    01 NORMAL-STRING-C PIC X(80) 
    01 NORMAL-STRING-D PIC X(80) 
    01 NORMAL-STRING-E PIC X(80) 
    01 SUB-STRING. 
     05 FIVE   PIC X(5) 
     05 REST   PIC X(75) 
    01 TWENTY-FIVE-A. 
     05 FIVE-A   PIC X(5). 
     05 FIVE-B   PIC X(5). 
     05 FIVE-C   PIC X(5). 
     05 FIVE-D   PIC X(5). 
     05 FIVE-E   PIC X(5). 
    01 TWENTY-FIVE-B  PIC X(25). 

PROCEDURE DIVISION. 
    MOVE NORMAL-STRING-A TO SUB-STRING. 
    MOVE FIVE TO FIVE-A. 

    MOVE NORMAL-STRING-B TO SUB-STRING. 
    MOVE FIVE TO FIVE-B. 

    MOVE NORMAL-STRING-C TO SUB-STRING. 
    MOVE FIVE TO FIVE-C. 

    MOVE NORMAL-STRING-D TO SUB-STRING. 
    MOVE FIVE TO FIVE-D. 

    MOVE NORMAL-STRING-E TO SUB-STRING. 
    MOVE FIVE TO FIVE-E. 

    MOVE TWENTY-FIVE-A TO TWENTY-FIVE-B. 

그런 다음 문자열이 TWENTY-FIVE-B입니다.

당신은 사람들이 COBOL이 더 심각한 음, 난 당신이 동일한 결과를 얻기 위해 이러한 라인을 따라 뭔가를 할 수 있다고 생각에 자세한 :-)


라고 생각하는 이유는 (당신이 상상할 수없는, 알고 내가 어떤 심각한 COBOL을 한 이후 시작과 길이 매개 변수와 함께 바이올린 할 수 있습니다, 그것은) 동안이었다 :

WORKING STORAGE SECTION. 
    01 STRING-A   PIC X(80) 
    01 STRING-B   PIC X(80) 
    01 STRING-C   PIC X(80) 
    01 STRING-D   PIC X(80) 
    01 STRING-E   PIC X(80) 
    01 TWENTY-FIVE  PIC X(25). 

PROCEDURE DIVISION. 
    MOVE STRING-A(1:5) TO TWENTY-FIVE(1:5). 
    MOVE STRING-B(1:5) TO TWENTY-FIVE(6:5). 
    MOVE STRING-C(1:5) TO TWENTY-FIVE(11:5). 
    MOVE STRING-D(1:5) TO TWENTY-FIVE(16:5). 
    MOVE STRING-E(1:5) TO TWENTY-FIVE(21:5). 
0

substring examples 페이지에 몇 가지 변화를 보여줍니다. 예 :

* Task3 suffix(xStr,Length) 
* Extract the last Length number of chars from a string 
* Solution - use reference modification with start of substring 
* defined as the FullStringLength - SubStringLength + 1 
* In this example we get the last 13 characters. 
MOVE 13 TO StrLength 
DISPLAY "Task3 = " xStr2((StrSize - StrLength) + 1:StrLength) 
0
WORKING STORAGE SECTION. 
01 NORMAL-STRING-A PIC X(80) 
01 NORMAL-STRING-B PIC X(80) 
01 NORMAL-STRING-C PIC X(80) 
01 NORMAL-STRING-D PIC X(80) 
01 NORMAL-STRING-E PIC X(80) 
01 TWENTY-FIVE-A. 
    05 FIVE-A   PIC X(5). 
    05 FIVE-B   PIC X(5). 
    05 FIVE-C   PIC X(5). 
    05 FIVE-D   PIC X(5). 
    05 FIVE-E   PIC X(5). 
01 TWENTY-FIVE-B REDEFINES TWENTY-FIVE-A PIC X(25). 

PROCEDURE DIVISION. 
    MOVE NORMAL-STRING-A TO FIVE-A 
    MOVE NORMAL-STRING-B TO FIVE-B 
    MOVE NORMAL-STRING-C TO FIVE-C 
    MOVE NORMAL-STRING-D TO FIVE-D 
    MOVE NORMAL-STRING-E TO FIVE-E