2016-08-05 4 views
-2

변수가 PIC X(20) 인 것으로 가정합니다.문자열 길이 알아 내기

변수에 값이 예를 들어. ABC WXYZ.

사이의 공백을 제외한 문자열의 길이를 찾는 방법은 무엇입니까?

+0

을 지금까지 시도 무엇을 아무것도, 당신은 적어도이 검색 안 경우 문자열 처리로 사이트가 몇 번 올랐고 거기에 아이디어를 얻을 수 있습니다. arted. 그러면 붙잡히면 더 구체적이고 구체적인 질문을 할 수 있습니다. – lurker

+0

@ Maxcc0 제공된 답이 효과가 있습니까? 예인 경우 대답으로 표시하십시오. 답변이 없으면 답장하십시오. –

답변

1

당신이 시험 발을 정의하고 PERFORM이 사용할 수 사이에 당신이 공간을 싶지 않아 정말 확신하는 경우 : 당신은 단지를 알고 싶다면 빌 지적

77 some-len PIC 9(02). *> make sure to use appropriate length, if "big" use COMP-5 
    77 string-ptr PIC 9(02). *> make sure to use appropriate length 
    77 some-var PIC X(20) VALUE ' ABC WXYZ'. 
    77 var-len PIC 9(02) VALUE LENGTH OF some-var. 
    01 test-char PIC X. 
     88 no-spaces values 'A' THROUGH 'Z' 
          'a' THROUGH 'z' 
          '0' THROUGH '9' 
          '-', '.'. 

    PROCEDURE DIVISION. 

     MOVE 0 TO some-len 
     PERFORM VARYING string-ptr FROM 1 BY 1 
       UNTIL string-ptr > var-len 
      MOVE some-var (string-ptr) TO test-char 
      IF no-spaces ADD 1 TO some-len END-IF 
     END-PERFORM 

"없는 공간"문자 덜 바르을 필요로 빠른 옵션이있다 (이 당신과 다른 사람이 무엇을하는지 알려 의견을 확인 :

*> set numbers of all non-spaces in some-len 
     MOVE 0 TO some-len 
     INSPECT some-var TALLYING some-len FOR ALL SPACES 
    *> add more counts here if you want to remove more chars like x'0D'/x'0A'/x'00', ... 
    *> INSPECT some-var TALLYING some-len FOR ALL x'00' 
    *> INSPECT some-var TALLYING some-len FOR ALL x'0D' 
    *> INSPECT some-var TALLYING some-len FOR ALL x'0A' 
    *> and finally subtract it from the fields length 
     SUBTRACT some-len FROM LENGTH OF some-var GIVING some-len 
    *> 
+0

자세한 내용은 사용자 이름 Maxcc0 힌트 및 메인 프레임을 참조하십시오. 실제로 프로필을 잠깐 살펴보면 메인 프레임 태그가 나타납니다. 물론 이전 질문을 기억하십시오. 그래서 78은 작동하지 않을 것입니다. COMP-5는 필요하지 않다면 좋지 않을 것입니다. 공백을 계산하지 않는 이유는 무엇입니까? 검사 ... 예를 들면 고난. –

+0

@BillWoodger : Maxcc0 사용자 프로필의 정보는 질문의 일부가 아닙니다 :-) 레벨 78 확장자 대신 'LENGTH OF'특수 레지스터를 사용하도록 소스를 변경하고 INSPECT 옵션을 추가했습니다. –

+0

제안 해 주셔서 감사합니다. INSPECT가 잘 작동합니다 :). – Maxcc0