ILE RPG MOVEL in FREE FORMAT FREE RPG

ILE RPG MOVEL in FREE FORMAT FREE RPG

谁能告诉我这条线是如何在免费角色扮演游戏中编码的?

C                   MOVEL     TEST          TESTFELD 

使用这种形式:

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

将 "len" 变量设置为您要用 TEST 替换的值的长度,或者简单地硬编码长度。

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

 C                   MOVEL     TEST          TESTFELD 

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

在对编译器进行增强之前,只需在固定格式的代码行之前添加 /end-free 编译器指令,然后在该固定格式的代码行之后添加 /free 编译器指令以重新建立自由-形式;同样,没有理由用自由格式重写语句:

  /end-free
 C                   MOVEL     TEST          TESTFELD 
  /free

请注意,作为 MOVEL 的替代项的任何单个分配可能需要比一个 Op-Code 可以单独实现的功能更重要的功能。这是因为 MOVEL 使用隐式转换,而其他操作代码可能不会提供旧的固定形式操作代码的完整支持功能 [甚至可能不会提供相同的结果]。文档表明 MOVEL (Move Left)

有许多可能的替代品

奇怪的是 %SUBST 不是提到的替换之一,但对于具有固定长度字符串变量的最简单场景,%SUBST 中的接收变量如 user2338816[=29= 所示] 很可能是所有需要的。参考%SUBST built-in function as result

将固定格式的 opCode 保留为内联的一种替代方法是将工作转移到一个过程中,在该过程中有效地执行相同的代码,甚至使用相同的 opCode。如果转换代码,同时还打算消除内联到该转换代码的所有固定形式规范,这可能是一个必要的选择;在过程中使用固定格式的操作码可能并不可取,但要确保复杂操作码的效果完全相同,这通常是最安全的,而不是尝试针对所有细微差别进行编码。尽管可以说是另一种选择,因为 /COPY 或 /INCLUDE 并不比固定格式更漂亮 [明显或至少看起来不合适,内联到自由格式计算规范],这些编译器指令都不可能比只保留旧的内联操作码更可取。

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

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

随着编译器的增强,删除对 /free C-Spec 语句的要求不会造成干扰。

我的推荐:

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

最终想法:

查看 "UPGRPGSRC - Upgrade and Modernize RPG Source to RPGLE /Free",可从 http://www.projex.com/ 免费获得。他们还有其他适用于 IBMi 的有用工具。

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

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

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

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

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

您可以使用强大的EVAL。 (FREE 中的 eval 是隐含的)

TESTFIELD = 测试;

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