在perl中我可以根据原始字符串中的关键字对foreach循环的输出进行排序吗?

时间:2014-02-24 15:43:21

标签: perl sorting

我正在处理一个问题,并在数组中进行迭代。我是perl的新手,很抱歉,如果这是我看不到的非常明显的事情。 我想根据原始字符串中的关键字对输出进行排序。因为我有两个foreach循环给我这样的东西:

[blup]
[ich]
[du]
[er]
[sie]
[es]

something something something

somethingelse something else something else

我想按照原始字符串中提取子字符串的关键字来对其进行排序:

[blup blup]
[ich]
something something something

[er]
[sie]
[es]
something else something else something else

感谢您的帮助!

这是我的代码:

#!/usr/bin/perl
# perl -d ./perl_debugger.pl


use strict;
use warnings;
use Data::Dumper qw(Dumper);
use File::Slurp;


my @a_linesorig;
my @solution;

my $line;

my $str;
my $grab;
my $s;
my $rs;
my $capture;



open(my $fh, "<", "output.txt")
    or die "cannot open < output.txt: $!";

$line = read_file('output.txt');

$line = read_file('output.txt');
@a_linesorig = split( /\*/, $line);
@solution = split( /\bsolution\b/, $line);

close $fh
    or die "can't close file: $!";

my $filename = 'neu.txt';   
open(my $fh1, '>', $filename)
    or die "can't open file: $!";

foreach $str (@a_linesorig)  {

    if ($str =~ (/\[(.*?)\]/)) {

        print ($fh1 "content bracket: $1\n\n");

    }
}

foreach $str (@a_linesorig)  {

    if ($str =~ /\brewrites\b([^\|]+)((\bcpu\b))*/g) {  

        print ($fh1 "decision: $&\n\n");

    }
}


close $fh1
    or die "can't close file: $!";

2 个答案:

答案 0 :(得分:0)

在计算结果时,您可以将它们存储在散列中,最后可以遍历散列(按排序键)

这是未经检查的伪perl,但概念是:

定义哈希:

%hash

当您存储条目时,您将

$hash{$key-that-you-want-to-sort-by} = $Thing-that-you-want-to-print

然后,当你完成后,你可以循环键盘

for (my $key (sort keys $hash)) {
print $key{$hash};
}

答案 1 :(得分:0)

在高级别,我会说你应该使用哈希,谁的键是原始字符串中的单词,谁的值是你想要保留的顺序。

然后,在您处理完输入后,您将查看哈希的键,按您的顺序排序,并打印循环内每个单词的结果。