比较COBOL中的2个PICX字符串

比较COBOL中的2个PICX字符串,cobol,gnucobol,Cobol,Gnucobol,我是COBOL的新手,我想问一个问题。如果我有两张图片的字符,我想知道他们是否是相同的字符串 77名称1图x(20)。 77姓名2图x(20)。 程序司。 显示“键入名字:”不前进 接受name1。 显示“键入第二个名称:”不前进 接受名字2。 我试着在谷歌上搜索,找到了搜索方法。但我不能真正理解它,我认为它不会在我的情况下工作,因为我没有使用表 (免责声明:我不是COBOL用户) 在线快速搜索之后,我找到了OpenCOBOL参考手册(),其中描述了使用字符串类型(6.1.4.2.5.)的IS

我是COBOL的新手,我想问一个问题。如果我有两张图片的字符,我想知道他们是否是相同的字符串

77名称1图x(20)。
77姓名2图x(20)。
程序司。
显示“键入名字:”不前进
接受name1。
显示“键入第二个名称:”不前进
接受名字2。
我试着在谷歌上搜索,找到了搜索方法。但我不能真正理解它,我认为它不会在我的情况下工作,因为我没有使用表

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

在线快速搜索之后,我找到了OpenCOBOL参考手册(),其中描述了使用字符串类型(6.1.4.2.5.)的
IS=
关系运算符(及其同义词),即:

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

COBOL将
定义为
等于
等于
作为等价的运算符,因此您需要如下内容:

IF name1 EQUALS name2
    DISPLAY "Names are the same"
ELSE
    DISPLAY "Names are not the same"
如文档所述,程序的排序规则设置定义了字符串比较的执行方式,这意味着可能会将“
Peter
”、“
Peter
”和“
péter
”视为等效项

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

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

在线快速搜索之后,我找到了OpenCOBOL参考手册(),其中描述了使用字符串类型(6.1.4.2.5.)的
IS=
关系运算符(及其同义词),即:

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

COBOL将
定义为
等于
等于
作为等价的运算符,因此您需要如下内容:

IF name1 EQUALS name2
    DISPLAY "Names are the same"
ELSE
    DISPLAY "Names are not the same"
如文档所述,程序的排序规则设置定义了字符串比较的执行方式,这意味着可能会将“
Peter
”、“
Peter
”和“
péter
”视为等效项

关于不同长度的注释很有趣,隐含的右填充意味着这两个字符串被认为是相等的:(“
Foo
”和“
Foo
”),但不是(“
Foo
”和“
\uu Foo
”),我在z/OS上运行,除了中表示的
EQUALS
操作符的之外,其他所有比较操作符都为我工作

作品
等于

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.
不起作用
等于

IF name1 EQUALS name2
    DISPLAY "Names are the same"
ELSE
    DISPLAY "Names are not the same"
END-IF.
导致此JCL条件代码12编译错误:

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


为了确认,您可以删除
IS
,它在中未被引用

作品
=

IF name1 = name2
    DISPLAY "Names are the same"
ELSE
    DISPLAY "Names are not the same"
END-IF.
在此基础上,我在z/OS上运行,所有其他的比较操作符都为我工作,除了中表示的等于操作符

作品
等于

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.
不起作用
等于

IF name1 EQUALS name2
    DISPLAY "Names are the same"
ELSE
    DISPLAY "Names are not the same"
END-IF.
导致此JCL条件代码12编译错误:

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


为了确认,您可以删除
IS
,它在中未被引用

作品
=

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

PIC
不是一个类型,它是一个位于字段类型(或者更确切地说,格式)之前的语法结构,在这种情况下
x(20)
表示“20个字符的任意文本”。所以基本上我无法比较它们。@Dai不,
picx(20)
不是这个意思
X
称为“字母数字”,但它可以有效地包含256个可用位模式中的任何一个。picx(20)是20字节的数据。它包含的内容取决于所使用的上下文。在这个例子中,
ACCEPT
是键盘输入,但是PIC X字段可以用很多其他的方式。
PIC
不是一个类型,它是一个位于字段类型(或者更确切地说是格式)之前的语法结构,在这种情况下,
X(20)
意味着“20个字符的任意文本”。所以基本上我不能比较它们?@Dai No,
picx(20)
并不意味着这一点
X
称为“字母数字”,但它可以有效地包含256个可用位模式中的任何一个。picx(20)是20字节的数据。它包含的内容取决于所使用的上下文。在本例中,
ACCEPT
是键盘输入,但是picx字段可以用许多其他方式。还有普通=、>=etc运算符,您需要终止IF。现代的方法是使用端到端IF。否则一个句号/句号就可以了。一氧化碳