我使用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
我尝试了以下但没有成功:
以及其他一些我甚至不记得的事情因为我已经在这几天挣扎了
有什么想法吗? 提前谢谢你!
答案 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 ...