文本文件读入并排序的问题。

文本文件读入并排序的问题。

比如已经有一个文本文件 1.txt 内容如下:

1 2 4
6 7 9
2 0 5

列之间只有一个空格,行之间没有空行。

我的读入程序如下

[Copy to clipboard] [ - ]
CODE:
open(FH,"<1.txt");
@array=<FH>;
#print @array, "\n";

$new_a=0;
while($in_matrix=shift(@array))  
{
        chomp($in_matrix);
        print "$in_matrix ";                  

        $new[$new_a]=$in_matrix;
        $new_a+=1;      
}
print "@new\n";
close(FH);

@sorted = sort (@new);
print "@sorted\n";

原本的目的是想把文本文件中的数字依次放到一个一维数组中,然后排序。
所以把while循环写成这个样子。(但是好像不对)

希望得到的结果是这样的             0 1 2 2 4 5 6 7 9
但是真正运行后的结果是这样的      1 2 4 2 0 5 6 7 9

也就是说其实是按照每行的第一个数字排序了 1 2 4, 2 0 5, 6 7 9

不知道怎样把这个二维数组读入后转变成一维数组,然后再排序。

谢谢。



[Copy to clipboard] [ - ]
CODE:
open FH,"<","1.txt" or die "Cannot open file!";
while (<FH>){
    chomp($_);
    s/(\S.+\S)/$1/;           # 去掉每列开头可能的空格
    @list = (@list,(split /\s+/));
}
close FH;
# 接下来,你就可以显示、排序等,随便你干什么了
foreach (@list){
    print "$_\n";
}

有点弄不明白的是,perl把上面那个文本文件读入数组,是认成什么样的形式呢?
1 2 4
6 7 9
2 0 5

([1 2 4],[6 7 9],[2 0 5])
([1,2,4],[6,7,9],[2,0,5])

怎样才能这样(1,2,4,6,7,9,2,0,5)
你Perl 可能还没有入门,建议看小骆驼书。论坛有下载的,你搜一下
非常感谢 wxlfh ,终于对了。
try

[Copy to clipboard] [ - ]
CODE:
print join(' ', sort map { split } <DATA>), "\n";

__DATA__
1 2 4
6 7 9
2 0 5



QUOTE:
原帖由 MMMIX 于 2008-12-17 09:31 发表
try

print join(' ', sort map { split } ), "\n";

__DATA__
1 2 4
6 7 9
2 0 5

哇,好简单的程序。试过了,对了。
老大能解释一下么,太高深了。
谢谢,谢谢!


QUOTE:
原帖由 kakakan 于 2008-12-17 10:53 发表


哇,好简单的程序。试过了,对了。
老大能解释一下么,太高深了。
谢谢,谢谢!

高深么?那你再看看 http://bbs.chinaunix.net/thread-1334818-1-1.html 中 DQP 给的答案。至于如何读这个语句,我也在那个帖子中解释了。


QUOTE:
原帖由 MMMIX 于 2008-12-17 09:31 发表
try

print join(' ', sort map { split } ), "\n";

__DATA__
1 2 4
6 7 9
2 0 5

刚刚又测试了一下,好像如果有负数的话,对负数的排序好像有问题呢。
比如
__DATA__
1 -2 4
6 -7 9
2 0 -5

结果是 -2 -5 -7 0 1 2 4 6 9
不知道怎么回事呢。


QUOTE:
原帖由 kakakan 于 2008-12-17 20:26 发表


刚刚又测试了一下,好像如果有负数的话,对负数的排序好像有问题呢。
比如
__DATA__
1 -2 4
6 -7 9
2 0 -5

结果是 -2 -5 -7 0 1 2 4 6 9
不知道怎么回事呢。

sort 默认情况用的是字符串比较,而不是数字比较,详见 perldoc -f sort