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

Nikolay Mishin mi ÎÁ ya.ru
ðÔ óÅÎ 9 12:04:55 PDT 2011


÷ÓÅÍ ÏÇÒÏÍÎÏÅ ÓÐÁÓÉÂÏ!! éÔÏÇÏ×ÙÊ ×ÁÒÉÁÎÔ

#!/usr/bin/perl
use strict;
use warnings;

#use Smart::Comments;

use constant RegExp_parse_name => qr/(\w+)_(\d{2})-(\w{3})-(\d{4})_(\d+)/;

#qr/([A-Z0-9]+_\d+_[A-Z0-9]+)_(\d+)-([A-Z][a-z]{2})-(20\d{2})_(\d+)[.]xml/;

#create month hash
my @month = qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/;
my %months;
foreach my $index ( 0 .. $#month ) { $months{ $month[$index] } = $index }

#generate tmp array for special sort
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], reverse sort { $a cmp $b } @tmp_scons;

### @tmp_scons:@tmp_scons
### @scons:@scons
### %months:%months
my %is;

foreach my $str (@scons) {
    my ( $trade_id, $date, $month, $year, $row_num ) =
      $str =~ RegExp_parse_name;
    if ( !$is{$trade_id} ) {
        print "$str\n";
    }
    $is{$trade_id}++;
}

__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, 22:41, "Nikolay Mishin" <mi ÎÁ ya.ru>:
> ñ ÂÙ ÅÝÅ ÏÐÔÉÍÉÚÎÕÌ ÎÁ ÏÐÒÅÄÅÌÅÎÉÉ ÈÅÛÁ Ó ÍÅÓÑÃÁÍÉ
>
> my @month = qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/;
> my %months;
> foreach my $index ( 0 .. $#month ) { $months{ $month[$index] } = $index }
>
> 09.09.2011, 21:57, "Nikolay Mishin" <mi ÎÁ ya.ru>:
>
>> šïÔÌÉÞÎÙÊ ÏÔÞÅÔ, ÎÏ × ÒÅÚÕÌØÔÁÔÅ ÓÏÒÔÉÒÕÅÔÓÑ ÎÅ ×ÅÒÎÏ - ÐÏÓÌÅ ÉÀÎÑ ÉÀÌØ
>> šÐÒÏ×ÅÒØÔÅ ÎÁ ÜÔÏÍ ËÕÓËÅ
>> š#!/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 mailing list
>> šmoscow-pm ÎÁ pm.org | http://moscow.pm.org
>
> --
> Nikolay Mishin
>
> --
> Moscow.pm mailing list
> moscow-pm ÎÁ pm.org | http://moscow.pm.org

--
Nikolay Mishin


ðÏÄÒÏÂÎÁÑ ÉÎÆÏÒÍÁÃÉÑ Ï ÓÐÉÓËÅ ÒÁÓÓÙÌËÉ Moscow-pm