Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2007, 00:33   #1
satana
Пользователь
 
Регистрация: 16.07.2007
Сообщений: 31
По умолчанию Проверить тип переменной

В php есть функция
Код:
is_int(var);
если переменная имеет тип integer то она возвратит true, есть ли что-нибудь такое в Delphi, нужно проверить является ли переменная целым числом.
satana вне форума Ответить с цитированием
Старый 01.09.2007, 01:41   #2
Rapid
Форумчанин
 
Аватар для Rapid
 
Регистрация: 01.09.2007
Сообщений: 747
По умолчанию

Можно написать свою функцию проверки, вот примерный код:

Код:
 
function Isint(ch : char) : Boolean;
begin
if (ch >= '0') and (ch <= '9') // цифры
or (ch = #8) // клавиша <Backspace>
then Isint := True // символ допустим
else Isint := False; // недопустимый символ
end;
Если число имеет больше одного знака, то функцию нужно использовать в качестве тела цикла, чтобы проверить все знаки.
Никому не верьте.

Последний раз редактировалось Rapid; 01.09.2007 в 20:44.
Rapid вне форума Ответить с цитированием
Старый 01.09.2007, 01:55   #3
satana
Пользователь
 
Регистрация: 16.07.2007
Сообщений: 31
По умолчанию

А как это сделать обработкой иключительной ситуации?
satana вне форума Ответить с цитированием
Старый 01.09.2007, 03:08   #4
Rapid
Форумчанин
 
Аватар для Rapid
 
Регистрация: 01.09.2007
Сообщений: 747
По умолчанию

Код:
 
try
a:= StrToInt(Edit1.Text);
except
on E: EConvertError do
ShowMessage('a is not integer value');
Этот код "ловит" ошибку, и если ошибка поймана, выполняются инструкции после слова do.
Никому не верьте.

Последний раз редактировалось Rapid; 02.09.2007 в 02:51.
Rapid вне форума Ответить с цитированием
Старый 02.09.2007, 16:11   #5
satana
Пользователь
 
Регистрация: 16.07.2007
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Rapid Посмотреть сообщение
Код:
 
try
a:= StrToInt(Edit1.Text);
except
on E: EConvertError do
ShowMessage('a is not integer value');
Этот код "ловит" ошибку, и если ошибка поймана, выполняются инструкции после слова do.
что то не получается...
Вот полный код моей процедуры!
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
a:integer;
begin
try
  a := StrToInt(edit1.Text);
except
on E: EConvertError do
ShowMessage('a is not integer value');
end;
end;
Если в эдит вводиш строку то работа программы прерывается и вылазиет ошибка делфифского дебагера EConvertError!
satana вне форума Ответить с цитированием
Старый 02.09.2007, 17:13   #6
Rapid
Форумчанин
 
Аватар для Rapid
 
Регистрация: 01.09.2007
Сообщений: 747
По умолчанию

Когда появляются ошибки времени выполнения (если ты запускаешь прогу из Дельф) то приходят 2 сообщения об ошибке (одно от дебагера, второе от винды) так вот, инструкция try ловит ошибку только в винде. Если сделать экзешник то ошибки не будет (тк экзешники уже не обрабатываются дельфийским дебагером)
Никому не верьте.
Rapid вне форума Ответить с цитированием
Старый 19.11.2010, 21:16   #7
iwp_work
Новичок
Джуниор
 
Регистрация: 19.11.2010
Сообщений: 2
По умолчанию

С уважением конечно к авторам, но так и хочется сказать:
неужели уже не осталось форумов, где пишут знающие люди, а не все кому не лень всякие свои догадки.
Проверить тип переменной через
try
except
end;
- это же ужас.

Вы на работу если будете устраиваться программистом, не вздумайте ляпнуть подобное

Есть же для этого нормальные методы, даже в хелпе описаны

Pascal
function VarType(const V: Variant): TVarType;

VarType returns the type code of the given variant:

VarType Contents of variant
varEmpty The variant is Unassigned.
varNull The variant is Null.
varSmallint 16-bit signed integer (type Smallint in Delphi, short in C++ ).
varInteger 32-bit signed integer (type Integer in Delphi, int in C++).
varSingle Single-precision floating-point value (type Single in Delphi, float in C++).
varDouble Double-precision floating-point value (type double).
varCurrency Currency floating-point value (type Currency).
varDate Date and time value (type TDateTime).
varOleStr Reference to a dynamically allocated UNICODE string.
varDispatch Reference to an Automation object (an IDispatch interface pointer).
varError Operating system error code.
varBoolean 16-bit boolean (type WordBool).
varVariant A variant.
varUnknown Reference to an unknown object (an IInterface or IUnknown interface pointer).
varShortInt 8-bit signed integer (type ShortInt in Delphi or signed char in C++)
varByte A Byte
varWord unsigned 16-bit value (Word)
varLongWord unsigned 32-bit value (type LongWord in Delphi or unsigned long in C++)
varInt64 64-bit signed integer (Int64 in Delphi or __int64 in C++)
varStrArg COM-compatible string.
varString Reference to a dynamically allocated string (not COM compatible).
varAny A CORBA Any value.

The value returned by VarType corresponds to the VType field of a TVarData record.

The type of a variant can be changed using VarAsType.
iwp_work вне форума Ответить с цитированием
Старый 19.11.2010, 23:41   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от satana Посмотреть сообщение
В php есть функция. Если переменная имеет тип integer то она возвратит true, есть ли что-нибудь такое в Delphi, нужно проверить является ли переменная целым числом.
Есть такая - в любом случае преобразует строку в число без эксепшена:
function StrToIntDef(const S: string; const Default: Integer): Integer;
И подобные.
mihali4 вне форума Ответить с цитированием
Старый 20.11.2010, 16:31   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

при собеседовании я бы уточнил
1. Узнать тип значания в переменной типа variant VarIsNULL.....
2. определить допустимость значения в строковой переменной try ... except;

второй вариант больше согласуется с логикой языка PHP (хотя этого языка я и не знаю).
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 20.11.2010, 17:26   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Есть же для этого нормальные методы, даже в хелпе описаны
Ух ты как...
Ты все время будешь полагаться на работу с Вариантами? Не вздумай ляпнуть это когда на работу будешь устраиваться.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FireFox проблема с переменной Romanbl4 JavaScript, Ajax 2 04.07.2008 02:27
как получить значение переменной smoke888 PHP 3 20.06.2008 02:11
Замена константы, переменной valerij Microsoft Office Excel 2 20.03.2008 21:16
Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной) Arkuz Общие вопросы Delphi 12 25.09.2007 20:47