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