Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
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
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Иногда не хватает определения типа данных у переменной.
Это пример тоже костыль. Портит переменную.
Не помню, клонировать переменную можно или нет средствами Кларион.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
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
На входе -> any, значение хранится в long (byte...long) или в real (для ulong) для целых чисел.
a# = var - идёт уже правильное преобразование.
Хранится ли где-нибудь тип содержимого - пока не знаю.