比较COBOL中的2个PIC X字符串

时间:2014-08-31 10:13:12

标签: cobol gnucobol

我是COBOL的新手,我想问一个问题。如果我有两个PIC字符怎么办,我想知道它们是否是相同的字符串

   77 name1 PIC x(20).
   77 name2 PIC x(20).

   PROCEDURE DIVISION.
      DISPLAY "Type the first name: " WITH NO ADVANCING
      ACCEPT name1.
      DISPLAY "Type the second name: " WITH NO ADVANCING
      ACCEPT name2.

我尝试在google上搜索并找到了搜索方法。但是我无法真正理解它,因为我没有使用表格,所以我觉得它不适用于我的情况。

2 个答案:

答案 0 :(得分:3)

为了构建@Dai's answer,我在z / OS上运行,而其他所有比较运算符listed on Page 6-8 in that reference都为我工作 ,除了 EQUALS运算符的IS EQUAL TO运算符。

的工作原理

IF name1 IS EQUAL TO name2 DISPLAY "Names are the same" ELSE DISPLAY "Names are not the same" END-IF.

IS =

的工作原理

IF name1 IS = name2 DISPLAY "Names are the same" ELSE DISPLAY "Names are not the same" END-IF.

EQUALS

不起作用

IF name1 EQUALS name2 DISPLAY "Names are the same" ELSE DISPLAY "Names are not the same" END-IF.

IS

导致此JCL条件代码12编译错误:

  

IGYPS2055-S" EQUALS"没有被定义为类名。该声明   被丢弃了。

要确认@Dai's answer,您可以删除=中未引用的IF name1 = name2 DISPLAY "Names are the same" ELSE DISPLAY "Names are not the same" END-IF.

的工作原理

var options = getOptionsFromMQTT(); Object.assign(options, {options, {clientID, keepAlive}); // options now uses whatever values are assigned to clientID and keepAlive

Mage::getModel('directory/currency')->format($_product->getData('ship_cost'), array('display'=>Zend_Currency::NO_SYMBOL), false);

答案 1 :(得分:2)

(免责声明:我不是COBOL用户)

在网上快速搜索之后,我找到了OpenCOBOL参考手册(http://opencobol.add1tocobol.com/OpenCOBOL%20Programmers%20Guide.pdf),它描述了使用字符串类型(6.1.4.2.5。)的IS=关系运算符(及其同义词)即:

  

比较字符串时,会根据程序的整理顺序进行比较(参见第4.1.2节)。当两个字符串参数的长度不相等时,假设较短的(在右侧)填充足够数量的SPACES,以使两个字符串具有相等的长度。字符串比较在相应的逐个字符的基础上进行,直到找到不相等的字符对。此时,对中每个字符落在整理顺序中的相对位置将决定哪一个比另一个更大(或更小)。

COBOL将IS=IS EQUAL TOEQUALS定义为等效运算符,因此您需要这样的内容:

IF name1 EQUALS name2
    DISPLAY "Names are the same"
ELSE
    DISPLAY "Names are not the same"

正如文档所述,您的程序的排序规则设置定义了字符串比较的执行方式,这意味着可能会对“Peter”,“PETER”和“Péter”进行处理作为等价物。

关于不同长度的注释很有意思,隐式右边填充意味着这两个字符串被认为是相等的:(“Foo”和“Foo__”)但不是(“{{1} }“和”Foo“)。