![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
определение результата: 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 ?