ILE RPG MOVEL免费格式免费RPG

问题描述 投票:1回答:5

谁能告诉我这条线是如何在免费RPG中编码的?

C                   MOVEL     TEST          TESTFELD 
ibm-midrange rpgle rpg
5个回答
5
投票

您可以使用强大的EVAL。 (免费评估是隐含的)

TESTFIELD =测试;

记住EVAL清除该字段然后移动新值。


2
投票

给定的语句显然意味着建议以下RPGIV语法:

 C                   MOVEL     TEST          TESTFELD 

据我所知,通过更新的自由格式规则迭代,[IBM i 7.2 ILE RPG]编译器不再需要/free规范/free and /end-free are ignored,因此fixed-form语句可以完全如图所示;即,不需要找到备用的OpCode或定义新的代码块来替换当前上下文中提供的MOVEL。

在对编译器进行增强之前,只需在固定格式的代码行之前使用/ end-free编译器指令,然后使用/ free编译器指令遵循该固定格式的代码行以重新建立自由格式;再次,没有理由用自由格式重写声明:

  /end-free
 C                   MOVEL     TEST          TESTFELD 
  /free

请注意,任何单个赋值作为MOVEL的替代,可能需要比一个Op-Code单独影响更强大的功能。这是因为MOVEL采用隐式转换,而其他操作代码可能不会提供旧的固定格式操作码的完整支持功能[甚至可能不是相同的结果]。该文件表明,MOVEL (Move Left)有许多可能的替代品

奇怪的是,%SUBST不是上述替换中的一个,但对于具有固定长度字符串变量的最简单方案,如用户2338816所示的%SUBST中的接收变量很可能是所有需要的。请参阅%SUBST built-in function as result

保留固定格式opCode的替代方法是将工作移动到一个过程中,即使使用相同的opCode,也可以执行相同的代码。如果转换代码,这可能是一个必要的选择,同时打算消除内联到转换代码的所有固定格式规范;在程序中使用固定格式的opCode可能并不理想,但为了确保从复杂的opCode获得绝对相同的效果,这通常是最安全的,而不是试图编码所有细微差别。虽然可以说是另一种选择,因为/ COPY或/ INCLUDE并不比固定格式更漂亮[显然或者至少看似不合适,符合自由格式计算规范],这些编译器指令都不可能最好只保留旧的opCode内联。


2
投票

要扩展上面的一些答案,你可以:

%SUBST(TESTFIELD:1:%len(TEST))= TEST;

如果它们都是字符字段。或者如果TEST是数字

%SUBST(TESTFIELD:1:%len(%char(TEST)))= TEST;


1
投票

使用此表格:

%SUBST(TESTFELD: 1: len ) = TEST ;

将“len”变量设置为要用TEST替换的值的长度,或者只是硬编码长度。


1
投票

请参阅The Essential Guid To Free-Format RPG by Bryan Meyers

本文介绍了将Move,MoveL和MoveA操作码转换为自由格式所涉及的问题。

随着编译器的增强,删除/释放C-Spec语句的要求并不具有侵入性。

我的建议:

保留旧的现有MOVE操作码,但新代码应以自由格式编写。

最后的想法:

请查看http://www.projex.com/提供的“UPGRPGSRC - 升级和现代化RPG源到RPGLE / Free”的FREEEE。他们还为IBMi提供了其他有用的工具。

请注意,在发布此答案时,ProjeX网站已关闭。 https://web.archive.org/web/20160320171335/http://www.projex.com/

© www.soinside.com 2019 - 2024. All rights reserved.