2010-02-22 3 views

답변

3

표준 기능 TRIM은 CLLE에 사용할 수 없습니다. 그러나

  • 두 개의 변수를 접착제하려면

    후 *의 TCAT (| < 또는)를 봐주세요. 이 명령은 사이의 공백을 제거합니다 (예 : 'XYZ'* TCAT 'UVW'는 'xyzuvw'
  • 당신이 정말로 다음 '' '* TCAT의 $ YOURVAR의 *의 TCAT'을 시도 트림하려면된다 (이 하나를 시도 할 수 나 자신으로 지금/400 집에서 ...)
  • 또는 ILE CL로 작업한다는 사실을 사용하십시오. CALLPRC 명령을 사용하여 트릭을 수행 할 수있는 모듈을 호출 할 수 있습니다. ILE RPG 또는 COBOL 자신을 모듈. CL의 모든 변수는 길이가 고정되어 있기 때문에
+0

당신이 필요로하는 경우에, 나는 당신에게 RPG의 예를 제공 할 수 있습니다. RPG는 iSeries에서 선호하는 언어입니다. – robertnl

+0

\ * TCAT는 연산자 왼쪽에있는 피연산자의 후행 공백을 제거합니다. 오른쪽 피연산자의 주요 블랭크 [부호화 심지어 CPD0126 당 리터럴 스트링으로 허용 빈 문자열마다, 지원되지 않는 제 2 실시 예 발현 따라서 효과 :-(박리되지 않는 일치 할 TRIM이 아닌 TRIMR의 효과 [처음으로 수정 된 경우, 빈 리터럴을 사용합니다.그리고 그것을 강조하기 위해 첫 번째 예제 표현은 * 공백을 제거하지 않습니다. 일반적으로''xyz ''에서 공백을 하나만 제거합니다. ''xyz '* TCAT'uvw'''는''xzy uvw''가됩니다. – CRPence

1

, 자체 트림 논리적 인 요구 사항이 없습니다.

하는 JO하기 중간에 공백이없는 두 값으로 |< 연산자를 사용하고 단일 공백을 포함하려면 |>을 사용하십시오.

가 후행 공백을 제외한 문자의 길이를 찾으려면, 당신은 공간에 대한 각 문자의 위치를 ​​테스트 %의 SST (& 발 & POS 1)를 사용하여 값을 뒤로 좋은 팔자 '유행 산책을 할 필요가있다. 뭔가 같은 :

DCL &LEN *DEC (15 0) 
DCL &VAL *CHAR 50 VALUE('Some test data') 
DCL &CHR15 *CHAR 15 

CHGVAR &LEN 50 
LOOP: IF (&LEN > 1 & %SST(&VAL &LEN 1)==' ') (DO) 
    CHGVAR &LEN VALUE(&LEN - 1) 
    GOTO LOOP 
    ENDDO 

CHGVAR &CHR15 &LEN 
SNDPGMMSG ('The length is' |> &CHR15) /* Can't concat decimal values */ 

단순히 널 종료, 예를 들어, C 함수를 호출 할 값을 :

DCL &VAL *CHAR 50 VALUE('Some test text') 
DCL &VALNUL *CHAR 51 /* +1 for the null */ 
DCL &NULL *CHAR 1 VALUE(X'00') 

CHGVAR &VALNUL VALUE(&VAL |< &NULL) 

편집을 2012-07-19 *

일부 문자 집합에서는 대신 !이 사용됩니다. 대신 사용할 수있는 CCSID 독립 * CAT 조작이 있습니다. IBM 웹 사이트 herehere을 참조하십시오.

+0

해당 운영자가 어떤 버전을 발표 했습니까? 연산자'| <' and '|>'이 V6R1에서 작동하지 않습니다. 문자'|'는 모든 EBCDIC 코드 페이지에서 같은 위치에 있지 않기 때문에 필자는 어쨌든'* TCAT '대신에 그 문자를 사용하는 것이 좋습니다. – kratenko

+0

@kratenko : 편집을 참조하십시오. 적어도 V3 이상이되었으므로 V1 이후로 내기를했습니다. –

+0

다양한 연산자는 System/38 (AS/400 시리즈의 전신) 이후로 사용되었습니다. i 6.1 문서의 경우 ** 표현식의 연산자 ** [링크] (http://pic.dhe.ibm.com/infocenter/iseries/v6r1m0/index.jsp?topic=/rbam6/rbam6opsinexp.htm) 주제를 참조하십시오. . 주어진 시스템에서 작동하지 않으면 문제는 거의 잘못 구성된 장치 설명 일 수 있습니다. KBDTYPE() 및/또는 CHRID() 특성이 시스템 구성과 일치하지 않는 것 같습니다. – user2338816

1

나는이 오래 알고,하지만 당신은 ILE CL 사용할 수

%의 TRIM() %의 TRIML()와 % TRIMR() 이전 릴리스에서는
0

이 가능했던 %의 TRIM (& 인 myVariable)를 사용할 수 있습니다 ' triml 'C 라이브러리 기능 : PROC는 * SRVPGM QC2UTIL1에서 발견

dcl &lPath  *int   value(0) 

callprc 'triml' (+ 
        &Dir   + 
        (' ' *byval) + 
       ) + 
      rtnval(&lPath) 

. OPM과 ILE CL 모두에서

는, 내가 자주 사용했습니다 두 경우 모두

dcl &lmsgtxt1 *dec ( 5 0) value(0) 

rtvmsg  msgid(cpf9897) msgf(QSYS/QCPFMSG) + 
      msgdta(&SQLStm) + 
      msglen(&lmsgtxt1) 

는, 결과의 길이는 실제 트리밍 효과에 %의 SST() 표현식에 사용할 수 있습니다.

관련 문제