Encoding 在COBOL中显示零
我是COBOL新手,我们最新的培训活动是,我们将尝试获得以下三个项目的输出:Encoding 在COBOL中显示零,encoding,cobol,gnucobol,Encoding,Cobol,Gnucobol,我是COBOL新手,我们最新的培训活动是,我们将尝试获得以下三个项目的输出: WORKING-STORAGE SECTION. 01 NUM3 PIC X(7). 01 NUM3-NUMBERS PIC 9(5) VALUE 12345. PROCEDURE DIVISION. STRING NUM3-NUMBERS "**" DELIMITED BY SIZE INTO NUM3. DISPLAY "3) "NUM3. 0000/2013 00012345 12345** 我已经尝试了
WORKING-STORAGE SECTION.
01 NUM3 PIC X(7).
01 NUM3-NUMBERS PIC 9(5) VALUE 12345.
PROCEDURE DIVISION.
STRING NUM3-NUMBERS "**" DELIMITED BY SIZE INTO NUM3.
DISPLAY "3) "NUM3.
IDENTIFICATION DIVISION.
PROGRAM-ID. ACTIVITY4.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM1 PIC z(4)9(4) VALUE 2013.
01 NUM2 PIC Z(3)9(5) VALUE 12345.
01 NUM3 PIC 9(5) VALUE 12345.
01 E-NUM1 PIC *(2)9 VALUE 0.
PROCEDURE DIVISION.
DISPLAY-VALUES.
DISPLAY-ZEROES.
MOVE E-NUM1 TO NUM3.
DISPLAY "1) "NUM1.
DISPLAY "2) "NUM2.
DISPLAY "3) "NUM3.
STOP RUN.
声明数字时请删除Z Z抑制COBOL中数字的前导零 只需将变量声明更改为:
01 NUM1 PIC 9(8) VALUE 00002013.
01 NUM2 PIC 9(8) VALUE 00012345.
(实际上,数字中不需要前面的零,它们只是用来显示整个图片的。)
请参阅,以获取有关图片语句的更详细描述,以及不同字符修饰符及其作用的快速摘要
一开始我没有注意到另一个问题,但是您创建的另一个变量应该是
01 E-NUM1 PIC 9(2) VALUE 0.
在我看来,活动4是关于格式化输出数据的。您需要制作:
0000/2013
00012345
12345**
第一个要求插入斜杠。COBOL有一个斜杠插入符号“/”。第二个是确保零抑制,这是PIC 9(n)字段输出时的行为,因此除了获得正确的长度外,没有什么真正要做的。第三个明显地将您吸引到“*”替换编辑字段,我猜这就是问题的意图,但是*编辑符号仅替换前导零
获取尾随星号的一种简单方法是使用数据定义。定义要显示的组项目。从属于这一点,定义你的数字(图9(5)),然后立即使用一个填充符(如果你喜欢,命名字段)PIC XX,它的值是“**”
(或所有“*”
,但对于两字节字段来说有点极端)
程序司
DISPLAY-VALUES.
DISPLAY-ZEROES.
MOVE 1234 TO NUM1
DISPLAY "1) "
">"
NUM1
"<"
MOVE 12345 TO NUM2
DISPLAY "2) "
">"
NUM2
"<"
MOVE 12345 TO NUM3
DISPLAY "3) "
">"
NUM3-OUT
"<"
STOP RUN
.
DISPLAY-value。
显示零。
移动1234到NUM1
显示“1”)
">"
NUM1
""
NUM2
""
NUM3-OUT
“关于12345**
问题:如果没有其他办法,您可以使用字符串将数字连接到星号,如下所示:
WORKING-STORAGE SECTION.
01 NUM3 PIC X(7).
01 NUM3-NUMBERS PIC 9(5) VALUE 12345.
PROCEDURE DIVISION.
STRING NUM3-NUMBERS "**" DELIMITED BY SIZE INTO NUM3.
DISPLAY "3) "NUM3.
此代码的作用是在数字的末尾添加两个星号。
(但您的NUM3现在是字母数字图片,而不是数字图片)
我刚刚在一本旧cobol书中发现的另一个东西是*
检查保护字符。我从未尝试过它,但在这里它指出应该这样使用:
01 NUM3 PIC 9(5)*(2).
试试看!它仍然不起作用,我已经尝试了每个编译选项,仍然一样。我对代码所做的唯一其他更改是对第三个变量声明(其中声明*(2)9)。我将更新我的答案以反映这一点。你应该使用-x和-free(-free是可选的,但很好)编译时的参数。此外,您说您希望#3的输出为12345,但您将0移动到持有12345的变量中,这只是为了玩弄一些东西吗?为了完整性,您应该编辑您的问题,以包括您的代码实际获得的输出。这本书可能会说,检查保护仅适用于前导零。Mine有。我怀疑任何COBOL编译器都不会抑制尾随零,即使该值有尾随零,但事实并非如此。您觉得使用字符串比将其一直放在工作存储器中有什么好处?