2016-08-05 131 views
-2

假设我有一个变量PIC X(20)找出字符串的长度

该变量包含一些值,例如ABC WXYZ

如何找出字符串的长度,但不包括两者之间的空格?

+0

你尝试过什么到目前为止,如果没有,你至少应该搜索此网站作为字符串处理已经出现了几次,并有想法让你st arted。那么如果你陷入困境,你可以问一个更好,更具体的问题。 – lurker

+0

@ Maxcc0提供的答案是否适合您?如果是,请将其标记为答案,如果不是的话:请评论你的答案。 –

回答

1

如果你真的确定你不想空间之间可以定义测试-VAL和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将会很糟糕(它不在这里)。为什么不计算空间?检查... TALLYING例如。 –

+0

@BillWoodger: Maxcc0用户配置文件的信息不是问题的一部分:-) 我已将源更改为使用'LENGTH OF'特殊寄存器而不是级别78扩展并添加了INSPECT选项。 –

+0

感谢您的建议。检查将工作正常:)。 – Maxcc0