Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

sort (Bolt)
Author Message
Bolt
Участник форума



Joined: 05 Apr 2003
Posts: 129
Карма: 0
   поощрить/наказать

Location: Киев

PostPosted: Thu Jul 31, 2003 4:01 pm ()
   Post subject: sort
Reply with quote

Втягиваю csv(строк в нем от 5 до 40) вида:
Code (any language): скопировать код в буфер обмена
текстовое поле;10;5;5;;;;7;6;6;7;7;5;6;6;6;6;7;8;8;9;6;;;;;4;;6;7;7;9;9;10;172
текстовое поле;;;;;;;;;;;;;;;;;;;7;7;5;;;;;;;5;4;5;;;;33
текстовое поле;5;3;2;;;;8;4;5;6;4;6;;;;5;5;7;9;9;7;;;;3;3;4;5;4;5;7;7;7;130
в массив @csvdata
последняя запись каждой строки (с индексом 34) - сумма всех цыфр строки. т.о. она есть всегда(defined)
вот по этой сумме и хочется отсортировать массив:
Code (any language): скопировать код в буфер обмена
@stddata = sort { (split /";"/, $b)[34] <=> (split /";"/, $a)[34]; } @csvdata;
не-а, не тут-то было. не сортирует.
Не подскажете в чем ошибка?
Back to top
View user's profile Send private message Send e-mail
Enilatiar
Участник форума



Joined: 09 Jun 2003
Posts: 690
Карма: 24
   поощрить/наказать


PostPosted: Thu Jul 31, 2003 5:15 pm (спустя 1 час 14 минут)
   Post subject:
Reply with quote

Вы ошиблись в кавычках и в контексте скобок.
Code (perl): скопировать код в буфер обмена
#!Perl -w
use strict;

my @csvdata = ();
while (<DATA>) {
    chomp (www.perldoc.com/perl5.6/pod/func/chomp.html);
    next  if /^\s (www.perldoc.com/perl5.6/pod/func/s.html)*$/;
    push (www.perldoc.com/perl5.6/pod/func/push.html) @csvdata, $_;
}

my @stddata = sort (www.perldoc.com/perl5.6/pod/func/sort.html) { +(split (www.perldoc.com/perl5.6/pod/func/split.html) /;/, $b)[34] <=> +(split (www.perldoc.com/perl5.6/pod/func/split.html) /;/, $a)[34] } @csvdata;

print (www.perldoc.com/perl5.6/pod/func/print.html) "$_\n"  foreach @stddata;

__DATA__
текстовое поле;10;5;5;;;;7;6;6;7;7;5;6;6;6;6;7;8;8;9;6;;;;;4;;6;7;7;9;9;10;172
текстовое поле;;;;;;;;;;;;;;;;;;;7;7;5;;;;;;;5;4;5;;;;33
текстовое поле;5;3;2;;;;8;4;5;6;4;6;;;;5;5;7;9;9;7;;;;3;3;4;5;4;5;7;7;7;130
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Thu Jul 31, 2003 5:43 pm (спустя 28 минут)
   Post subject:
Reply with quote

А плюсики зачем? Разве без них не работает?
Back to top
View user's profile Send private message Send e-mail
Enilatiar
Участник форума



Joined: 09 Jun 2003
Posts: 690
Карма: 24
   поощрить/наказать


PostPosted: Thu Jul 31, 2003 5:59 pm (спустя 15 минут)
   Post subject:
Reply with quote

Плюсики определяют контекст. Без них скобки () не клеятся к [].
Впрочем, без них работает. ;) Так что не прав. Перепредостерегся.
Back to top
View user's profile Send private message
Bolt
Участник форума



Joined: 05 Apr 2003
Posts: 129
Карма: 0
   поощрить/наказать

Location: Киев

PostPosted: Thu Jul 31, 2003 7:53 pm (спустя 1 час 53 минуты)
   Post subject:
Reply with quote

:) Премного благодарен.
это работает:
Code (perl): скопировать код в буфер обмена
@stddata = sort (www.perldoc.com/perl5.6/pod/func/sort.html) { (split (www.perldoc.com/perl5.6/pod/func/split.html) /;/, $b)[34] <=> (split (www.perldoc.com/perl5.6/pod/func/split.html) /;/, $a)[34]; } @csvdata;
действительно перемудрил с кавычками.
Back to top
View user's profile Send private message Send e-mail
Enilatiar
Участник форума



Joined: 09 Jun 2003
Posts: 690
Карма: 24
   поощрить/наказать


PostPosted: Thu Jul 31, 2003 8:13 pm (спустя 20 минут)
   Post subject:
Reply with quote

Точку с запятой из середины убрали бы. ;)
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Thu Jul 31, 2003 10:41 pm (спустя 2 часа 28 минут)
   Post subject:
Reply with quote

В смысле, перед "}". Она там и вправду необязательна.
Back to top
View user's profile Send private message Send e-mail
Enilatiar
Участник форума



Joined: 09 Jun 2003
Posts: 690
Карма: 24
   поощрить/наказать


PostPosted: Thu Jul 31, 2003 10:47 pm (спустя 6 минут)
   Post subject:
Reply with quote

;)
Это смайл. :)
Back to top
View user's profile Send private message
Дмитрий Бойков
Участник форума



Joined: 28 Mar 2003
Posts: 32
Карма: 2
   поощрить/наказать

Location: СПб

PostPosted: Wed Aug 06, 2003 12:04 pm (спустя 5 дней 13 часов 16 минут)
   Post subject:
Reply with quote

Осенна удобна однако! 8)
Code (perl): скопировать код в буфер обмена
#
#
        sub fieldsort {
            my ($sep, $cols);
            if (ref (www.perldoc.com/perl5.6/pod/func/ref.html) $_[0]) {
                $sep = '\\s+'
            } else {
                $sep = shift (www.perldoc.com/perl5.6/pod/func/shift.html);
            }
            unless (ref (www.perldoc.com/perl5.6/pod/func/ref.html)($cols = shift (www.perldoc.com/perl5.6/pod/func/shift.html)) eq 'ARRAY') {
                die (www.perldoc.com/perl5.6/pod/func/die.html) "fieldsort columns must be in anon array";
            }
            my (@sortcode, @col);
            my $col = 1;
            for (@$cols) {
                my ($a, $b) = /^-/ ? qw (www.perldoc.com/perl5.6/pod/func/qw.html)(b a) : qw (www.perldoc.com/perl5.6/pod/func/qw.html)(a b);
                my $op = /n$/ ? '<=>' : 'cmp';
                push (www.perldoc.com/perl5.6/pod/func/push.html) @col, (/(\d+)/)[0] - 1;
                push (www.perldoc.com/perl5.6/pod/func/push.html) @sortcode, "\$${a}->[$col] $op \$${b}->[$col]";
                $col++;
            }
            my $sortfunc = eval (www.perldoc.com/perl5.6/pod/func/eval.html) "sub { " . join (www.perldoc.com/perl5.6/pod/func/join.html) (" or ", @sortcode) . " } ";
            my $splitfunc = eval (www.perldoc.com/perl5.6/pod/func/eval.html) 'sub { (split /$sep/o, $_)[@col] } ';
            return (www.perldoc.com/perl5.6/pod/func/return.html)
                map (www.perldoc.com/perl5.6/pod/func/map.html) $_->[0],
                sort (www.perldoc.com/perl5.6/pod/func/sort.html) { $sortfunc->() }
                map (www.perldoc.com/perl5.6/pod/func/map.html) [$_, $splitfunc->($_)],
                @_;
        }
#
#
        #@sorted = fieldsort ':', ['2n', -1], @data;
#
        #@sorted = fieldsort [2, 1], @data;
#
#
        #@sorted = fieldsort '+', ['-1n', 3, 2], @data;
 
Удачи.
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Wed Aug 06, 2003 1:25 pm (спустя 1 час 21 минуту)
   Post subject:
Reply with quote

Да, неплохо. Спасибо.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Эсс
Участник форума



Joined: 06 Jul 2003
Posts: 2533
Карма: 2
   поощрить/наказать

Location: Таллинн, Эстония

PostPosted: Sat Aug 16, 2003 10:53 pm (спустя 10 дней 9 часов 28 минут)
   Post subject:
Reply with quote


М

Переношу тему по
 просьбе автора.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Эсс
Участник форума



Joined: 06 Jul 2003
Posts: 2533
Карма: 2
   поощрить/наказать

Location: Таллинн, Эстония

PostPosted: Sat Aug 16, 2003 10:54 pm (спустя 1 минуту 13 секунд)
   Post subject:
Reply with quote


М

Перенесено из форума: Программирование::Perl::Все в кучу.
Перенесено в форум: Программирование::Perl::Склад готовых решений.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML