1

输入:WS 变量包含“345xABCx12”

代码:IF WS-Variable 字符串包含 'ABC' 显示 'SKIP!!!' 其他 执行某事。

If variable contains 'abc'
  display skipped
else
  process-para
end if.
4

2 回答 2

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
       .
于 2013-10-16T20:06:04.790 回答
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 可以定义为 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'
于 2013-10-16T19:30:11.313 回答