删除正在处理的字符串中的所有特殊字符



我如何从进度4GL字符串中删除所有特殊字符?

我想这取决于你对特殊字符的定义。

可以用REPLACE删除任何字符。只需将replace的to-string部分设置为blank(")。

语法:

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"字符,如换行,bell等,您可以将REPLACE与CHR函数一起使用。

基本语法(你也可以添加一些关于代码页的信息,但很少需要):

CHR(expression)

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:将任意数据类型的值转换为字符值

此函数将根据当前排序规则替换字符。

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.

此函数将删除除字母或数字以外的任何内容(根据您的意愿调整)。

/* remove any characters that are not numbers or letters */
FUNCTION alphanumeric RETURN CHARACTER
    (lch_string AS CHARACTER).
DEFINE VARIABLE lch_newstring AS CHARACTER   NO-UNDO.
DEFINE VARIABLE i AS INTEGER     NO-UNDO.
DO i = 1 TO LENGTH(lch_string):
    /* check to see if this is a number or letter */
    IF (ASC(SUBSTRING(lch_string,i,1)) GE ASC("1") 
        AND ASC(SUBSTRING(lch_string,i,1)) LE ASC("9"))
    OR (ASC(SUBSTRING(lch_string,i,1)) GE ASC("A") 
        AND ASC(SUBSTRING(lch_string,i,1)) LE ASC("Z"))
    OR (ASC(SUBSTRING(lch_string,i,1)) GE ASC("a") 
        AND ASC(SUBSTRING(lch_string,i,1)) LE ASC("z"))
    THEN
        /* only keep it if it is a number or letter */
        lch_newstring = lch_newstring + SUBSTRING(lch_string,i,1).
    
END.
RETURN lch_newstring.
END FUNCTION.

或者直接使用regex

System.Text.RegularExpressions.Regex:Replace("Say,Hi!", "[^a-zA-Z0-9]","")

相关内容

  • 没有找到相关文章

最新更新