Формат Int64 в домашних условиях

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7378
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Формат Int64 в домашних условиях

Сообщение Игорь Столяров »

Привет всем !

Правильно ли я понимаю, что для приёма данных при парсинге полей
в формате Int64 у нас сейчас нет других вариантов, кроме:

Код: Выделить всё

V1 Decimal(19)
V2 CString(20)  ! Как-то уже совсем тупо :(
V3 Ждать Clarion 12 

?
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 426
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 90 раз
Поблагодарили: 5 раз

Формат Int64 в домашних условиях

Сообщение ingasoftplus »

посмотрите на зачатки в equates.clw

Код: Выделить всё

! 64 bits integers

  OMIT('***',_BUILTIN_I64_)
INT64    GROUP,TYPE
lo         ULONG
hi         LONG
         END

UINT64   GROUP,TYPE
lo         ULONG
hi         ULONG
         END
! ***
и в i64.INC

это уже есть в clarion 10 и 11.1 (по крайней мере)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7378
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Формат Int64 в домашних условиях

Сообщение Игорь Столяров »

Я видел эти зачатки, но что-то мне подсказывает, что тут другая история (для передачи параметров в сторонние DLL).
А вот такое присвоение точно не прокатит - т.к. транслятор будет считать такой Group() 8-ми байтовой строкой:

Код: Выделить всё

MyBigInt Group(INT64).

  Code
  MyBigInt = 123456789012345
  Message(MyBigInt)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3134
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Формат Int64 в домашних условиях

Сообщение Дед Пахом »

Есть же libsrc\win\i64.INC.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7378
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Формат Int64 в домашних условиях

Сообщение Игорь Столяров »

Дед Пахом писал(а): 28 Сентябрь 2023, 15:27 Есть же libsrc\win\i64.INC.
Это набор функций для обмена и операций в формате Int64 ... а мне нужно хранение больших чисел. :(
Я уже увидел, что обмен в Int64 идёт через DECIMAL ... но DECIMAL не подходит для ключей в Pervasive.SQL. :(

Поэтому, видимо, остаётся только CSTRING, тем более что упорядочивание по Int64 мне не нужно.
(или можно записывать строки в формате "@N-020")
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7378
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Формат Int64 в домашних условиях

Сообщение Игорь Столяров »

Вообще, конечно, чудны творения рук детей твоих Господи ... ;)
Если верить справке Clarion 11.1, то получается, что значения по типам переменных:

Код: Выделить всё

Long:  -2,147,483,648 to 2,147,483,647
ULong:              0 to 4,294,967,295  ! <- OK !

Но !

Int64: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
UInt64:                         0 to 9,223,372,036,854,775,807  ! <- Why ?!
Здесь уже логика вышла из чата ... :)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4984
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Формат Int64 в домашних условиях

Сообщение kreator »

Скорее всего описались - https://learn.microsoft.com/ru-ru/cpp/c ... om=vs-2019.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7378
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Формат Int64 в домашних условиях

Сообщение Игорь Столяров »

kreator писал(а): 04 Октябрь 2023, 15:51 Скорее всего описались
Зная как работает SV - могли и обкакаться ... ;)
В Clarion'e ведь реализован не нативный INT64, а притянутый за ухи костыль-спарка из двух LONG ... :(
Ждём C12, а пока юзаем вместо INT64 традиционный DECIMAL(20) - в принципе всё работает. :)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4984
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Формат Int64 в домашних условиях

Сообщение kreator »

Игорь Столяров писал(а): 04 Октябрь 2023, 21:11 Ждём C12, а пока юзаем вместо INT64 традиционный DECIMAL(20) - в принципе всё работает.
Тогда уж C2024.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7378
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Формат Int64 в домашних условиях

Сообщение Игорь Столяров »

kreator писал(а): 05 Октябрь 2023, 15:09 Тогда уж C2024.
Возможно. Здесь важно, что бы INT64 был полноценным форматом - в т.ч. поддерживался драйверами БД ...
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить