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

Nikolay Mishin mi ÎÁ ya.ru
óÂ óÅÎ 10 08:58:58 PDT 2011


ËÓÔÁÔÉ ÚÄÅÓØ ÏÛÉÂËÁ , ÐÒÁ×ÉÌØÎÏ

my @scons = map $_->[1], sort { $a->[0] cmp $b->[0] } @tmp_scons;

ÜÔÏ ÍÎÅ ÎÁ http://stackoverflow.com/questions/7366402/perl-schwartzian-transform ÐÏÄÓËÁÚÁÌÉ


09.09.2011, 23:04, "Nikolay Mishin" <mi ÎÁ ya.ru>:
> ÷ÓÅÍ ÏÇÒÏÍÎÏÅ ÓÐÁÓÉÂÏ!! éÔÏÇÏ×ÙÊ ×ÁÒÉÁÎÔ
>
> #!/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

--
Nikolay Mishin


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