以下を含むテストファイル「from.xml」があります。
<target>
<promptlist>
<prompt address="EXA112" time="00:11:20.00">This is what I want to see first.second</prompt>
<prompt address="EXA222" time="00:22:20.00">This is what I want to see second</prompt>
</promptlist>
</target>
<target>
<promptlist>
<prompt address="EXA444" time="00:44:40.00">This is what I want to see fourth</prompt>
<prompt address="EXA333" time="00:33:30.00">This is what I want to see third</prompt>
<prompt address="EXA555" time="00:55:50.00">This is what I want to see fifth</prompt>
<prompt address="EXA111" time="00:11:10.00">This is what I want to see first</prompt>
<prompt address="EXA666" time="00:66:60.00">This is what I want to see sixth</prompt>
</promptlist>
</target>
ファイルに対してスクリプトを実行すると、次のように正しく生成されます。
00:11:20.00 EXA112 This is what I want to see first.second
00:22:20.00 EXA222 This is what I want to see second
00:44:40.00 EXA444 This is what I want to see fourth
00:33:30.00 EXA333 This is what I want to see third
00:55:50.00 EXA555 This is what I want to see fifth
00:11:10.00 EXA111 This is what I want to see first
00:66:60.00 EXA666 This is what I want to see sixth
上記のように、これは私が目指していたものですが、実際のアプリケーションと同様に、時間は順不同です。この出力をソートする方法はありますか? 私は検索しましたが、明確なものは何も思いつきません。私はこれを作成しました。私はプログラミングと特にPerlの初心者です。時系列で出力する行が必要です。前もって感謝します。
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics -verbose;
my $filename = $ARGV [0];
open( my $fh, '<', $filename ) or die "Can't open $filename: $!";
while ( my $line = <$fh> ) {
if ( $line =~ /\<prompt / ) {
if ( $line =~ /time=\"(.+?)\"/ ) {
print"\n $1 ";
if ( $line =~ /address=\"(.+?)\"/ ) {
print"$1 ";
if ( $line =~ /\>(.+?)\</ ) {
print"$1\n\n ";
}
}
}
}
}
close $fh;