如何从Progress 4GL中的字符串中删除所有特殊字符?
答案 0 :(得分:7)
我想这取决于你对特殊字符的定义。
您可以使用REPLACE
删除任何字符。只需将替换的to-string部分设置为空白(“”)。
语法:
REPLACE(source-string,from-string,to-string)
示例:
DEFINE VARIABLE cOldString AS CHARACTER NO-UNDO.
DEFINE VARIABLE cNewString AS CHARACTER NO-UNDO.
cOldString = "ABC123AACCC".
cNewString = REPLACE(cOldString, "A", "").
DISPLAY cNewString FORMAT "x(10)".
您可以使用REPLACE删除完整的匹配字符串。例如:
REPLACE("This is a text with HTML entity &", "&", "").
处理“特殊字符”可以通过多种方式完成。如果您指的是特殊的“ASCII”字符,如换行符,铃声等,您可以将REPLACE与CHR功能一起使用。
基本语法(您可以添加一些有关代码页的信息,但这很少需要):
CHR(表达)
expression:一个表达式,它产生一个要转换为字符值的整数值。 (ASCII数字值)。
因此,如果你想从你可以做的文本中删除所有瑞典字母Ö:s(ASCII 214):
REPLACE("ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ", "Ö", "").
或
REPLACE("ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ", CHR(214), "").
将它们放在一起你可以构建一个不需要的字符数组并删除字符串中的所有字符。例如:
FUNCTION cleanString RETURNS CHARACTER (INPUT pcString AS CHARACTER):
DEFINE VARIABLE iUnwanted AS INTEGER NO-UNDO EXTENT 3.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
/* Remove all capital Swedish letters ÅÄÖ */
iUnwanted[1] = 197.
iUnwanted[2] = 196.
iUnwanted[3] = 214.
DO i = 1 TO EXTENT(iUnwanted):
IF iUnwanted[i] <> 0 THEN DO:
pcString = REPLACE(pcString, CHR(iUnwanted[i]), "").
END.
END.
RETURN pcString.
END.
DEFINE VARIABLE cString AS CHARACTER NO-UNDO INIT "AANÅÅÖÖBBCVCÄÄ".
DISPLAY cleanString(cString) FORMAT "x(10)".
其他可能有用的功能:
SUBSTRING
:返回字符串的一部分。也可用于修改它。ASC
:与CHR相反,但反过来 - 显示角色的ASCII值。INDEX
:返回字符串中字符的位置。R-INDEX
:与INDEX一样,但从右向左搜索。STRING
:将任何数据类型的值转换为字符值。答案 1 :(得分:0)
此功能将根据当前排序规则替换字符。
function Dia2Plain returns character (input icTxt as character):
define variable ocTxt as character no-undo.
define variable i as integer no-undo.
define variable iAsc as integer no-undo.
define variable cDia as character no-undo.
define variable cPlain as character no-undo.
assign ocTxt = icTxt.
repeat i = 1 to length(ocTxt):
assign cDia = substring(ocTxt,i,1)
cPlain = "".
if asc(cDia) > 127
then do:
repeat iAsc = 65 to 90: /* A..Z */
if compare(cDia, "eq" , chr(iAsc), "case-sensitive")
then assign cPlain = chr(iAsc).
end.
repeat iAsc = 97 to 122: /* a..z */
if compare(cDia, "eq" , chr(iAsc), "case-sensitive")
then assign cPlain = chr(iAsc).
end.
if cPlain <> ""
then assign substring(ocTxt,i,1) = cPlain.
end.
end.
return ocTxt.
end.
/* testing */
def var c as char init "ÄëÉÖìÇ".
disp c Dia2Plain(c).
def var i as int.
def var d as char.
repeat i = 128 to 256:
assign c = chr(i) d = Dia2Plain(chr(i)).
if asc(c) <> asc(d) then disp i c d.
end.