输入:WS 变量包含“345xABCx12”
代码:IF WS-Variable 字符串包含 'ABC' 显示 'SKIP!!!' 其他 执行某事。
If variable contains 'abc'
display skipped
else
process-para
end if.
您正在寻找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
.
你尝试过类似的东西:?
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 可以定义为 BINARY PIC 9(4)。你想搜索的值作为 PIC XXX VALUE 'abc'。
在 INSPECT 之前将零移到计数。
在 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'