powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Почему так сортируются строки?
4 сообщений из 29, страница 2 из 2
Почему так сортируются строки?
    #39131257
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замыкая круг.
Разработчик в принципе подтвердил моё рассуждение в 18564206 , только вот никаких псевдочисел нет: "In ANSI collation, any number (or string that is in canonic numeric form) is collated numerically, before all non-numeric strings."
Причём это не всегда было так, а начиная с какой-то версии (не сказали с какой, но видимо c довольно давней). Не важен ни результат $isvalidnum, ни возможный <MAXNUMBER> при "классической" проверке на число: n=+n.
Не стал бы и писать об этом, но механизм сортировки один из "ядерных", и его непонятное поведение меня встревожило. Теперь успокоили :)

Всем спасибо, кто поучаствовал.
...
Рейтинг: 0 / 0
Почему так сортируются строки?
    #39131415
Timur Safin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov"In ANSI collation, any number (or string that is in canonic numeric form) is collated numerically, before all non-numeric strings."
Причём это не всегда было так, а начиная с какой-то версии (не сказали с какой, но видимо c довольно давней).
Это с SPJ932 присутствующем в продукте еще с 1993(!) года.
...
Рейтинг: 0 / 0
Почему так сортируются строки?
    #39253999
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Почему так сортируются строки?
    #39254255
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

спасибо, правда я и тогда всё понял :). Однако лучше бы для большей понятности автор поста употребил оператор ]], а не ], т.к. ] трактуется как "следует-за в порядке кодов символов без учёта специфики числовой сортировки". Для преодоления этого недостатка и был когда-то добавлен в язык Стандарта ISO/1995 оператор ]] - "следует-за в порядке действующей Collation". Мой старый пример, расширенный примером автора, наглядно показывает разницу:
Код: plaintext
1.
2.
3.
4.
num k b 
  s b("12345678901234567870")="Num20 @ S.Hobbs" s b("12345678901234567874")="NotNum20 @ S.Hobbs"
  s a=1E30,b(+a)=1,b(+a_"11")=11,b(+a_"111")=111,b(+a_"1a")="3a",a=3E30,b(+a)=3,b(+a_"33")=33,b(+a_"333")=333,b(+a_"1a")="4a"
  s i="",i0="" f  s i=$o(b(i)) q:i=""  w "(i]]i0)=",i]]i0," (i]i0)=",i]i0," (i>i0)=",i>i0,?30," " zw b(i) s i0=i
  q
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
LEARN>d num^ztest
(i]]i0)=1 (i]i0)=1 (i>i0)=1    b(12345678901234567870)="Num20 @ S.Hobbs"
(i]]i0)=1 (i]i0)=1 (i>i0)=0    b("12345678901234567874")="NotNum20 @ S.Hobbs"
(i]]i0)=1 (i]i0)=0 (i>i0)=1    b(1000000000000000000000000000000)=1
(i]]i0)=1 (i]i0)=1 (i>i0)=1    b(3000000000000000000000000000000)=3
(i]]i0)=1 (i]i0)=0 (i>i0)=1    b("100000000000000000000000000000011")=11
(i]]i0)=1 (i]i0)=1 (i>i0)=1    b("300000000000000000000000000000033")=33
(i]]i0)=1 (i]i0)=0 (i>i0)=1    b("1000000000000000000000000000000111")=111
(i]]i0)=1 (i]i0)=1 (i>i0)=1    b("3000000000000000000000000000000333")=333
(i]]i0)=1 (i]i0)=0 (i>i0)=0    b("10000000000000000000000000000001a")="3a"
(i]]i0)=1 (i]i0)=1 (i>i0)=1    b("30000000000000000000000000000001a")="4a"
...
Рейтинг: 0 / 0
4 сообщений из 29, страница 2 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Почему так сортируются строки?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]