Ds培训:RPG-将数字DS复制到 AlphaDS

关于Ds培训的问题,在alpha ds中经常遇到, 我想将 Numeric DS 复制到 Alpha DS。第一个想法是 MOVEA,但这似乎不起作用。错误:“MOVEA 的因子 2 或结果字段不引用数组”

我想将 Numeric DS 复制到 Alpha DS。第一个想法是 MOVEA,但这似乎不起作用。错误:“MOVEA 的因子 2 或结果字段不引用数组”

D Alpha       DS                                                 
D  TBR1                         5A                                  
D  TBR2                         5A                                  
D Num         DS                                                 
D  TBR1N                        5  0                                
D  TBR2N                        5  0                                
C                   MOVEA     Alpha     Num
9

RPG 中似乎有很多关于数据结构的误解。在过去的一个月里有两个问题,因为有人认为他可以强制数据结构是 UCS2 值。它不会工作。数据结构是使用作业的 CCSID 的固定长度字符字段。如果您使用数据结构名称作为变量,那么它具有某种内部结构的事实是没有意义的。

这似乎与固定形式 RPG 将字段隐式定义为字符或数字而不给它数据类型的能力有关。独立字段和数据结构对此情况的处理不同。请参见下表:

field type  | decimal positions | Implicit data type
----------------------------------------------------
stand alone |    blank          |   A
            |  not blank        |   P
----------------------------------------------------
data        |    blank          |   A
 structure  |  not blank        |   S

所以对于你的定义:

D Alpha       DS                                                 
D  TBR1                         5A                                  
D  TBR2                         5A                                  
D Num         DS                                                 
D  TBR1N                        5  0                                
D  TBR2N                        5  0

Alpha是否为 CHAR (10)
TBR1是否为 CHAR (5)
TBR2是否为 CHAR (5)
Num是否为 CHAR (10)
TBR1N是否为 ZONED (5)
TBR2N

没有数组,所以你不能在两边使用MOVEA,但是MOVEL将工作分配AlphaNum像这样:

C                   MOVEL     Alpha     Num

话虽如此,你不应该再使用 Fixed Form 了。所有受支持的 OS 版本都支持 Free Form RPGIV,你可以通过使用它获得一些优势。特别是在这种情况下,隐式数值数据类型在 Free Form 中是不可能的。所以你会有这样的事情:

dcl-ds Alpha Qualified;
  tbr1       Char(5);
  tbr2       Char(5);
end-ds;
dcl-ds Num   Qualified;
  tbr1n      Zoned(5:0);
  tbr2n      Zoned(5:0);
end-ds;
Num = Alpha;

数据类型现在是显式的,您甚至可以限定您的数据结构,以便您可以这样说:

num.tbr1n = %dec(alpha.tbr1:5:0);
4

首先,没有所谓的“数字 DS”。

RPG 中的数据结构只是字节的集合。由于编译器没有 BYTE 类型,它只是将其视为 SBCS 字符。

你的问题是,你的数字子字段默认为包装十进制。所以你的 DS 命名为 NUM 只有 6 个字节。

将它们定义为 ZONED,这样两个 DS 都将是 10 个字节。

 D Alpha           DS                                                 
 D  TBR1                          5A                                  
 D  TBR2                          5A                                  
 D Num             DS                                                 
 D  TBR1N                         5S 0                                
 D  TBR2N                         5S 0
   Num = Alpha;

但是这种代码在 RPGIV 中真的不是一个好主意。

为什么你不能明确地转换?

tbr1n = %dec(tbr1:5:0);
tbr2n = %dec(tbr2:5:0);

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(867)
Miu i:Jquery“如果这个和如果那个”然后这样做
上一篇
香港服务器怎么访问国外网站:使用 cPanel访问旧服务器上的网站
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(77条)