[Moscow.pm] transform sort function to Schwartzian Transform ??

Nikolay Mishin mi на ya.ru
Пт Сен 9 10:57:25 PDT 2011


Отличный отчет, но в результате сортируется не верно - после июня июль
проверьте на этом куске
#!/usr/bin/perl
use strict;
use warnings;
use Smart::Comments;

use constant RegExp_parse_name =>
qr/([A-Z0-9]+_\d+_[A-Z0-9]+)_(\d+)-([A-Z][a-z]{2})-(20\d{2})_(\d+)[.]xml/;
my %months = ( Jan => '01', Feb => '02', Mar => '03', Apr => '04', May => '05',Jun => '06',
               Jul => '07', Aug => '08', Sep => '09', Oct => '10', Nov => '11',Dec => '12',
);

my @tmp_scons;
my @tmp_scons2;
while ( my $str = <DATA> )
{
    chomp($str);
    my ( $trade_id, $date, $month, $year, $row_num ) = $str =~
RegExp_parse_name;
    $trade_id or next;
    $month = $months{$month};
    push @tmp_scons, [ "$trade_id:$year-$month-$date:$row_num",  $str];
    push @tmp_scons2, "$trade_id:$year-$month-$date:$row_num";
}
my @scons = map $_->[1], sort {$a cmp $b} @tmp_scons;

### @tmp_scons2:@tmp_scons2
### @tmp_scons:@tmp_scons
### @scons:@scons
foreach(sort @tmp_scons2)
{
    print "$_\n";
}


foreach(@scons)
{
    print "$_\n";
}

__DATA__
N1089767N_7_SWOPT_03-Jul-2011_78919186.xml
N1089767N_7_SWOPT_25-Jun-2011_72745892.xml
N1089772L_9_SWOPT_03-Jul-2011_78979055.xml
N1089772L_9_SWOPT_20-Jul-2011_69380887.xml
N1089772L_9_SWOPT_29-Jun-2011_74754662.xml

09.09.2011, 20:08, "Denis Evdokimov" <evdokimov.denis на gmail.com>:
> А теперь ответ на вопрос
> #!/usr/bin/perl
> use strict;
> use warnings;
>
> use constant RegExp_parse_name =>
> qr/([A-Z0-9]+_\d+_[A-Z0-9]+)_(\d+)-([A-Z][a-z]{2})-(20\d{2})_(\d+)[.]xml/;
> my %months = (
>                FY  => '00',
>                Jan => '01',
>                Feb => '02',
>                Mar => '03',
>                Apr => '04',
>                May => '05',
>                Jun => '06',
>                Jul => '07',
>                Aug => '08',
>                Sep => '09',
>                Oct => '10',
>                Nov => '11',
>                Dec => '12',
> );
>
> my @tmp_scons;
> while ( my $str = <DATA> )
> {
>     chomp($str);
>     my ( $trade_id, $date, $month, $year, $row_num ) = $str =~
> RegExp_parse_name;
>     $trade_id or next;
>     $month = $months{$month};
>     push @tmp_scons, [ "$trade_id:$year-$month-$date:$row_num",  $str];
> }
> my @scons = map $_->[1], sort {$a cmp $b} @tmp_scons;
>
> foreach(@scons)
> {
>     print "$_\n";
> }
>
> __DATA__
> N1089767N_7_SWOPT_03-Jul-2011_78919186.xml
> N1089767N_7_SWOPT_25-Jun-2011_72745892.xml
> N1089772L_9_SWOPT_03-Jul-2011_78979055.xml
> N1089772L_9_SWOPT_20-Jul-2011_69380887.xml
> N1089772L_9_SWOPT_29-Jun-2011_74754662.xml
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org

--
Nikolay Mishin


Подробная информация о списке рассылки Moscow-pm