У меня была такая же проблема. поэтому я написал свою собственную процедуру RPG, которая делает это для меня:
**
**
D************************************************************************
D* *
D* Procedure 'skReplace' -- Replaces text in 'text' string, *
D* searching for 'find' string, *
D* replacing with 'new' string. *
D* All occurances are replaced, not just one. *
D* Parameters: @txt = 'text' string *
D* @fnd = 'find' string *
D* @new = 'new' string (that replaces 'find' in 'source') *
D* *
D* Update history: *
D* 2013-04 Created by Shawn Kovac. *
D* *
D************************************************************************
D*
P skReplace B
D skReplace PI 999A Varying
D @txt 999A VALUE Varying
D @fnd 999A VALUE Varying
D @new 999A VALUE Varying
D @pos S 3 0
D*
/free
if (%Len(@fnd) = 0); // text to find cannot be empty.
return @txt;
endif;
@pos = 1;
dou (@pos = 0);
@pos = %scan(@fnd: @txt: @pos);
if (@pos > 0);
@txt = %replace( @new : @txt : @pos : %Len(@fnd) );
@pos = @pos + %Len(@new);
if (@pos > %Len(@txt));
@pos = 0;
endif;
endif;
enddo;
return @txt;
/end-free
P skReplace E
**
**
Поскольку RPG очень требователен к тому, в каких столбцах находятся элементы, при копировании и повторном использовании этого кода может потребоваться настроить вставленный текст, поэтому перед «D *», «**» и «5» должно быть 5 пробелов P skReplace ... '. Шесть пробелов перед '/ free'. И весь код между строками '/ free' имеет 7 или более пробелов.
Я приветствую любые предложения по улучшению этого кода.
У меня также есть процедуры для левого, правого и среднего, если кто-то хочет их. Просто напишите мне, если вы это сделаете. Я рад поделиться ими. Я знаю, что в RPG есть функция «% subst», но многие языки программирования придирчивы, как будто они выдают ошибку, если параметры неверны. Мои вместо этого дают больше гибкости, например, Left ('aoeu', -1) возвращает 'aoe' (1 символ, не являющийся полной строкой), а Right ('aoeu', -1) возвращает 'oeu' (правая часть строки после 1 символа удаляется). Моя процедура Mid также допускает отрицательную начальную позицию, индексируя также и с конца строки, что мне показалось полезным. Но они бесплатны для всех, кто хочет потратить время, чтобы попросить у меня их.
Счастливого кодирования!