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

Nikolay Mishin mi ÎÁ ya.ru
ðÔ óÅÎ 9 11:41:33 PDT 2011


ñ ÂÙ ÅÝÅ ÏÐÔÉÍÉÚÎÕÌ ÎÁ ÏÐÒÅÄÅÌÅÎÉÉ ÈÅÛÁ Ó ÍÅÓÑÃÁÍÉ

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