2016-08-05 86 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