[Moscow.pm] transform sort function to Schwartzian Transform ??
Akzhan Abdulin
akzhan.abdulin на gmail.com
Пт Сен 9 11:20:32 PDT 2011
Я не понял проблемы. Любую программу можно переписать при знании исходного и
целевого алгоритмов.
Зачем сюда приплетать кучу народу?
9 сентября 2011 г. 19:21 пользователь Nikolay Mishin <mi на ya.ru> написал:
> Hi Moscow PM
>
> Помогите , есть программа, сортирующая файлы:
> можно ли ее переписать с использованием Schwartzian Transform
> типа @new = map { $_->[0] }
> sort { $b->[1] <=> $a->[1] || $a->[2] cmp $b->[2] }
> map { [ $_, /=(\d+)/, uc($_) ] } @old;
> у меня что-то не получается
> #содержимое confile
> # 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
> open( CONSULTS, "confile" );
> @scons = <CONSULTS>;
> close CONSULTS;
> my %is_trade_id_unique;
> foreach ( reverse sort consort @scons ) {
> chomp;
> if ( $_ =~ m/(\w+_\d+_\w+)_(\d+)-([A-Za-z]{3})-2011_(\d+)[.]xml/i ) {
> my ( $trade_id, $date, $month, $row_num ) = ( $1, $2, $3, $4 );
> if ( !$is_trade_id_unique{$trade_id} ) {
> print $_. "\n";
> $is_trade_id_unique{$trade_id} = 1;
> }
> }
>
> }
>
> #N1089767N_7_SWOPT_03-Jul-2011_78919186.xml
> sub consort {
> $aa = $a;
> $bb = $b;
>
> # save our variables because our sort routine affects them. If I "chomp
> $a"
> # that will actually change the line seen in the foreach loop that calls
> this.
> chomp $aa;
> chomp $bb;
>
> $aa =~ s/^ *//;
> $bb =~ s/^ *//;
>
> my %months = (
> FY => 0,
> Jan => 1,
> Feb => 2,
> Mar => 3,
> Apr => 4,
> May => 5,
> Jun => 6,
> Jul => 7,
> Aug => 8,
> Sep => 9,
> Oct => 10,
> Nov => 11,
> Dec => 12,
> );
>
> my ( $trade_id, $date, $month, $row_num );
> my ( $btrade_id, $bdate, $bmonth, $brow_num );
> if ( $aa =~ m/(\w+_\d+_\w+)_(\d+)-([A-Za-z]{3})-2011_(\d+)[.]xml/i ) {
> ( $trade_id, $date, $month, $row_num ) = ( $1, $2, $months{$3}, $4
> );
> }
> if ( $bb =~ m/(\w+_\d+_\w+)_(\d+)-([A-Za-z]{3})-2011_(\d+)[.]xml/i ) {
> ( $btrade_id, $bdate, $bmonth, $brow_num ) =
> ( $1, $2, $months{$3}, $4 );
> }
>
> $trade_id cmp $btrade_id
> || $month <=> $bmonth
> || $date <=> $bdate
> || $row_num <=> $brow_num;
>
> }
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20110909/58e5e2f7/attachment-0001.html>
Подробная информация о списке рассылки Moscow-pm