我遇到了一些与 RPAD 相关的奇怪行为……我想我遗漏了一些明显的东西,希望有人能帮助我。
我只是想格式化一些简单的输出......并将测试用例简化为非常简单的用例:
set serverout on
declare
lc_wid CONSTANT number := 10;
lc_sep CONSTANT varchar2(10) := ' : ';
lc_NOCOLOR CONSTANT varchar2(100) := chr(27)||'[0m';
lc_RED CONSTANT varchar2(100) := chr(27)||'[32m'||chr(27)||'[1;31m';
lc_GREEN CONSTANT varchar2(100) := chr(27)||'[32m'||chr(27)||'[1;32m';
lc_YELLOW CONSTANT varchar2(100) := chr(27)||'[32m'||chr(27)||'[1;33m';
begin
dbms_output.put_line ( lc_sep || lc_GREEN || 'test' || lc_NOCOLOR || lc_sep );
dbms_output.put_line ( lc_sep || 'test' || lc_sep );
dbms_output.put_line ( lc_sep || lc_GREEN || rpad('test',lc_wid,' ') || lc_NOCOLOR || lc_sep );
dbms_output.put_line ( lc_sep || rpad('test',' ') || lc_sep );
dbms_output.put_line ( lc_sep || lc_GREEN || rpad('testing',' ') || lc_NOCOLOR || lc_sep );
dbms_output.put_line ( lc_sep || rpad('testing',' ') || lc_sep );
dbms_output.put_line ( lc_sep || lc_GREEN || rpad('something',' ') || lc_NOCOLOR || lc_sep );
dbms_output.put_line ( lc_sep || rpad('something',' ') || lc_sep );
end;
/
(是的,我在纠结颜色!有趣...)
这会吐出以下内容:
如您所见,没有 RPAD 的短文本对齐良好......而带有 rpad 的较长文本对齐良好,但是,“test”和“testing”文本正在做一些“不同”的事情...... Oo
现在,如果我将 rpad 更改为用“.”填充。 .它工作正常。
set serverout on
declare
lc_wid CONSTANT number := 10;
lc_sep CONSTANT varchar2(10) := ' : ';
lc_NOCOLOR CONSTANT varchar2(100) := chr(27)||'[0m';
lc_RED CONSTANT varchar2(100) := chr(27)||'[32m'||chr(27)||'[1;31m';
lc_GREEN CONSTANT varchar2(100) := chr(27)||'[32m'||chr(27)||'[1;32m';
lc_YELLOW CONSTANT varchar2(100) := chr(27)||'[32m'||chr(27)||'[1;33m';
begin
dbms_output.put_line ( lc_sep || lc_GREEN || 'test' || lc_NOCOLOR || lc_sep );
dbms_output.put_line ( lc_sep || 'test' || lc_sep );
dbms_output.put_line ( lc_sep || lc_GREEN || rpad('test','.') || lc_NOCOLOR || lc_sep );
dbms_output.put_line ( lc_sep || rpad('test','.') || lc_sep );
dbms_output.put_line ( lc_sep || lc_GREEN || rpad('testing','.') || lc_NOCOLOR || lc_sep );
dbms_output.put_line ( lc_sep || rpad('testing','.') || lc_sep );
dbms_output.put_line ( lc_sep || lc_GREEN || rpad('something','.') || lc_NOCOLOR || lc_sep );
dbms_output.put_line ( lc_sep || rpad('something','.') || lc_sep );
end;
/
所以......似乎短文本不能与那些颜色代码和 RPAD 正常工作......但我想知道为什么? 试图了解这里发生了什么。
[编辑] 对不起,它的价值,我在 Oracle 12.1.0.2.0 中运行 [/编辑]