我遇到了有关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()
功能。