Просто баловался...

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Admin
Администратор
Сообщения: 3534
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

Просто баловался...

Сообщение Admin »

2020-02-07_11-03-15.png
2020-02-07_11-03-15.png (3.22 КБ) 216 просмотров

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

  PROGRAM
  MAP
    VariableType(*ANY var),STRING
  END          
                                   
var0 ULONG        ! 0 to 4,294,967,295
var1 LONG         ! -2,147,483,648 to 2,147,483,647
var2 SHORT        ! -32,768 to 32,767
var3 USHORT       ! 0 to 65,535
var4 BYTE         ! 0 to 255
var5 STRING(100)
var6 STRING(10)
var7 CSTRING(2)

  CODE         
  MESSAGE( |
  VariableType(var0)&'|'& |
  VariableType(var1)&'|'& |
  VariableType(var2)&'|'& |
  VariableType(var3)&'|'& |
  VariableType(var4)&'|'& |
  VariableType(var5)&'|'& |
  VariableType(var6)&'|'& |
  VariableType(var7)&'|'& |
  '')

VariableType    PROCEDURE(*ANY var)!,STRING             
t_cstr          &STRING
  CODE             
  cstr# = LEN(var)
  ! num
  var = 257
  IF var = 1 THEN RETURN 'BYTE' END     
  var = 32768
  IF var = -32768 THEN RETURN 'SHORT' END      
  var = 65537
  IF var = 1 THEN RETURN 'USHORT' END      
  var = 2147483648
  IF var = -2147483648 THEN RETURN 'LONG' END      
  var = 4294967297
  IF var = 1 THEN RETURN 'ULONG' END      
  ! string
  var = 'a'
  IF var = 'a'    
    IF LEN(var) > 0 AND cstr# <> 0
      RETURN 'STRING('&LEN(var)&')'
    END              
    t_cstr &= NEW STRING(4194304) ! 4 Mb
    var = t_cstr
    size# = LEN(var) + 1
    DISPOSE(t_cstr)
    RETURN 'CSTRING('&size#&')'
  END
  RETURN var
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

Аватара пользователя
Admin
Администратор
Сообщения: 3534
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

Просто баловался...

Сообщение Admin »

Иногда не хватает определения типа данных у переменной.
Это пример тоже костыль. Портит переменную.
Не помню, клонировать переменную можно или нет средствами Кларион.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2395
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Просто баловался...

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

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

  PROGRAM

  MAP
    GetType(*BYTE pVal), LONG, PROC
    GetType(*LONG pVal), LONG, PROC
  END

b                             BYTE
l                             LONG
a                             ANY

  CODE
  a = b
  GetType(a)
  a = l
  GetType(a)
  
GetType                       PROCEDURE(*BYTE pVal)
  CODE
  MESSAGE('byte')
  RETURN DataType:BYTE
  
GetType                       PROCEDURE(*LONG pVal)
  CODE
  MESSAGE('long')
  RETURN DataType:LONG
  
С уважением, ДП

Аватара пользователя
vic7tar
Ветеран
Сообщения: 323
Зарегистрирован: 09 Февраль 2017, 20:12

Просто баловался...

Сообщение vic7tar »

Дед Пахом писал(а):
07 Февраль 2020, 11:22
PROGRAM

MAP
GetType(*BYTE pVal), LONG, PROC
...
Чот не работает.
C10, Win10x64

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2395
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Просто баловался...

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

vic7tar писал(а):
07 Февраль 2020, 12:49
Чот не работает.
Прошу прощения, не то, вот так работает, правда без ANY.

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

b                             BYTE
l                             LONG

  CODE
  GetType(b)
  GetType(l)
С уважением, ДП

Аватара пользователя
vic7tar
Ветеран
Сообщения: 323
Зарегистрирован: 09 Февраль 2017, 20:12

Просто баловался...

Сообщение vic7tar »

Как я понял, нужно определить тип внутри
Admin писал(а):
07 Февраль 2020, 4:04
VariableType(*ANY var),STRING
На входе -> any, значение хранится в long (byte...long) или в real (для ulong) для целых чисел.
a# = var - идёт уже правильное преобразование.
Хранится ли где-нибудь тип содержимого - пока не знаю.
C10, Win10x64

Ответить