Проверка строк в Genexus RPG с помощью регулярного выражения

#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.