私はソートされたデータを2つの列に基づいて降順で引き出し、このデータをテキストファイルにデータファイルを埋め込むテキストファイルに出力します。私が実行している問題は、プログラムに読み込まれたのと同じ順序で出力が生成されないということです。ここプログラムのアウトファイルの順序を修正する方法はありますか?
は、データセットのサンプルである:ここ
2, 1, 20, 1, 10, 28.5714285, 0,
2, 1, 72, 3, 7, 20, 0,
2, 2, 20, 3, 19, 52.7777777, 0,
5, 1, 66, 3, 199, 21.1927582, 0,
5, 1, 5, 2, 153, 16.2939297, 0,
は次出力からのサンプルである:
fci
u
csno=51 svgrp=0 antfc= 2
cdmanbr_list1.ncs_c[1]= 51
cdmanbr_list1.nghbrantf[1]= 1
cdmanbr_list1.pilot_pn[1]=
cdmanbr_list1.pgn_c[1]= 0
u
u
csno=66 svgrp=0 antfc= 2
cdmanbr_list1.ncs_c[1]= 66
cdmanbr_list1.nghbrantf[1]= 1
cdmanbr_list1.pilot_pn[1]=
cdmanbr_list1.pgn_c[1]= 0
u
u
csno=51 svgrp=0 antfc= 3
cdmanbr_list1.ncs_c[1]= 51
cdmanbr_list1.nghbrantf[1]= 1
cdmanbr_list1.pilot_pn[1]=
cdmanbr_list1.pgn_c[1]= 0
u
お知らせ方法第三「のCsNO」の値(51 )が第2の「csno」値(66)よりも小さい。同じ値の2つの "csno"があっても、 "antfc"の値は異なります。所望の出力は以下の通りです:ここでは
fci
u
csno=51 svgrp=0 antfc= 2
cdmanbr_list1.ncs_c[1]= 51
cdmanbr_list1.nghbrantf[1]= 1
cdmanbr_list1.pilot_pn[1]=
cdmanbr_list1.pgn_c[1]= 0
u
u
csno=51 svgrp=0 antfc= 3
cdmanbr_list1.ncs_c[1]= 51
cdmanbr_list1.nghbrantf[1]= 1
cdmanbr_list1.pilot_pn[1]=
cdmanbr_list1.pgn_c[1]= 0
u
u
csno=66 svgrp=0 antfc= 2
cdmanbr_list1.ncs_c[1]= 66
cdmanbr_list1.nghbrantf[1]= 1
cdmanbr_list1.pilot_pn[1]=
cdmanbr_list1.pgn_c[1]= 0
u
は、プログラムのコピーです:
#!/usr/bin/perl
use POSIX qw(strftime);
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
localtime(time);
my $bdate = sprintf("%02d%02d%02d", $mon + 1, $mday - 7, $year - 100);
my $edate = sprintf("%02d%02d%02d", $mon + 1, $mday - 1, $year - 100);
my $newresult = "/home/user/newresults/recommended_$bdate-$edate.csv";
my $script = "/home/user/update_scripts/update_$bdate-$edate.txt";
my $h;
my $k;
my $n;
my $fh = undef;
open($fh, '<', $newresult) or die $!;
open($fsh, '>', $script) or die $!;
print $fsh "fci\n";
while (my $line = <$fh>) {
next if $. < 2;
chomp $line;
my @array = split(/\,/, $line);
my $key = "csno=$array[0] svgrp=0 antfc=$array[1]";
push(@{ $h->{$key} }, $array[6]);
push(@{ $k->{$key} }, $array[2]);
push(@{ $n->{$key} }, $array[3]);
} ## end while (my $line = <$fh>)
foreach my $key (keys %{$h}) {
print $fsh "u\n";
print $fsh "$key\n";
if (@{ $h->{$key} } <= 12) {
for (my $i = 1 ; $i <= @{ $h->{$key} } ; $i++) {
my $m = $i - 1;
print $fsh "cdmanbr_list1.ncs_c[$i]=${$k->{$key}}[$m]\n";
print $fsh "cdmanbr_list1.nghbrantf[$i]=${$n->{$key}}[$m]\n";
print $fsh "cdmanbr_list1.pilot_pn[$i]=\n";
print $fsh "cdmanbr_list1.pgn_c[$i]=${$h->{$key}}[$m]\n";
} ## end for (my $i = 1 ; $i <=...)
for (my $i = @{ $h->{$key} } + 1 ; $i < 13 ; $i++) {
my $m = $i - 1;
print $fsh "cdmanbr_list1.ncs_c[$i]=\n";
print $fsh "cdmanbr_list1.nghbrantf[$i]=\n";
print $fsh "cdmanbr_list1.pilot_pn[$i]=\n";
print $fsh "cdmanbr_list1.pgn_c[$i]=\n";
} ## end for (my $i = @{ $h->{$key...}})
} ## end if (@{ $h->{$key} } <=...)
print $fsh "u\n";
} ## end foreach my $key (keys %{$h...})
* *私は* outfiling *のを聞いたことがない、そしてどのようにデータを差し込む「OUTFILE」あなた、このテキストファイルはありません別のテキストファイルですか? – Borodin
あなたが書いたすべてのPerlプログラムのトップに、特にそれを公開して助けを求める前に、常に 'use strict'と' use warnings 'all''を*使用してください。 'my'宣言を' use strict'なしですべて打ち込むのはちょっと難しいです – Borodin