2014-09-16 2 views
1

Я хочу сканировать источник из программы RPGLE, но есть проблема. Я объясняю проблему ниже. Источник является:Как сканировать источник программы RPGLE?

fTcsprefix if e    disk rename(tcsprefix:testpr) 
f          prefix (@)  

Я хочу, чтобы сканировать PREFIX ключевое слово, если оно существует в исходном коде. Но при сканировании оно находится в имени формата записи. Как я могу избежать этого?

Я использую:

**C 'PREFIX'  SCAN SRCDTA  S1** 

ответ

1

сканированию для 'PREFIX', то есть, с начальным пробелом. Если вы не можете гарантировать, что всегда существует пробел после ключевого слова PREFIX, вы также не можете полагаться на конечное пространство в строке поиска. (Вы можете попробовать его.)


Для более обширного тестирования:

Если стандарты кодирования не поддерживают ясный синтаксис, вам необходимо расширить логику. Это утверждение находит где PREFIX найдено:

C 'PREFIX'  SCAN SRCDTA  S1 

Он хранит местоположение в S1. Затем вы можете использовать S1, чтобы проверить, содержит ли позиция перед пробелом или «)». Если вы найдете какие-либо другие символы, которые действительны, логику можно расширить, чтобы проверить наличие допустимых символов. Кроме того, вы знаете, что PREFIX длиной шесть символов, так что вы можете проверить символ в позиции S1+6, чтобы увидеть, если это пустой или «(» или другой допустимый символ.

Когда ваша программа находит PREFIX и он также находит что оба предшествующих и последующих символа приемлемы, он должен знать, что он нашел совпадение, которое подходит.

Когда SCAN находит совпадение, вы, вероятно, должны передать исходную строку подпроцедуре, которая проверяет предыдущие и последующие символы и возвращает значение индикатора. Индикатор сообщит вашей программе, если это хорошо соответствует или нет.

Вы также можете не использовать SCAN. Используйте вместо этого BIF %scan() и используйте стиль кодирования свободной формы.

+0

Но если PREFIX выглядит следующим образом FTCSPREFIX IF E DISK RENAME (TCSPREFIX: TESTPR) PREFIX (@). Будет ли оно сканироваться точно? –

1

Вы можете использовать процедуры регулярного выражения ILE C от ILE RPG.

http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_71/rtref/regexh.htm%23regexh
Обратите внимание, что библиотека RE в IBM i соответствует стандартам POSIX.
http://www.regular-expressions.info/posix.html

Вот статья, на которую следует обратить внимание; в комплекте с источником, содержащим прототипы, которые вам нужно будет назвать функциями.
http://iprodeveloper.com/rpg-programming/validate-e-mail-address-regular-expression