Проверка строк в Genexus RPG через RegEx

У нас есть переменная "string"/Character(15), которая нам нужна для проверки того, что символы с 5 по 10 являются числами. Это довольно просто при написании необработанного кода и использовании регулярных выражений или при использовании Genexus для создания объектов Java, но мы используем Genexus и строим в RPG IV.

Я относительно новичок (менее года) на этой платформе, поэтому не знаю, как это сделать. Мне сказали, что функциональность регулярных выражений в версии Genexus, которую мы используем, не работает для RPG. Мое предложение вытащить подстроку и получить ее значение val() вызовет ошибку, если это не все числа, что приведет к остановке программы. Судя по всему, в нашей версии Genexus/RPGLE нет способа изящно обработать ошибку.

У кого-нибудь есть опыт борьбы с этим? Может ли кто-нибудь указать нам правильное направление, используя Genexus для RPG, чтобы решить эту проблему?


person CoMo G-Dawg    schedule 14.03.2019    source источник


Ответы (1)


Вы можете написать процедуру, которая выполняет проверку "вручную".

i.e.:

&str = '1234567890ABCDEF' // this would be the input string

&isValid = 1              // this would be the output
if len(&str) > 9
    for &index = 5 to 10
        &char = substr(&str, &index, 1)
        do case
            case &char = '0'
            case &char = '1'
            case &char = '2'
            case &char = '3'
            case &char = '4'
            case &char = '5'
            case &char = '6'
            case &char = '7'
            case &char = '8'
            case &char = '9'
            otherwise
                &isValid = 0
                exit
        endcase     
    endfor
else
    &isValid = 0        
endif
person gusbro    schedule 14.03.2019
comment
как всегда, грубая сила и возврат к основам не подводят. Я сосредоточился на каком-то элегантном решении, но оно надежно работает. - person CoMo G-Dawg; 14.03.2019
comment
@CoMoG-Dawg %CHECK возвращает первую позицию базы строк, содержащую символ, который не отображается в компараторе строк. Если все символы в базе также появляются в компараторе, функция возвращает 0. - person Nifriz; 15.03.2019
comment
В дополнение к тому, что сказал @Nifriz: IsValid = (%check('0123456789' :%subst(myString:5:6)) = 0); - person jtaylor___; 15.03.2019
comment
похоже, что операция %CHECK — это ролевая игра, и она недоступна в используемой нами версии Genexus. - person CoMo G-Dawg; 18.03.2019