Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

определение результата: string или integer. [D6, Win95/98, WinME, WinXP]


rom ©   (2004-11-12 06:30:00) 

Уважаемые господа дельфиры, помогите найти ответ на сложившуюся ситуацию:
Имеется задача, результатом которой может быть как integer так и string. Далее исходя из типа результата он обрабатывается по разному.Как определить является ли результат integer или он string?


KilkennyCat   (2004-11-13 14:21:00) [1]

strtointdef(s, уникальный_идентификатор_ошибки)


Defunct   (2004-11-13 11:22:00) [2]

Digitman ©   (12.11.04 14:43) [12]

> Try Result := StrToInt(Result)

IMHO не надо это.

Ведь можно просто

> Допустим в txt файле имеются строки:
> 123
> asdf
> wert
> 2345

> Хочу сделать проверку, что бы программа не вылетала с ошибкой если какой нибудь юзер специально укажет вместо параметров времени "адракадабру".

A : Array[1..x] of Variant;
S : String;

while not Eof(F) do
begin
 Read(F, S);
 inc(i);
 A[i] := S;
end;
..

Try
 // Действия над элементами массива A
Except
 ShowMessage('В Файле была "адракадабра" вместо чисел')
end;


rom   (2004-11-13 06:28:00) [3]

спасибо за ответы
попробую разобраться с примерами.
вообще эта вещь нужна для защиты от "дурака", т.е.
программа считывает из файла параметры и их обрабатывает
(в этом случае ini файл не подходит).Параметры должны быть
числом, к примеру установкой времени. Хочу сделать проверку, что бы программа не вылетала с ошибкой если какой нибудь юзер специально укажет вместо параметров времени "адракадабру".


Digitman   (2004-11-12 14:43:00) [4]


> rom   (12.11.04 06:30)  


решение до смешного простое :

function PrepareValue(s: String): Variant;
begin
Result := s;
try Result := StrToInt(Result) except end;  
end;

...

var
v: variant;

v := PrepareValue('чего-то там');

if TVarData(v).VType = varInteger then
 ЦЕЛОЕ СО ЗНАКОМ
else
 СТРОКА


PVOzerski   (2004-11-12 13:21:00) [5]

Дык это ж не разный тип возвращать надо, а конвертабельно/неконвертабельно в число (т. е. что-то булево, true/false). Проверять можно, например, через процедуру val.


Anatoly Podgoretsky   (2004-11-12 13:17:00) [6]

rom   (12.11.04 13:13) [8]
Текстовую во всех случаях


Megabyte-CeerCop   (2004-11-12 13:16:00) [7]

Создай дополнительную булевскую переменную, через которую передавай какой тип результата. True - int; false - text.
А при обработке проверяй эту переменную и вызывай соотв. код.


rom   (2004-11-12 13:13:00) [8]

Немного поясню ситуацию:
имеется текстовый файл,в string'овую переменную читаем строчку
из этого файла.
Далее необходимо определить какого типа информацию прочитали:
цифровую или текстовую.

Допустим в txt файле имеются строки:

123
asdf
wert
2345


PVOzerski   (2004-11-12 11:01:00) [9]

Можно, конечно, вернуть вариант или свою поделку в том же стиле. А надо?


Anatoly Podgoretsky   (2004-11-12 10:53:00) [10]

rom   (12.11.04 06:30)  
Паскаль не возволяет создавать функции такого вида
func: Integer, string;


Владислав   (2004-11-12 10:02:00) [11]

Например:
type
 TResultType = (rtString, rtInteger);
function DoMyFunction(var StrVar: string; var IntVar: Integer): TResultType;


MBo   (2004-11-12 10:02:00) [12]

>Имеется задача, результатом которой может быть как integer так и string
Ну так покажи, что это за задача у тебя


Erik1   (2004-11-12 09:58:00) [13]

overload непоможет, поскольку входные параметры неотличаются. А вот если определить процедуру и в нее передовать string или integer от можно написать 2 overload процедуры.
MyDetect(var Value: String); overload;
MyDetect(var Value: Integer); overload;


Alx2   (2004-11-12 08:01:00) [14]

overload?


Alex_Petr   (2004-11-12 06:36:00) [15]

VarType, VarIsStr ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо