The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Нерегулярная ощибка в 'сотртировке Шварца'"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [Проследить за развитием треда]

"Нерегулярная ощибка в 'сотртировке Шварца'"
Сообщение от alex 946 emailИскать по авторуВ закладки on 19-Дек-02, 08:28  (MSK)
При попытке использовать код:

<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" присутствует всегда.

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

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

2. "RE: А чем заменить?"
Сообщение от alex 946 emailИскать по авторуВ закладки on 19-Дек-02, 15:08  (MSK)

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

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

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

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: Нерегулярная ощибка в 'сотртировке Шварца'"
Сообщение от konst emailИскать по авторуВ закладки on 19-Дек-02, 15:45  (MSK)
>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
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Хм..."
Сообщение от alex 946 emailИскать по авторуВ закладки on 19-Дек-02, 18:11  (MSK)
>проблема в использовании 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 ...

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

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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