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

use*_*722 2 progress-4gl openedge

如何从Progress 4GL中的字符串中删除所有特殊字符?

Jen*_*nsd 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)".
Run Code Online (Sandbox Code Playgroud)

您可以使用REPLACE删除完整的匹配字符串.例如:

REPLACE("This is a text with HTML entity &", "&", "").
Run Code Online (Sandbox Code Playgroud)

处理"特殊字符"可以通过多种方式完成.如果您指的是特殊的"ASCII"字符,如换行符,铃声等,您可以将REPLACE与CHR功能一起使用.

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

CHR(表达)

expression:一个表达式,它生成一个要转换为字符值的整数值.(ASCII数字值).

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

REPLACE("ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ", "Ö", "").
Run Code Online (Sandbox Code Playgroud)

要么

REPLACE("ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ", CHR(214), "").
Run Code Online (Sandbox Code Playgroud)

将它们组合在一起就可以构建一组不需要的字符并删除字符串中的所有字符.例如:

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)".
Run Code Online (Sandbox Code Playgroud)

其他可能有用的功能:

  • SUBSTRING:返回字符串的一部分.也可以用来修改它.
  • ASC:和CHR一样,但反过来 - 显示来自角色的ASCII值).
  • INDEX:返回字符串中字符的位置.
  • R-INDEX:像INDEX一样,但从右到左搜索.
  • STRING:将任何数据类型的值转换为字符值.