如果找到跳过记录,如何在长度为10的输入cobol变量中检查“3个单词”?

时间:2013-10-16 19:21:57

标签: cobol mainframe

INPUT:WS-Variable包含'345xABCx12'

代码:IF WS-Variable字符串包含'ABC'显示'SKIP !!!'否则执行某些操作。

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

2 个答案:

答案 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'