1

我对 COBOL 真的很陌生,我想问一个问题。如果我有 2 个字符,我想知道它们是否是同一个字符串怎么办

   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 上搜索并找到了 Search 方法。但我无法真正理解它,我认为它不适用于我的情况,因为我没有使用桌子。

4

2 回答 2

3

只是以@Dai 的回答为基础,我在 z/OS 上运行,并且该参考中第 6-8 页上列出的所有其他比较运算符都对我有用,但@Dai 的回答中表达的运算符除外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.

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

IGYPS2055-S “EQUALS”未定义为类名。该声明被丢弃。


并且要确认@Bruce Martin 的评论,您可以删除IS中未引用的。

作品

=

IF name1 = name2
    DISPLAY "Names are the same"
ELSE
    DISPLAY "Names are not the same"
END-IF.
于 2016-05-13T03:34:21.390 回答
2

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

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

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

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

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

正如文档所述,您的程序的排序规则设置定义了字符串比较的执行方式,这意味着潜在的“ Peter”、“ PETER”和“ Péter”可能被视为等效项。

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

于 2014-08-31T10:26:50.117 回答