RPP COBOL - 重新定义变量

时间:2017-10-26 19:23:36

标签: types cobol

我使用RPP EDI使用COBOL(它使用Eclipse作为环境)。任务很简单,但由于某种原因,它不能在RPP中工作(如果我直接在大型机中使用COBOL,它确实有效)。 我需要为表的变量(称为:文件序列号)添加+1。表的字段设置为Char(谁知道原因?),序列号的临时变量定义为Numeric:

DB30-BA3511         PIC X(10) ->this is the DB field
WS-FILE-SEQ-NUM     PIC 9(10) ->this is the temporary variable

任务很简单,几乎可以在所有语言中使用,但由于某些原因,它的行为并不像预期的那样。 这就是它在RPP中的作用: 当我将DB字段值(当前为DB中的' 1')移动到局部变量WS-FILE-SEQ-NUM时,它将保存为1000000000而不是0000000001,因此当我添加+1结果时是:1000000001而不是0000000002(或只是2)

MOVE        DB30-BA3511 TO WS-FILE-SEQ-NUM
ADD         +1 TO WS-FILE-SEQ-NUM
MOVE        WS-FILE-SEQ-NUM TO DD30-BA3511

我尝试了以下但没有成功:

  • 使用REDEFINES
  • 我尝试使用PIC S9(有和没有COMP)
  • ,而不是使用PIC 9

以及其他一些我甚至不记得的事情因为我已经在这几天挣扎了

有什么想法吗? 提前谢谢你!

2 个答案:

答案 0 :(得分:1)

布鲁斯是正确的,你只需要移动数字数据。首先,您需要确定数据是否在前面或后面填充空格。根据你到目前为止所说的,我会说间距在后面。尽管如此,这两个案例都是一个例子:

领先空间

DB30-BA3511         PIC X(10).
WS-FILE-SEQ-NUM     PIC 9(10).
WS-FORMATTED-SEQ    PIC ZZZZZZZZZZ.
WS-SPACE-COUNT      PIC 99 COMP.

INSPECT DB30-BA3511 TALLYING WS-SPACE-COUNT FOR LEADING SPACES
MOVE DB30-BA3511(WS-SPACE-COUNT + 1:) TO WS-FILE-SEQ-NUM 
ADD 1 TO WS-FILE-SEQ-NUM
MOVE WS-FILE-SEQ-NUM TO WS-FORMATTED-SEQ
MOVE WS-FORMATTED-SEQ TO DB30-BA3511

这将获得前导空格计数,然后仅将前导空格后的数据移动到数字字段。之后,我们将1添加到数字字段,然后将其移动到格式化的数字字段。这将在最终将其移回原始字母数字字段之前删除前导零。尾随空格的过程几乎相同

尾随空格

DB30-BA3511         PIC X(10).
WS-FILE-SEQ-NUM     PIC 9(10).
WS-FORMATTED-SEQ    PIC ZZZZZZZZZZ.
WS-SPACE-COUNT      PIC 99 COMP.
WS-LENGTH           PIC 99 COMP.

INSPECT DB30-BA3511 FUNCTION REVERSE TALLYING 
   WS-SPACE-COUNT FOR LEADING SPACES
COMPUTE 
   LENGTH = 10 - WS-SPACE-COUNT
END-COMPUTE
MOVE DB30-BA3511(1:WS-LENGTH) TO WS-FILE-SEQ-NUM 
ADD 1 TO WS-FILE-SEQ-NUM
MOVE WS-FILE-SEQ-NUM TO WS-FORMATTED-SEQ
MOVE WS-FORMATTED-SEQ TO DB30-BA3511

答案 1 :(得分:0)

正如西蒙所说,问题可能在于 DB30-BA3511 字段。我认为它不是1而是#34; 1" (1后跟9个空格)。将 DB30-BA3511 移动到数字字段时,空格将被解释​​为0(从内存中可能发生在主机上)。

可能的解决方案

  • 查看数据库连接定义
  • 仅移动数据:
    • 计算尾随空格的数量
    • 移动DB30-BA3511 (1:data-length) to ...