Quantcast
Channel: 失落谷|失落博客|Lostgu.com
Viewing all articles
Browse latest Browse all 21

COBOL编程技巧之PERFORM VARYING逐字扫描

$
0
0

  在大型机的程序里,在遇到需要在一个极长的文件时候,比如说从queue里load出来的数据,通常知长度会很长,如果需要把其中的某个特定字符段去掉,程序逻辑该怎么写呢?其实方法有很多,但是我觉得功能最强的还是用PERFORM VARYING去实现,听我慢慢道来~~~

PERFORM VARYING WS-INDX FROM 1 BY 1
UNTIL WS-INDX > WS-X OR WS-HELLO-FOUND
MOVE WS-IN-RECORD (WS-INDX:6) TO WS-TEMP-HELLO
IF WS-TEMP-HELLO = ‘HELLO’
SET WS-HELLO-FOUND TO TRUE
END-IF
END-PERFORM

  上面这段逻辑可以从一条RECORD里找出’HELLO’这个字条串,这只是最简单的逻辑,一个简单的思路。

  比如上面逻辑稍作改变,就可以实现从特定字符串到特定字符串的识别,并且把这整段字符去掉再写到另一个变量里:
01 WS-FLG.
88 WS-CHECK PIC X(1) VALUE ‘ ‘.
88 WS-HELLO-FOUND PIC X(1) VALUE ’1′.
88 WS-END-FOUND PIC X(1) VALUE ’2′.

MOVE ZERO TO WS-OUT-INDX
SET WS-TEMP-CHECK TO TRUE
EVALUATE TRUE
WHEN WS-TEMP-HELLO = ‘HELLO’
SET WS-HELLO-FOUND TO TRUE
WHEN WS-TEMP-HELLO (1:3) = ‘END’ AND WS-HELLO-FOUND
SET WS-END-FOUND TO TRUE
END-EVALUATE
IF WS-TEMP-CHECK
ADD 1 TO WS-OUT-INDX
MOVE WS-IN-RECORD (WS-INDX:1) TO WS-OUT-RECORD (WS-OUT-INX:1)
END-IF

  这些都只是非常简单的运用,其实运用PERFORM VARYING语句演化出来的逻辑几乎可以做到随心所欲的操作数据和字符,功能非常之强!下面只写出它的一些功能,代码就不写了,估计写一整夜也写不完。

  它可以定位每一个或者多个特定的字符串
  它配合在WORKING STORAGE里的REDEFINES语句可以定位任意长度的特定字符
  定位字符串后可以对字符串或者字符串之间的数据进行任意的输出

  总结就是PERFORM VARYING对于字符的控制功能非常的全面,几乎可以做任何事情,在处理一些大数据里面的特定数据时效果非常的好,但是有时候逻辑过于复杂(循环较多时),数据量又非常大的时候,要非常小心,不要出现死循环,要尽可能的优化,提高它的执行效率。


Viewing all articles
Browse latest Browse all 21

Trending Articles