我想扫描RPGLE程序的源代码,但出现了问题。我在下面解释这个问题。来源:
fTcsprefix if e disk rename(tcsprefix:testpr)
f prefix (@)
如果PREFIX关键字存在于源代码中,我想扫描它。但当扫描时,会在记录格式名称中找到它。我该如何避免这种情况?
我正在使用:
**C 'PREFIX' SCAN SRCDTA S1**
尝试扫描'PREFIX',即使用前导空格。除非您能保证PREFIX关键字后面总是有一个空格,否则您也不能依赖于搜索字符串中的尾随空格。(你可以试试。)
用于更广泛的测试:
如果编码标准不能保持清晰的语法,则需要扩展逻辑。此语句查找PREFIX
的位置:
C 'PREFIX' SCAN SRCDTA S1
它将位置存储在S1
中。然后,您可以使用S1
来测试之前的位置是否包含空白或")"。如果发现任何其他有效字符,则可以扩展逻辑以测试添加的有效字符。此外,您知道PREFIX
有六个字符长,所以您可以测试S1+6
位置的字符,看看它是空白还是"("或其他有效字符。
当程序找到PREFIX
,并且发现前面和后面的字符都可以接受时,它应该知道它找到了一个匹配项。
当SCAN
找到匹配项时,您可能应该将源行传递给一个子过程,该子过程测试前面和后面的字符并返回一个指示符值。指示器会告诉你的程序是否匹配。
您也可以考虑根本不使用SCAN
。请改用%scan()
BIF,并使用自由格式的编码样式。
您可以使用ILE RPG中的ILE C运行时正则表达式过程。
http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_71/rtref/regexh.htm%23regexh
请注意,IBMi上的RE库遵循POSIX标准
http://www.regular-expressions.info/posix.html
下面是一篇文章;完整的源代码包含调用函数所需的原型
http://iprodeveloper.com/rpg-programming/validate-e-mail-address-regular-expression