Progress 4gl 正在从字符串中删除所有特殊字符4GL

Progress 4gl 正在从字符串中删除所有特殊字符4GL,progress-4gl,openedge,Progress 4gl,Openedge,如何从正在进行4GL的字符串中删除所有特殊字符?我想这取决于您对特殊字符的定义 您可以使用REPLACE删除任何字符。只需将replace的to字符串部分设置为空(“”) 语法: 替换(源字符串、从字符串到字符串) 例如: DEFINE VARIABLE cOldString AS CHARACTER NO-UNDO. DEFINE VARIABLE cNewString AS CHARACTER NO-UNDO. cOldString = "ABC123AACCC". cNewSt

如何从正在进行4GL的字符串中删除所有特殊字符?

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

您可以使用
REPLACE
删除任何字符。只需将replace的to字符串部分设置为空(“”)

语法:

替换(源字符串、从字符串到字符串)

例如:

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("This is a text with HTML entity &", "&", "").
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)".
处理“特殊字符”有多种方法。如果您指的是特殊的“ASCII”字符,如换行符、bell等,则可以将REPLACE与CHR函数一起使用

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

CHR(表达式)

表达式:生成要转换为字符值的整数值的表达式。(ASCII数字值)

因此,如果要从文本中删除所有瑞典语字母Ö:s(ASCII 214),可以执行以下操作:

REPLACE("ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ", "Ö", "").

把这些放在一起,您可以构建一个不需要的字符数组,并删除字符串中的所有字符。例如:

REPLACE("This is a text with HTML entity &amp;", "&amp;", "").
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)".
函数cleanString返回字符(输入pcString作为字符):
将变量iUnwanted定义为整数NO-UNDO区段3。
将变量i定义为整数NO-UNDO。
/*删除所有大写瑞典语字母ÄÄÖ*/
我希望[1]=197。
我希望[2]=196。
我希望[3]=214。
i=1到一定程度(IUN期望值):
如果IUN期望[i]0,则执行以下操作:
pcString=REPLACE(pcString,CHR(iUnwanted[i]),“”)。
结束。
结束。
返回pcString。
结束。
将变量cString定义为字符NO-UNDO INIT“AANÅÅÖBBCVCÄÄ”。
显示干净字符串(cString)格式“x(10)”。
其他可能有用的功能:

  • 子字符串
    :返回字符串的一部分。也可以用来修改它
  • ASC
    :与CHR类似,但与之相反-显示字符的ASCII值)
  • 索引
    :返回字符串中字符的位置
  • R-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.
函数Dia2Plain返回字符(输入icTxt作为字符):
将变量ocTxt定义为无撤消字符。
将变量i定义为不撤消的整数。
将变量iAsc定义为不撤消的整数。
将变量cDia定义为无撤消字符。
将变量cPlain定义为字符no undo。
分配ocTxt=icTxt。
重复i=1到长度(八位文本):
分配cDia=子字符串(八位文本,i,1)
cPlain=”“。
如果asc(cDia)>127
然后做:
重复iAsc=65至90:/*A..Z*/
如果比较(cDia,“eq”,chr(iAsc),“区分大小写”)
然后分配cPlain=chr(iAsc)。
结束。
重复iAsc=97至122:/*a..z*/
如果比较(cDia,“eq”,chr(iAsc),“区分大小写”)
然后分配cPlain=chr(iAsc)。
结束。
如果cPlain“
然后分配子字符串(ocTxt,i,1)=cPlain。
结束。
结束。
返回八位文本。
结束。
/*测试*/
将变量c定义为char init“Äëëëëëëëëëëë235。
disp c Dia2Plain(c)。
定义变量i为int。
将变量d定义为char。
重复i=128至256:
分配c=chr(i)d=Dia2Plain(chr(i))。
如果asc(c)asc(d),则显示i c d。
结束。

谢谢您的回答。我想为您提供一个例子来帮助我:do:def var namecust as char。def var namecustnew为char。namecust=bryan&Jérôme caron/pers/*我想通过替换namecust&Eo-/space ie://namecustnew=BRYAN JEROME CARON PERS来显示变量。消息名称CUSTNEW VIEW-AS ALERT-BOX INFO按钮确定。end.newstring=REPLACE(“Jérôme”、“e”、“e”)。newstring=REPLACE(newstring,“ô”,“o”)。尽管该函数在可维护性方面更干净,但也可以嵌套REPLACE调用,如:newstring=REPLACE(REPLACE(“'Jérôme”,“é”,“e”),“ô”,“o”)。