谁能告诉我这条线是如何在免费RPG中编码的?
C MOVEL TEST TESTFELD
您可以使用强大的EVAL。 (免费评估是隐含的)
TESTFIELD =测试;
记住EVAL清除该字段然后移动新值。
给定的语句显然意味着建议以下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内联。
要扩展上面的一些答案,你可以:
%SUBST(TESTFIELD:1:%len(TEST))= TEST;
如果它们都是字符字段。或者如果TEST是数字
%SUBST(TESTFIELD:1:%len(%char(TEST)))= TEST;
使用此表格:
%SUBST(TESTFELD: 1: len ) = TEST ;
将“len”变量设置为要用TEST替换的值的长度,或者只是硬编码长度。
请参阅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/