如何用rpgle用不同的字段来划分和打破字



我遇到了有关sub String的问题,来自输入和存储在具有不同字段长度的目标字段中。

我有四个35a输入字段条件,如果输入行1的位置35a处的字符不是空间,并且输入行2的第一个字符不是空间,然后将输入线字段1的最后一句话移至目标字段2。SAME规则将使用第2行,3,4应用于目标字段。它也会引起错误移动输入单词之后,如果目的地字段长度没有足够长的时间存储四个输入字段。

方案1: Input 1 35A: |No. 1241,Old Klang road,  Tom Cater|  Input 2 35A: |rried ,58785 Windfall Stand  Johnan|  Input 3 35A: | Stress bay   White hall     CHIGNA| Input 4 35A: |LL ST JAMES                        |

预期结果存储到4个线目标字段,每个线路都有40a。 Destination Field 1 40A: |No. 1241,Old Klang road, Tom           | Destination Field 2 40A: |Caterrried ,58785 Windfall Stand       | Destination Field 3 40A: |Johnan Stress bay   White hall         |- The 'bay  ' world remain  Destination Field 4 40A: |CHIGNALL ST JAMES                      |

方案2: Input 1 35A: |No. 1241,Old Klang road,  Tom Cater| Input 2 35A: |rried ,58785 Windfall Stand  Johnan| Input 3 35A: | Stress bay   White hall     CHIGNA| Input 4 35A: |LL ST JAMES TAXES STATES STAND CITY|

预期结果存储到4个线目标字段,每个线路都有40a。 Destination Field 1 40A: |No. 1241,Old Klang road, Tom           | Destination Field 2 40A: |Caterrried ,58785 Windfall Stand       | Destination Field 3 40A: |Johnan Stress bay   White hall         |- The 'bay  ' world with space remain  Destination Field 4 40A: |CHIGNALL ST JAMES TAXES STATES STAND CI|- Prompt error msg as the 'TY' no enough fit in the 40 length field  

对任何帮助表示赞赏,感谢我的英语不好。

首先,当数据输入为35a时,为什么要在40a中存储?

其次,为什么您要作为多个字段而不是单个字段读取/存储?如果您使用的是5250绿屏。查看CNTFLD(续输入字段)或WRDWrap(Word Wrap)关键字。如果您使用GUI或基于Web的UI ...它应该更容易...

如果您绝对必须做您问的事情...

我将 %trim()并将所有输入字符串串成一个大型。然后循环通过..

string = %trim(Inp1) + %trim(Inp2) + %trim(Inp3) + %trim(Inp4);
searchFrom = 40;
strPos = 1;
for x = 1 to 4;
  endPos = %scanr(' ':string:searchFrom);
  destArr(x) = %subst(string:strPos:endPos);
  strPos = endPos + 1;
  searchFrom = strPos + 40;
endfor;

上面缺少任何错误检查,但应该给您这个想法。

注意: %scanr()是v7.3的新事物。如果在较早版本上,您需要构建自己的scan_rev()功能。

最新更新