INPUT:WS-Variable包含'345xABCx12'
代码:IF WS-Variable字符串包含'ABC'显示'SKIP !!!'否则执行某些操作。
If variable contains 'abc'
display skipped
else
process-para
end if.
答案 0 :(得分:2)
您正在寻找INSPECT动词...尝试类似......
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TESTDATA PIC X(50).
01 COUNTER PIC 9(4).
PROCEDURE DIVISION.
MOVE '12345XXABCXX12345' TO TESTDATA
MOVE ZERO TO COUNTER
INSPECT TESTDATA TALLYING COUNTER FOR ALL 'ABC'
IF COUNTER > 0
DISPLAY 'SKIP! ' TESTDATA
ELSE
DISPLAY 'DONT SKIP ' TESTDATA
END-IF
MOVE '12345XXZZZXX12345' TO TESTDATA
MOVE ZERO TO COUNTER
INSPECT TESTDATA TALLYING COUNTER FOR ALL 'ABC'
IF COUNTER > 0
DISPLAY 'SKIP! ' TESTDATA
ELSE
DISPLAY 'DONT SKIP ' TESTDATA
END-IF
GOBACK
.
答案 1 :(得分:1)
你有没有尝试过这样的事情??
If variable equal to 'abc'
display "skipped"
else
perform process-para
end-if
这假设变量被定义为PIC XXX或X(3)。
如果不合适,请使用更全面的说明,一些示例输入,预期输出以及您尝试过的内容来更新您的问题。
现在事实证明,你正在寻找一段数据中可变位置的'abc'。
有几种方法可以做到这一点。
最简单的是
INSPECT field-you-want-to-look-at
TALLYING a-count
FOR ALL value-you-want-to-search-for
a-count可以定义为BICARY PIC 9(4)。你希望搜索的价值为PIC XXX VALUE'abc'。
在INSPECT之前移动ZERO到a-count。
在INSPECT之后,您可以测试一个计数器,它会告诉您在想要查看的字段中有多少值出现的值。
使用数据定义(PIC XXX)而不是文字('abc')的原因是为了便于维护和理解。程序中可能有多个地方需要'abc',它可能在两个地方都是同一个东西,或者在一个地方有一个东西,在另一个地方有其他东西。使用定义中的数据名称,您可以描述每个实例中“abc”的含义。如果'abc'(或其中一个'abc')的值需要改变,那么在工作存储中只需要改变一个地方。
如果(并假设由于COOLGEN引用而在大型机上使用Enterprise COBOL),则使用编译器选项OPT(STD)或OPT(FULL)一个引用但从不是任何东西的“目标”的数据名,即它具有常数值,被视为常数。所以你也得到一个命名常量。
INSPECT FLIGHTPLAN-REFERENCE
TALLYING NO-OF-ENTRIES-TO-EU-AIRSPACE
FOR ALL EU-FLIGHTPLAN-CODE
比
更容易理解INSPECT VAR1 TALLYING A-COUNT FOR ALL 'abc'