ibm-midrange - 如何在 RPGLE 中获取角色的 EBCDIC 值?

标签 ibm-midrange rpgle rpg

我需要某种方法将 RPGLE 中的单个字符转换为整数 - 有没有人知道一个好方法?它必须适用于所有可能的输入,并且理想情况下为每个输入提供不同的整数 - 至少它必须为所有常见输入提供不同的值。我并不特别关心整数是什么。在类似 C 的语言中,我会采用 ASCII 值或类似的值 - 理想情况下我想要一些与它等效的值。

说明我希望它如何工作的示例:

characterData = "Hello";
for i = 1 to %len(string);
    singleCharacter = %subst(characterData:i:1);
    number = myFunction(singleCharacter);
    dsply 'The value of ' + singleCharacter + ' is ' + %char(number);
endfor;

这将打印

H 的值为 72
e 的值为 101
l 的值为 108
l 的值为 108
o 的值为 111

但请注意,我实际上并不关心数字是什么,只是每个输入的数字都不同。

所有这些都有助于在 RPGLE 中为字符数据构建哈希函数,所以如果您知道这样做的好方法,那么这将是一个更好的答案。

最佳答案

创建覆盖字段位置的数据结构。第一个字段位于位置 1,是一个 1 字节的字符字段。第二个字段也位于位置 1,是一个 1 字节的无符号整数字段。将有问题的字符移动到字符字段,然后您的无符号整数字段将具有您需要的 EBCDIC 值。下面是一个例子:

DConversion       DS
D CharacterValue          1      1A
D EBCDICValue             1      1U 0

/free
 CharacterValue = 'A';
 //Do something with EBCDICValue
/end-free

因为两个字段占据相同的位置,改变一个改变另一个。您的程序只是使用这两个变量以不同的方式查看内存中的同一个字节。

您可以通过拥有更大的字符字段并在同一个地方拥有一个由 1 字节无符号整数组成的数组来获得更好的效果,如下所示:
DConversionArray  DS                          
D CharacterField          1    100            
D EBCDICArray             1    100U 0 DIM(100)

/free
 CharacterField = 'We the people of the United States...';
 For I = 1 to %Len(%TrimR(CharacterField));
   X = EBCDICArray(I);
   //Do something with X
 EndFor;                                                  
/end-free

在上面的示例中,您遍历字符字段的大小并对每个 EBCDIC 值执行一些操作。

最后,如果你感觉真的很酷,您可以创建一个 1 字节的无符号整数字段并将其分配给一个指针。然后,您可以扫描程序中的任何字符或 varchar 字段,而不管其大小。对于字符字段中的每个字节,将其内存地址分配给分配给 1 字节无符号整数字段的指针。像这样:
DEBCDICValue      S              3U 0 BASED(EBCDICPointer)
DEBCDICPointer    S               *
/free
 For I = 0 to %Len(%TrimR(CharacterField))-1;
   EBCDICPointer = %Addr(CharacterField)+I;
   X = EBCDICValue;
   //Do something with X
 EndFor;
/end-free

关于ibm-midrange - 如何在 RPGLE 中获取角色的 EBCDIC 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1596488/

相关文章:

使用工作站自定义对象 (WCST) 在 iSeries 上创建 PDF 格式错误

java - IBM as400 假脱机文件读取

java - 过期密码修改失败

java - 在 RPGLE 中使用 String.format

ibm-midrange - 如何在 rpg 程序中定义一个可以在调用函数中访问的全局变量

file - AS400 文件 - 将 PF 和 LF 转换为 SQL

java - 从 Java 调用 AS400 RPG

sql - SQL插入SQLRPGLE后无法更新文件

ibm-midrange - CALLP 也是动态调用还是可以被视为 ILE RPG 中的静态调用

java - AS400/RPG 中的舍入与 Java 中的舍入