The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Нерегулярная ощибка в 'сотртировке Шварца', !*! alex 946, 19-Дек-02, 08:28  [смотреть все]
При попытке использовать код:

<pre>
        sub fieldsort {
        my ($sep, $cols);
        if (ref $_[0]) {
            $sep = '\\s+'
            } else {
                $sep = shift;
            }
            unless (ref($cols = shift) eq 'ARRAY') {
                die print "fieldsort columns must be in anon array";
            }
            my (@sortcode, @col);
            my $col = 1;
            for (@$cols) {
                my ($a, $b) = /^-/ ? qw(b a) : qw(a b);
                my $op = /n$/ ? '<=>' : 'cmp';
                push @col, (/(\d+)/)[0] - 1;
                push @sortcode, "\$${a}->[$col] $op \$${b}->[$col]";
                $col++;
            }
            my $sortfunc = eval "sub { " . join (" or ", @sortcode) . " } ";
            my $splitfunc = eval 'sub { (split /$sep/o, $_)[@col] } ';
            return
                map $_->[0],
                sort { $sortfunc->() }
                map [$_, $splitfunc->($_)],
                @_;
        }
</pre>

Вот таким образом:

@out = &fieldsort( '\|', ['4n',5], @in );

На некоторых файлах вылазит ошибка:

e-sort line 02 ...Use of uninitialized value in numeric comparison () at (eval 3) line 1,  line 3. ... OK.

Иногда по нескольку штук. Все файлы при этом нормально сортируются, но ведь непорядок, верно?
Ошибка явно связана с содержимым файла, правда "плохие" строки ещё не нашёл. при этом "line 1" присутствует всегда.

Идеи есть? Или доки на русском где? поиском не нарыл что-то...

  • RE: Нерегулярная ощибка в 'сотртировке Шварца', !*! konst, 14:48 , 19-Дек-02 (1)
    >             my $op = /n$/ ? '<=>' : 'cmp';
    >e-sort line 02 ...Use of uninitialized value in numeric comparison () at
    >Идеи есть? Или доки на русском где? поиском не нарыл что-то...
    ==
    вероятно некоторые строки файлов содержат числа+буквы ("a123z")
    ->
    numeric comparison () не проходит!
    (( /^(\d+)$/))

    • RE: А чем заменить?, !*! alex 946, 15:08 , 19-Дек-02 (2)

      >вероятно некоторые строки файлов содержат числа+буквы ("a123z")

      >numeric comparison () не проходит!
      >(( /^(\d+)$/))

      ВСЕ строки фала содержат и буквы и цифры и при этом сортируются. То поле строки, что сортируется как числовое - содержит только цифры от 1 до 7. Пробелов тоже нигде нет...

      Может, где лежит более путёвый sub{} ? Чтоб посмотреть и сравнить....

  • RE: Нерегулярная ощибка в 'сотртировке Шварца', !*! konst, 15:45 , 19-Дек-02 (3)
    >my $sortfunc = eval "sub { " . join (" or ", @sortcode) . " } ";
    >            
    >my $splitfunc = eval 'sub { (split /$sep/o, $_)[@col] } ';
    >Идеи есть? Или доки на русском где? поиском не нарыл что-то...
    ===
    проблема в использовании Eval:
    В том, что сортируется - содержится "$","@",etc
    -> тогда надо s/([\$\@])/\\$1/g;
    + можно включить в eval sub {.. print STDERR "то - что в eval"
    2> errfile
    - потом смотреть errfile

    • Хм..., !*! alex 946, 18:11 , 19-Дек-02 (4)
      >проблема в использовании Eval:
      >В том, что сортируется - содержится "$","@",etc
      >-> тогда надо s/([\$\@])/\\$1/g;
      >+ можно включить в eval sub {.. print STDERR "то - что в eval"

      Спецсимволов в файлах не обнаружил. Запятые да точки. Может, это разделитель полей "|" маячит?

      (eval 5) line 1,  line 8 - всегда этот "line 1"!!! Попробовал добавить  к "плохому" файлу "хороший" -

      опять

      (eval 5) line 1,  line 32 То есть "виновата" 1-я строка? Удаляю...

      (eval 5) line 1,  line 31 !!!!!!! Ладно, удаляю все старые строки...

      (eval 5) line 1,  line 23 !!!! То есть при второй сортировке ТАКОГО же файла вылезает ошибка?

      Меняю порядок сортировки файлов - с 01-02-03 на 02-03-01 ...

      ТАК И ЕСТЬ!!! Тот файл, что обрабатывается ПЕРВЫМ проходит нормально, а во втором и третьем проблемы.

      Что обнулять-то надо на выходе??? Подскажите? Явно ж какая-то переменная по второму разу проходит...

      • RE: Хм..., !*! konst, 11:58 , 20-Дек-02 (5)
        >Что обнулять-то надо на выходе??? Подскажите? Явно ж какая-то переменная по второму
        >разу проходит...
        Если все работает нормально (результат устраивает), можно убрать "-w" из 1-й строки скрипта.
        Насколько я понял это не ошибка, а предупреждение.
        Если же просто интересно в чем дело - пришлите пожалуйста полный код. образцы файлов для sort
        и как запускается скрипт.





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру