在iSeries IFS中写入变长字符串如何避免多余空格并优化性能
解决方案
多余空格的产生原因是调用Write()时第三个参数传入了固定的%Size(File_Data)(即32000字节),无论变量实际填充了多少内容,都会完整写入32000字节,未填充的尾部区域即为多余空格。
不需要逐字符写入,仅需修改Write()的第三个参数为实际有效内容长度即可,性能和原全量写入几乎一致:
// 仅去除尾部多余空格时使用%TrimR,需要同时去除首尾空格可替换为%Trim DCL-S VALID_LEN INT(10) INZ(%LEN(%TRIMR(File_Data))); CALLP Write(FileD : %ADDR(File_Data) : VALID_LEN )
如果需要完全剔除首尾所有空格后再写入,可通过临时变量中转规避%Addr不能直接作用于%Trim返回值的编译报错:
DCL-S TMP_DATA CHAR(32000); DCL-S VALID_LEN INT(10); EVAL TMP_DATA = %TRIM(File_Data); EVAL VALID_LEN = %LEN(%TRIMR(TMP_DATA)); CALLP Write(FileD : %ADDR(TMP_DATA) : VALID_LEN )
内容的提问来源于stack exchange,提问作者Nifriz
相关产品推荐
相关产品推荐

