- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在从我的 Java 应用程序调用使用 COBOL 创建的 DB2 存储过程。
输入宏(类型 varchar
):
01 SP1-INPUTS.
05 FIELD-1 PIC X(03).
05 FIELD-2 PIC S9(09) COMP.
05 FIELD-3 PIC S9(15)V9(02) COMP-3.
05 FIELD-3X REDEFINES FIELD-3 PIC X(09)
FIELD-1
的值.对于其他字段,要填充压缩部分,我应该放多少个零?请参阅我在传递虚拟值时编写和混淆的代码。
String field1="abc";
String field2="000000000"; // 9 zeroes, correct?
String field3="00...0" // should I give 18 zeroes or 9 zeroes?
最佳答案
COBOL 没有字符串,它有没有终止符的固定长度字段。
所以对于 FIELD-1,你有三个“字符”。 X 的 PICture 可以允许 256 个可能的位值中的任何一个,但通常包含人类可读的值。
FIELD-2 是一个二进制字段。您可以将其视为四字节整数。
但是,按照那里的定义方式,COMP,带有 S,它的最大值为 999,999,999 正,最小值为 999,999,999 负。
如果它被定义为 COMP-5,它可以包含这四个字节中所有位的完整范围。请注意,编译器选项 TRUNC(BIN) 无论如何都会将 COMP 的行为修改为 COMP-5,因此您需要与大型机方一起检查用于 TRUNC 的编译选项(其他值为 STD 和 OPT)。
在 IBM 大型机上,本地二进制字段是 Big Endian。在您的本地机器上, native 二进制值将是 Little Endian。例如,值 16906090 将存储为 X'01020304'。
FIELD-3 是压缩十进制。它有九个字节长,但每个字节包含两个十进制数字,除了包含一个数字后跟符号说明符的低位(最右边)字节(图片使用 S,所以符号应该是 C 表示正和D 为负数,基数为 16)。有一个隐含的小数点( V
)和两个小数位。
FIELD-3X 是另一个 X 字段。它可以再次包含每个字节中的任何位模式。您需要知道该字段的预期用途是什么(从名称中甚至没有丝毫线索,就像其他人一样,这是一种糟糕的做事方式)。
设计是错误的。将二进制和压缩十进制字段从大型机发送到其他地方是完全疯狂的,反之亦然。如果 all 字段被定义为 X 或 9 而没有 COMP 或 COMP-3 的 USAGE(隐含),那么您将有一个非常轻松的旅程。
最终定义中缺少一个必需的句号/句点,但这可能是一个pasto。
01 SP1J-INPUTS.
05 a-meaningful-name PIC X(03).
05 another-meaningful-name PIC S9(09)
SIGN LEADING SEPARATE.
05 a-third-meaningful-name PIC +9(15).9(02).
05 yet-annother-meaningful-name
REDEFINES a-third-meaningful-name
PIC X(19).
.
是实际的小数点,而不是隐含的小数点,带有 V。
ABC-123456789+123456789012345.67
MOVE FIELD-1 TO a-meaningful-name
MOVE FIELD-2 TO another-meaningful-name
MOVE FIELD-3 TO a-third-meaningful-name
MOVE a-meaningful-name TO FIELD-1
MOVE another-meaningful-name TO FIELD-2
MOVE a-third-meaningful-name TO FIELD-3
关于COBOL comp 和 comp-3 字段的 Java 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30122554/
我编写了以下程序,我很困惑为什么在编译程序时出现错误,说 A-COL(1,1) 不是数值,而显示 A-COL(1,1) 给我 1。 IDENTIFICATION DIVISION. PRO
需要将 4 个字符串连接到 cobol 中的目标变量。 喜欢, 01 WS-S1 X(10) VALUE "HI ". 01 WS-S2 X(10) VALUE "HOW ". 01 WS-S3 X(
大家好,这里有一大堆问题。我已经完成了一个我必须为大学作业做的程序,但是当我运行它时,输出几乎没有显示它应该显示的内容。这只发生在我运行它时。如果我在整个过程中按住 F11 到 STEP,它会显示预期
正如标题所暗示的,我正在做一个软件来计算和验证插入的数字是否是一个快乐的数字(或不是)。在 COBOL 语言中(有关什么是快乐数字的引用 https://mathworld.wolfram.com/H
为什么我不能在 COBOL 中执行此嵌套执行循环? 如果我把END-PERFORM。在任何一行中比我在 EXIT PROGRAM 之前拥有最后一个的地方早 - 它有效。但是我需要程序每次都显示 INP
我知道许多 COBOL 编译器确实允许嵌套副本(具有不同的深度),但我没有找到任何“官方”规则。问题: 是否有明确允许或禁止嵌套副本的 COBOL 标准? 有没有不允许嵌套copybooks的COBO
我对 COBOL 很陌生。我正在学习 Micro Focus 附带的教程,但似乎无法让示例正常工作。我正在尝试打印 -123.45 并且我不断收到以下信息, 我查了很多帖子,都没有解决我的问题。我在
COBOL 中是否有一种“等待”功能? 我写了一个计算器,为了让它更 50 多岁,我打印了“计算”。 “计算..” ecc 例如: DISPLAY "SECOND
好的,所以我正在做作业,但是随后我发现我被要求添加页码并为每4条记录更改页数。由于这是一门在线课程,我认为讲座视频中没有关于页码的任何信息。所以主要的问题是 要添加包含日期和页码的标题, 每页打印4条
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
Cobol 程序: PROGRAM-ID. SCHPROG. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION.
我正在使用屏幕部分在 Cobol 中开发一个系统,当我在另一个程序中创建的菜单中选择一个选项时,我无法调用客户注册程序。我正在使用带有 GnuCOBOL 编译器的 opencobol。 CALL "A
我正在构建一个 COBOL 程序来计算最多 15 个整数的平均值。执行显示的数字远大于预期,并带有很多尾随零。以下是相关代码: Data Division. Working
我正在开发一个 Wrapper/Bridge COBOL 程序,该程序处理程序调用并执行横切操作,如日志记录、安全检查等。 主要动机是检查消费者程序的安全访问是否有权调用生产者程序。 设桥接 COBO
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我有一项将 COBOL 代码转换为 .NET 的任务。有没有可用的转换器?我试图在高层次上理解 COBOL 代码。我无法理解 COBOL 代码。有流程图生成器吗?我很感激任何帮助。 谢谢.. 最佳答案
我有以下代码: 01 W-IX1 PIC 9(8) VALUE ZERO COMP-4. 01 W-INPUT-AMNT
我是 COBOL 编程的新手,所以我试图制作一个示例计算器,但我无法让它工作。 calc 进入无限循环,我没有找到原因,我什至尝试复制类似的代码,但没有成功。那么,这是 OpenCobolIDE 问题
我只是在学习 COBOL;我正在编写一个简单地回显用户输入的程序。我已经定义了一个变量: User-Input PIC X(30). 后来当我接受用户输入,然后显示用户输入“加上一些额外的文本”时,它
是否可以在Cobol程序中获取并显示当前行号?例如,C 允许通过以下方式进行: ... printf("Current line = %d\n", __LINE__); ... 最佳答案 简答:否。
我是一名优秀的程序员,十分优秀!