题
我的变量定义为:
D content 1280A CONST
我需要找到 "
, &
, '
, <
, >
字符并替换为:
"
, &
, '
, <
, , 和 >
;分别。
我已经看到了该语言中的一些XML功能,但这些功能似乎并不是我需要的。但是我可能错了,所以我在问。
使用RPGLE,Freeform。
解决方案: :也许不是很rpg,但起作用
P encode B
D PI 1280A
D content 1280A CONST
D outStr S 1280A
D strDsp S 50A
/free
outStr = %trim(content);
outStr = replaceAll('&' : '&' : outStr);
outStr = replaceAll('"' : '"' : outStr);
outStr = replaceAll('''' : ''' : outStr);
outStr = replaceAll('>' : '>' : outStr);
outStr = replaceAll('<' : '<' : outStr);
return outStr;
/end-free
P E
P*** Procedure: replaceAll ************************************
P*** IN: character to replace, replacement text, source
P*** OUT: transformed string
P replaceAll B
D PI 1280A
D character 1A CONST
D rText 10A CONST
D content 1280A CONST
D outStr S 1280A
D dspStr S 50A
D rSize S 3P 0 //replacement text size
D index S 3P 0 //cur str index
D cntSize S 3P 0 //content size
/free
rSize = %len(%trim(rText));
cntSize = %len(%trim(content));
outStr = content;
for i = 1 to cntSize; //scan starts at character 1 not 0
index = %scan(character : outStr : i);
if index = 0;
leave;
endif;
outStr = %replace(%trim(rText) : outStr : index : 1);
i = index + 1;
endfor;
return outStr;
/end-free
P E
解决方案
也许这对我来说很简单,但是仅使用内置%替换功能就足够了吗?我的意思是,您必须重复使用它,以替换您要替换的不同内容。但是,是否有任何特殊案例失败了无意识的替代者? (例如,我在考虑人们试图通过无意识地打破逗号来解析CSV的频率。对于某些数据集来说,这并不是一个好。)
其他提示
有一个%的scanrpl函数,它将用另一个字符串替换字符串的所有出现。看起来像热门票。
不隶属于 StackOverflow