最好的方法是什么?
这是一个意见问题。
INSPECT动词的REPLACING选项要求替换和替换的字符串大小相同,因此这是正确的,因为您需要用两个字符替换一个字符。这至少对IBMCOBOL是正确的。
一种方式
要做到这一点,需要遍历输入字符串并对每个字符进行类检查。比如。。。
01 Stuff.
05 in-posn pic s999 packed-decimal value +0.
05 out-posn pic s999 packed-decimal value +1.
05 in-string pic x(022) value 'GB00LOYD1023456789A1B2'.
05 out-string pic x(100) value spaces.
05 replacer pic x(002) value spaces.
perform varying in-posn from 1 by 1
until in-posn > length of in-string
if in-string(in-posn:1) alphabetic
evaluate in-string(in-posn:1)
when 'A' move '10' to replacer
when 'B' move '11' to replacer
.
.
.
when 'Z' move '35' to replacer
end-evaluate
string replacer delimited size
into out-string
pointer out-posn
end-string
else
string in-string(in-posn:1) delimited size
into out-string
pointer out-posn
end-string
end-if
end-perform
有可用的变体。您可以用几个表查找来替换求值。您可以在开始循环之前将的长度存储在字符串中。您可以存储在字符串(posn:1)中,而不是希望编译器为您这样做。
这只是徒手画,但我认为它传达了这个想法。