Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.25;
Скачать: CL | DM;

Вниз

StrToInt   Найти похожие ветки 

 
revo   (2003-08-12 12:58) [0]

Добрый день!
Как определить (до применения StrToInt(S)), имеет ли S численный эквивалент?


 
NAlexey ©   (2003-08-12 12:59) [1]

Val


 
Внук ©   (2003-08-12 13:15) [2]

А до применения не надо, достаточно ловить исключение


 
cjiohobaji ©   (2003-08-12 13:21) [3]

Попробуй
int StrToIntDef(const System::AnsiString S, int Default);

почитай в хэлпе, если конвертация невозможна возвращает Default


 
Юрий Федоров ©   (2003-08-12 13:27) [4]

>>cjiohobaji © (12.08.03 13:21) [3]
А если возможна и там как раз Default строкой записан ?


 
Плохиш_   (2003-08-12 13:37) [5]

А проверить каждый символ слабо?


 
cjiohobaji ©   (2003-08-12 13:42) [6]

не понял если конвертация возможна возвращает конвертированное значение, иначе возвращет Default например ты его определил "-1"


 
Verg ©   (2003-08-12 13:45) [7]


> Плохиш_
> А проверить каждый символ слабо?


Пример:

3147483647

- Это Integer?


 
wl ©   (2003-08-12 13:47) [8]

to Плохиш_ (12.08.03 13:37) [5]

Это не так просто, например, в выражении "54-", все символы пройдут проверку, но попытка перевода выдаст исключение(сам не проверял правда). Проще ловить исключения.


 
panov ©   (2003-08-12 14:04) [9]

function isInteger(const s: String): Boolean;
var
i,Len,LenMax: Integer;
begin
Result := False;
if s="" then Exit;
Len := Length(s);
LenMax := Length(IntTostr(MaxInt));
case s[1] of
"-": if Len>LenMax+1 then Exit;
else if Len>LenMax then Exit;
end;
if not (s[1] in ["0".."9","+","-"]) then Exit;
for i := 2 to Length(s) do if not (s[i] in ["0".."9"]) then Exit;
Result := True;
end;


 
Шёл мимо   (2003-08-12 14:04) [10]

NAlexey © (12.08.03 12:59) [1 - й]
лучший ответ и ни каких извращений (проверить Code = 0)


 
Verg ©   (2003-08-12 14:07) [11]


> panov ©


Ну так, что скажет isInteger на

3147483647

??


 
Reindeer Moss Eater ©   (2003-08-12 14:08) [12]

Как определить (до применения StrToInt(S)), имеет ли S численный эквивалент?

Можно проверить, что все символы в строке - цифры, и при этом получить исключение при вызове StrToInt.


 
Плохиш_   (2003-08-12 14:12) [13]

Детский сад какой-то
Может кто-нибуть раскажет как программку "Привет мир" написать,
а то "Hello world" работает, а "Привет мир" не компилиться


 
icWasya ©   (2003-08-12 14:14) [14]

а исходники влом посмотреть??
function StrToInt(const S: string): Longint;
var
E: Integer;
begin
Val(S, Result, E);
if E <> 0 then
ConvertError(FmtLoadStr(SInvalidInteger, [S]));
end
;


 
panov ©   (2003-08-12 14:19) [15]

Verg © (12.08.03 14:07) [11]

Проверь да и поправь... в чем проблема-то? -)

После 2-х минутной отладки и такое пойдет-)


 
Плохиш_   (2003-08-12 14:20) [16]

2icWasya © (12.08.03 14:14) [14]

Ты чего, крютые парни исходников не смотрят, книжек не читают и головой не думают.


 
Внук ©   (2003-08-12 14:23) [17]

>>icWasya © (12.08.03 14:14) [14]
Угу, и вдобавок подумать, почему же была написана StrToInt, а не ограничились просто Val.
>>Плохиш_ (12.08.03 14:12) [13]
Я расскажу. За умеренную плату.


 
Verg ©   (2003-08-12 14:38) [18]


> panov ©


:)))))

> После 2-х минутной отладки и такое пойдет-)


Ну да, после двухминутной отладки пойдет во такое:


> function isInteger(const s: String): Boolean;
> var
> i,Len,LenMax: Integer;
> begin
> Result := False;
> if s="" then Exit;
> Len := Length(s);
> LenMax := Length(IntTostr(MaxInt));
> case s[1] of
> "-": if Len>LenMax+1 then Exit;
> else if Len>LenMax then Exit;
> end;
> if not (s[1] in ["0".."9","+","-"]) then Exit;
> for i := 2 to Length(s) do if not (s[i] in ["0".."9"])
> then Exit;
try
StrToInt(S);

> Result := True;
except
end;
> end;


 
Плохиш_   (2003-08-12 14:38) [19]

2Внук © (12.08.03 14:23) [17]
Что и даже заплатищь ;-)


 
Anatoly Podgoretsky ©   (2003-08-12 14:44) [20]

Verg © (12.08.03 14:38) [18]
Ой не надо голову в песок прятать, кроме исключительных случаев, программа на продажу.


 
Verg ©   (2003-08-12 14:53) [21]


> Ой не надо голову в песок прятать, кроме исключительных
> случаев, программа на продажу


Че-то... не понял. Два раза даже вслух сказал :)) - Не не врубаюсь...
Какие страусы на продажу?... Да и пол бетонный.... :)


 
NAlexey ©   (2003-08-12 14:56) [22]

Попробую предположить:
>Ой не надо голову в песок прятать
Возможно эта фраза насчет "тихого" исключения.
>программа на продажу.
Теряюсь...


 
pasha_golub ©   (2003-08-12 15:03) [23]

Может Verg имел ввиду, что функция не проверяет диапазон значений, ИМХО?
PS То есть выходит за пределы LongInt... Так-то все правильно, но вот если выходит за пределы, то плёхо


 
Anatoly Podgoretsky ©   (2003-08-12 15:16) [24]

Verg © (12.08.03 14:53) [21]
Что бы не всплывали сообщения об ошибка, создает впечатление бесглючной.


 
Verg ©   (2003-08-12 15:17) [25]


> Может Verg имел ввиду, что функция не проверяет диапазон
> значений, ИМХО?


Вот это - 2147483647 - MaxInt
А на это - 3147483647 StrToInt сделает Exception, хотя 1-я версия (:)) isInteger скажет, что "да, это Integer!"
Можно было поменять ЛЮБУЮ цифру у 2147483647 на большую и все, StrToInt не прошел бы.
Ситуация в результате анекдотична - мы будем вынуждены написать аналог ф-ции Val, для того, чтобы последующий StrToInt не
дал исключения :) Не маразм ли?


 
Verg ©   (2003-08-12 18:00) [26]

А анекдот такой:
Приходит мужик ко врачу и жалуется:
- у меня яйца синие!
- Надо ампутировать, - говорит врач
Тогда мужик приходит к глав-врачу с той же жалобой и рецепт тот дает тот же.
Идет мужик к профессору, потом к академику - все то же самое: ампутировать.
Бедняга пошел к бабке - знахарке.
- Бабушка, что мне делать, вот яйца посинели. Все говорят, что ампутировать надо. А как же мне кастратом то жить?!
- Милок, я сейчас тебе травки специальной наварю, настоечку тебе дам...
Ну наварила, налила, тот выпил...
- ну и что теперь бабушка?
- а ты встань на табуретку, сынок, попрыгай теперь, яйца-то твои сами и отподут уже...



Страницы: 1 вся ветка

Текущий архив: 2003.08.25;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.018 c
8-81840
lds
2003-04-24 13:45
2003.08.25
Графика на WinAPI


4-82004
Mortal
2003-06-22 18:10
2003.08.25
Отловить PopUp


3-81597
nortsov
2003-07-29 13:58
2003.08.25
firebird & TQuery


1-81698
Dimon
2003-08-11 12:22
2003.08.25
PrintDialog


14-81879
_Alex_
2003-08-08 14:22
2003.08.25
пинпонг в стиле матрицы