首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RPG -将数字DS复制到Alpha DS

RPG -将数字DS复制到Alpha DS
EN

Stack Overflow用户
提问于 2018-04-06 04:25:44
回答 2查看 680关注 0票数 0

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

代码语言:javascript
复制
D Alpha       DS                                                 
D  TBR1                         5A                                  
D  TBR2                         5A                                  

D Num         DS                                                 
D  TBR1N                        5  0                                
D  TBR2N                        5  0                                

C                   MOVEA     Alpha     Num
EN

回答 2

Stack Overflow用户

发布于 2018-04-06 20:54:48

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

固定格式RPG能够隐式地将字段定义为字符或数字,而不为其提供数据类型,这似乎使这一点变得复杂。独立的字段和数据结构以不同的方式处理这种情况。请参阅下表:

代码语言:javascript
复制
field type  | decimal positions | Implicit data type
----------------------------------------------------
stand alone |    blank          |   A
            |  not blank        |   P
----------------------------------------------------
data        |    blank          |   A
 structure  |  not blank        |   S

因此,对于您的定义:

代码语言:javascript
复制
D Alpha       DS                                                 
D  TBR1                         5A                                  
D  TBR2                         5A                                  

D Num         DS                                                 
D  TBR1N                        5  0                                
D  TBR2N                        5  0

Alpha是字符(10)

TBR1为CHAR(5)

TBR2为CHAR(5)

Num是字符(10)

TBR1N已分区(%5% 0)

TBR2N已分区(%5% 0)

由于没有数组,所以您不能在两端使用MOVEA。但是MOVEL可以像这样将Alpha赋值给Num

代码语言:javascript
复制
C                   MOVEL     Alpha     Num

也就是说,你不应该再使用固定形式了。所有受支持的操作系统版本都支持自由形式的RPGIV,使用它可以获得一些优势。具体到这种情况,隐式数字数据类型在自由格式中是不可能的。所以你会有这样的东西:

代码语言:javascript
复制
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;

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

代码语言:javascript
复制
num.tbr1n = %dec(alpha.tbr1:5:0);
票数 9
EN

Stack Overflow用户

发布于 2018-04-06 04:51:52

首先,没有“数字DS”这回事。

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

您的问题是您的数值子字段默认为压缩小数。所以名为NUM的DS只有6个字节。

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

代码语言:javascript
复制
 D Alpha           DS                                                 
 D  TBR1                          5A                                  
 D  TBR2                          5A                                  

 D Num             DS                                                 
 D  TBR1N                         5S 0                                
 D  TBR2N                         5S 0

   Num = Alpha;

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

为什么不能显式转换?

代码语言:javascript
复制
tbr1n = %dec(tbr1:5:0);
tbr2n = %dec(tbr2:5:0);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49680958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档