2014-09-16 5 views
0

많은 사이트를 방문했지만 만족스러운 답변을 얻을 수 없었습니다. 제발, 이걸 이해하도록 도와주세요. 나는 프로그램을 만들려고했지만 이해할 수 없었다. 내가 시도 :RPGLE에서 % CHECK()와 % checkr()의 차이점은 무엇입니까?

String = 'AABC1ABD2AB3A';       

Pos = %check ('ABCD' : %trim(String));    
dsply pos; 
+0

존 파리 (John Paris)의이 기사를 확인하십시오. http://www.itjungle.com/fhg/fhg022509-story01.html – bvstone

답변

1

돌아갑니다 5 %의 checkr()를 호출하는 것입니다 예제 코드, 그래서 우리는 많이 도울 수 없다. 표시되는 코드는 Stringpos에 대한 정의를 표시하지 않지만 프로그램이 종료되는 방법을 보여주지는 않지만 잘 보입니다. String의 값은 % CHECK 왼쪽() 다음의 % CHECKR 오른쪽에서()에서 먼저 확인된다

D string   S    15 

D pos1   S    10 0 inz(0) 
D pos2   S    10 0 inz(0) 

    /free 

    String = 'AABC1ABD2AB3A' ; 
    //   ^ ^
    // The above characters will trigger mismatches for 
    // %CHECK() and %CHECKR. 

    Pos1 = %check ('ABCD' : %trim(String)) ; 
    Pos2 = %checkr('ABCD' : %trim(String)) ; 

    // Will display the value "1 3" 
    dsply (%subst(%trim(String): pos1: 1) + ' ' + 
      %subst(%trim(String): pos2: 1)); 

    *inlr = *on ; 
    return ; 

    /end-free 

: 여기

보다 완전한 예이다. 선행 공백이나 후행 공백에 히트가 발생하지 않도록 값은 % TRIM()으로 트림됩니다. 그런 다음 테스트는 제공된 테스트 문자 ABCD과 일치하지 않는 문자를 찾습니다. 프로그램은 String에 테스트 문자 만 포함되도록하고 테스트에 실패한 첫 번째 문자의 위치를 ​​표시합니다.

오류가있는 문자의 색인은 Pos1Pos2에 저장됩니다. 모든 문자가 검사를 통과하면 0이 반환됩니다.

DSPLY 연산 코드는 일치하지 않는 첫 번째 문자를 출력합니다. 인덱스 값을 사용하여 실패한 문자에 대해 단일 문자 부분 문자열을 가져옵니다. 그들은 String의 다른 끝에서 시작하기 때문에 % CHECK() 및 % CHECKR()에 대해 다른 문자를 표시합니다.

2

퍼센트 검사를() (오른쪽 %의 checkr 왼쪽 구문 분석) 왼쪽에서 오른쪽에 구문 분석합니다. 예 감안할 때

% 검사() 당신이 I tried to make a program but could not understand.

당신은 틀린 무슨 말을하지 않습니다 무슨 뜻인지 분명하지 않다 (12)