你能不能给我一些关于查看文件的想法如何区分RPG字帖和程序?
例如,在c中,如果文件中有main,则表示它可以用作程序。
提前致谢。
答案 0 :(得分:2)
这是一个有趣的问题......通常非常明显。
我想快速回答的是,复印书籍不会包含不同类型的规格。 RPG IV程序可以具有H,F,D,I,C,O和P规范,或它们的自由形式等价物。 (规范类型由固定格式源的第6列中的字母确定)。订单很重要,您无法混合类型。如果您正在查看只有一种规格类型的来源,那么它可能被设计为副本。由于可执行代码包含在C(计算)和/或P(过程)规范中,因此没有任何C或P规范的源是副本。虽然在副本中使用C或P规格通常是不好的做法,但RPG确实允许它并且我已经看过它。但同样,复制书中唯一的内容就是C或P规格。
编辑 您可以拥有一本副本,例如F& D规格,但它可以包含的唯一地方是在任何D规格之前程序的F规格的末尾。你可以有一个使用编译器指令/IF DEFINED
的副本来控制哪个部分字帖包括在哪里。
EDIT2 结果证明IBM增加了混合F& amp;的能力版本7.1及更高版本中的D规格。只有F& S的来源成员D规格将是一本字帖所以简短的答案就变成了,具有定义(H,F,D,I,O)规格和可执行(C& P)规格的源成员被设计为被编译。
答案越长,RPG程序也有“主”。最初,唯一的选择是现在所谓的“循环主”。 IE浏览器。 “主要”过程是内置于RPG程序中的隐式生成的"cycle"代码。
然后是RPG IV和ILE。 IBM添加了控件规范关键字NOMAIN
。
H NOMAIN
//or in freeform
ctl-opt nomain;
这导致了一个没有“主”程序的不可执行模块;通常由编译器为“循环”生成的代码被省略。生成的* MODULE对象需要与另一个提供主过程的* MODULE绑定到* PGM对象。
或者它可以与零个或多个其他* MODULE对象绑定到* SRVPGM对象中; * SRVPGM只是程序的集合。把它们想象成Windows DLL。
然后IBM增加了“线性主”RPG IV程序的选项。
H MAIN(MYMAIN)
// or freeform
ctl-opt main(MYMAIN);
因此,主要程序是您指定的任何程序。生成的“循环”代码再次从可执行文件中删除。
因此,NOMAIN
或MAIN
关键字的存在将表明源成员被设计为被编译;假设还有更多来源。有可能存在“标准选项”包含文件,其中包括其中一个。
缺少这两个关键字表示您正在处理循环主文件或包含文件。
如果它是一个循环主程序并且它将参数作为输入,您将能够看到输入参数列表
//Fixed format, old school RPG III, IV
C *ENTRY PLIST
C PARM LCMPNO 2
C PARM LNTACT 1
// fixed format, RPG IV using a "Procedure Interface (PI) to replace *ENTRY PLIST
D CheckDate PI
D lDateIs 4a
// free format RPG IV
dcl-pi CheckDate;
lDateIs char(4);
end-pi;
请注意,使用PI而不是*ENTRY PLIST
的“循环主程序”和线性主程序之间源代码的主要区别在于线性主程序被显式过程定义所包围。
// linear main
h main(CHECKDATE)
p CheckDate b
d CheckDate PI
d lDateIs 4a
//do something
*INLR = *ON
return;
p CheckDate e
//cycle main with PI
d lDateIs 4a
//do something
*INLR = *ON
return;
答案 1 :(得分:1)
从7.1开始(使用2013年的自由格式PTF),您可以混合使用F和D规格(即使是固定格式代码)。
答案 2 :(得分:0)
;with cte as
(
select ID, Rank,[AName],ROW_NUMBER() over (partition by ID order by [AName] desc) as RowNumber
from TableA
)
select c.ID,c.Rank,c.AName,t1.BName from cte c
join TableB t1 on c.id = t1.id
where RowNumber = 1
答案 3 :(得分:0)
副本应该更像是C或C ++中的头文件。不幸的是,它没有那个有用的.h扩展器来保持分离。商店标准在这里很有帮助。您可以将副本保存在单独的源文件中,甚至可以使用特定前缀或后缀命名它们以指示它是副本。我在copybooks上看过像_或_h这样的后缀,其基本名称与它作为头文件的源成员相同。或者在副本和程序源存储在不同的源文件中的情况下,程序及其头文件将具有相同的名称。
与C类似,RPG4可以包含可以编译成程序的源文件和可以编译成模块的源文件(模块是IBM i术语,非常类似于C编译器在其他文件上生成的未链接.obj文件平台)或程序是完全链接的可执行文件。为了将RPG源编译为完全链接的可执行文件,它需要一个主程序。查尔斯解释了h规格的主要和非主要关键词。如果程序源没有nomain关键字,则可以将其生成为完全链接的程序。但要小心,尽管它并不常见,但h规格可以在其他地方,比如在他们自己的字帖或数据区中。