Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.011 c