#rpgle #genexus
#rpgle #genexus
Вопрос:
У нас есть переменная «string» / Character (15), которая нам нужна для проверки того, что символы с 5 по 10 являются числами. Это довольно просто при написании необработанного кода и использовании регулярных выражений или при использовании Genexus для создания объектов Java, но мы используем Genexus и создаем для RPG IV.
Я относительно новичок (менее года) на этой платформе, поэтому я не уверен, как это сделать. Мне сказали, что функциональность регулярных выражений в используемой нами версии Genexus не работает для RPG. Мое предложение извлечь подстроку и получить из нее значение val () вызовет ошибку, если это не все числа, что приведет к остановке программы. По-видимому, нет способа корректно обработать ошибку в нашей версии Genexus / RPGLE.
Есть ли у кого-нибудь опыт работы с этим? Может ли кто-нибудь указать нам правильное направление, используя Genexus для RPG, для решения этой проблемы?
Ответ №1:
Вы можете написать процедуру, которая выполняет проверку «вручную».
т. е.:
amp;str = '1234567890ABCDEF' // this would be the input string
amp;isValid = 1 // this would be the output
if len(amp;str) > 9
for amp;index = 5 to 10
amp;char = substr(amp;str, amp;index, 1)
do case
case amp;char = '0'
case amp;char = '1'
case amp;char = '2'
case amp;char = '3'
case amp;char = '4'
case amp;char = '5'
case amp;char = '6'
case amp;char = '7'
case amp;char = '8'
case amp;char = '9'
otherwise
amp;isValid = 0
exit
endcase
endfor
else
amp;isValid = 0
endif
Комментарии:
1. как всегда, перебор и возврат к основам не подводят. Я был сосредоточен на каком-то «элегантном» решении, но это работает надежно.
2. @CoMoG-Dawg
%CHECK
возвращает первую позицию базы строк, которая содержит символ, который не отображается в компараторе строк. Если все символы в base также отображаются в comparator, функция возвращает0
.3. Чтобы сопоставить то, что сказал @Nifriz: isValid = (%check(‘0123456789’ :%subst(myString :5:6)) = 0);
4. похоже, что операция %CHECK относится к RPG и недоступна в используемой нами версии Genexus.