Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-81813
Yakudza
2003-08-13 19:24
2003.08.25
Как написать буквы форме ?


1-81764
Berezne
2003-08-14 12:02
2003.08.25
Глюки при печати


14-81946
rdv
2003-08-06 11:14
2003.08.25
компоненты для HASP


1-81780
lightix
2003-08-14 11:03
2003.08.25
Из даты узнать наименование месяца, дня недели и т.п.


7-81982
Winni
2003-06-05 09:29
2003.08.25
Программа работает не так под Windows XP.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский