sort函数中的警告"参数在sort"中不是数字。

时间:2016-05-06 11:42:21

标签: perl

以下代码产生警告 - "参数在排序"中不是数字。

我的代码出了什么问题? 代码:

DECLARE
   i number:=1;
   k boolean := true;
   output number;
   stmt varchar(500);
BEGIN
  <<repeat>>
  while(k)
  loop
    DBMS_OUTPUT.PUT_LINE( 'c column -->'||i );
   EXECUTE IMMEDIATE 'select 1 from X_TAB t where t.c'||i||'= ''NOTE_NFE'''

     into output;
     IF output = 1 then
        DBMS_OUTPUT.PUT_LINE( 'c column'||i );
        k:=false;
     END IF;
     i:=i+1;
     IF i = 100 then
        k:=false;
     END IF;
END LOOP;
EXCEPTION 
     when no_data_found then
       i:=i+1;
       if i = 100 then
          k:=false;
       end if;
       goto repeat;
END;
/

文件text.txt包含两个带数字的字符串。

1 个答案:

答案 0 :(得分:2)

sort显然是抱怨你的文件内容。

您应该尝试调试问题:

for my $line (@file_content) {
    print "line: ".$line;
}

检查除数字之外是否还有其他内容(空行,带字符的行等)。

如果这没有帮助,请尝试在上下文中获取警告:

@sorted = sort {
    print "a: $a";
    print "b: $b";
    $a <=> $b;
} @file_content;

这可能会产生较长的输出,但警告上方的a: ...b: ...行会显示导致问题的行。

你真的想要数字排序吗?文本排序可能是解决方案:

@sorted = sort { $a cmp $b } @file_content;

请注意,您阅读文件的方式包括最后的换行符(通常为\n)。这不会影响数字排序,因为如果字符串以数字开头,Perl只会切断任何没有数字的数字,但可能会混淆脚本的其余部分。试试chomp摆脱它们。