代码之家  ›  专栏  ›  技术社区  ›  drnk

将一个字符替换(翻译)为多个字符

  •  0
  • drnk  · 技术社区  · 15 年前

    我有一根绳子。在这个字符串中,我需要用选择的表示替换所有特殊字符(0-31代码)。表示可能具有不同的格式。可以是\x??、或\0??、或10,13->\n、 9->\t和所有其他字符正在转换为null。总结-我需要找到所有带有0-31个代码的符号,并将它们全部替换为适当的表示形式,可以是零个或多个符号。

    我的野蛮(简单)解决方案是为每个表示创建包含32个元素的列表。对于所选的表示,在列表上循环。在循环内部调用REPLACE函数。在这种情况下,我总是会调用replace 32次。我认为那是昂贵的。

    你知道吗?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Erik    15 年前

    你可以用解码。文档可在此处找到:

    http://www.techonthenet.com/oracle/functions/decode.php

    如果您在pl/sql过程或函数中使用它,您可以这样使用它:

    SELECT decode(your_string, 'var1', 'repl1', 'var2', 'repl2', 'varN', 'replN')
    INTO l_decoded_string
    FROM dual;
    
        2
  •  1
  •   Jeffrey Kemp    15 年前

    这可能会执行得同样好,并且更易于阅读和维护:

    function trans (p_in in varchar2) return varchar2 is
       l_out varchar2(32767) := p_in;
    begin
       if length(l_out) > 0 then
          for i in 0..31 loop
             l_out := REPLACE(l_out, CHR(i), '\0x' || to_char(i,'FM0X'));
          end loop;
       end if;
       return l_out;
    end trans;
    
        3
  •  1
  •   sth    15 年前

    res :=
        REPLACE(
            REPLACE(
                REPLACE(
                    REPLACE(
                        REPLACE(
                            REPLACE(
                                REPLACE(
                                    REPLACE(
                                        REPLACE(
                                            REPLACE(
                                                REPLACE(
                                                    REPLACE(
                                                        REPLACE(
                                                            REPLACE(
                                                                REPLACE(
                                                                    REPLACE(
                                                                        REPLACE(
                                                                            REPLACE(
                                                                                REPLACE(
                                                                                    REPLACE(
                                                                                        REPLACE(
                                                                                            REPLACE(
                                                                                                REPLACE(
                                                                                                    REPLACE(
                                                                                                        REPLACE(
                                                                                                            REPLACE(
                                                                                                                REPLACE(
                                                                                                                    REPLACE(
                                                                                                                        REPLACE(
                                                                                                                            REPLACE(
                                                                                                                                REPLACE(
                                                                                                                                    REPLACE(
                                                                                                                                        p_txt,
                                                                                                                                        CHR(0),
                                                                                                                                        '\0x00'
                                                                                                                                    ),
                                                                                                                                    CHR(1),
                                                                                                                                    '\0x01'
                                                                                                                                ),
                                                                                                                                CHR(2),
                                                                                                                                '\0x02'
                                                                                                                            ),
                                                                                                                            CHR(3),
                                                                                                                            '\0x03'
                                                                                                                        ),
                                                                                                                        CHR(4),
                                                                                                                        '\0x04'
                                                                                                                    ),
                                                                                                                    CHR(5),
                                                                                                                    '\0x05'
                                                                                                                ),
                                                                                                                CHR(6),
                                                                                                                '\0x06'
                                                                                                            ),
                                                                                                            CHR(7),
                                                                                                            '\0x07'
                                                                                                        ),
                                                                                                        CHR(8),
                                                                                                        '\0x08'
                                                                                                    ),
                                                                                                    CHR(9),
                                                                                                    '\0x09'
                                                                                                ),
                                                                                                CHR(10),
                                                                                                '\0x0A'
                                                                                            ),
                                                                                            CHR(11),
                                                                                            '\0x0B'
                                                                                        ),
                                                                                        CHR(12),
                                                                                        '\0x0C'
                                                                                    ),
                                                                                    CHR(13),
                                                                                    '\0x0D'
                                                                                ),
                                                                                CHR(14),
                                                                                '\0x0E'
                                                                            ),
                                                                            CHR(15),
                                                                            '\0x0F'
                                                                        ),
                                                                        CHR(16),
                                                                        '\0x10'
                                                                    ),
                                                                    CHR(17),
                                                                    '\0x11'
                                                                ),
                                                                CHR(18),
                                                                '\0x12'
                                                            ),
                                                            CHR(19),
                                                            '\0x13'
                                                        ),
                                                        CHR(20),
                                                        '\0x14'
                                                    ),
                                                    CHR(21),
                                                    '\0x15'
                                                ),
                                                CHR(22),
                                                '\0x16'
                                            ),
                                            CHR(23),
                                            '\0x17'
                                        ),
                                        CHR(24),
                                        '\0x18'
                                    ),
                                    CHR(25),
                                    '\0x19'
                                ),
                                CHR(26),
                                '\0x1A'
                            ),
                            CHR(27),
                            '\0x1B'
                        ),
                        CHR(28),
                        '\0x1C'
                    ),
                    CHR(29),
                    '\0x1D'
                ),
                CHR(30),
                '\0x1E'
            ),
            CHR(31),
            '\0x1F'
        );