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

Вниз

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

 
Dot   (2005-10-01 00:25) [0]

Как произвести StrToInt т.е. преобразовать строку в число без использования SysUtils?


 
Плохиш ©   (2005-10-01 00:38) [1]

str + F1


 
Плохиш ©   (2005-10-01 00:40) [2]

Пардон, val + F1


 
Delphi_is_cool ©   (2005-10-01 01:11) [3]


function StrToInt(const S: String) : Integer;
var
 E: Integer;
begin
 Val(S, Result, E);
end;


Вроде так ...


 
Джо ©   (2005-10-01 02:29) [4]


>  [3] Delphi_is_cool ©   (01.10.05 01:11)

А, простите, как вызывающий код узнает о том, содержалась ли в S корректная строка?


 
Signate ©   (2005-10-01 03:03) [5]

If the string is invalid, the index of the offending character is stored in Code; otherwise, Code is set to zero.

Code - это последний параметр процедуры Val


 
Джо ©   (2005-10-01 03:21) [6]


>  [5] Signate ©   (01.10.05 03:03)

Это было очень любезно с вашей стороны вставить сюда кусок из Справки. Но я, тем не менее, остаюсь в полной неизвестности и заинтригованности относительно того, как сторона, вызывающая функцию, приведенную в посте [3], узнает о возможной ошибке.


 
Antonn ©   (2005-10-01 05:38) [7]

function Str2Int(S: PChar): Integer;
asm
       XCHG     EDX, EAX
       XOR      EAX, EAX
       TEST     EDX, EDX
       JZ       @@exit

       XOR      ECX, ECX
       MOV      CL, [EDX]
       INC      EDX
       CMP      CL, "-"
       PUSHFD
       JE       @@0
@@1:    CMP      CL, "+"
       JNE      @@2
@@0:    MOV      CL, [EDX]
       INC      EDX
@@2:    SUB      CL, "0"
       CMP      CL, "9"-"0"
       JA       @@fin
       LEA      EAX, [EAX+EAX*4]
       LEA      EAX, [ECX+EAX*2]
       JMP      @@0
@@fin:  POPFD
       JNE      @@exit
       NEG      EAX
@@exit:
end;


 
Джо ©   (2005-10-01 05:51) [8]


>  [7] Antonn ©   (01.10.05 05:38)

То же самое :)

Как различить результат выполнения вот этих двух фрагментов:
1. Str2Int ("blablabla");
2. Str2Int ("0");

?


 
Antonn ©   (2005-10-01 07:23) [9]

Джо ©   (01.10.05 5:51) [8]
Как различить результат выполнения вот этих двух фрагментов:
1. Str2Int ("blablabla");
2. Str2Int ("0");

кому надо, пусть перебирает допустимые символы. StrtoInt учитывает? я привел его аналог.


 
Adder ©   (2005-10-01 09:03) [10]

Удалено модератором


 
Adder ©   (2005-10-01 09:10) [11]


> кому надо, пусть перебирает допустимые символы. StrtoInt
> учитывает? я привел его


"Отыщите 7 различий" (С)

function StrToInt(const S: string): Integer;
var
 E: Integer;
begin
 Val(S, Result, E);
 if E <> 0 then ConvertErrorFmt(@SInvalidInteger, [S]);
end;


(c) SysUtils.pas Delphi6


 
Signate ©   (2005-10-01 11:05) [12]


> Джо ©   (01.10.05 03:21) [6]
>
>
> >  [5] Signate ©   (01.10.05 03:03)
>
> Это было очень любезно с вашей стороны вставить сюда кусок
> из Справки. Но я, тем не менее, остаюсь в полной неизвестности
> и заинтригованности относительно того, как сторона, вызывающая
> функцию, приведенную в посте [3], узнает о возможной ошибке.
>


хмм... а чего не понятноего? Если конвертирование не удалось то в переменную Code записывается какое то число, а если все успешно, то код содержит 0 ...


 
Adder ©   (2005-10-01 12:30) [13]


> Signate ©   (01.10.05 11:05) [12]

ну и как сторона, вызывающая
> функцию, приведенную в посте [3], узнает
что находилось в локальной переменной Е?


 
XProger ©   (2005-10-01 15:42) [14]


function StrToInt(const str: string; def: integer = -1) : integer;
var
er : Integer;
begin
Val(str, Result, er);
if er <> 0 then
Result := def;
end;

// вызываем
k := StrToIntDef("lalala", -1000); // k = -1000
k := StrToIntDef("lalala"); // k = -1
k := StrToInt("100"); // k = 100


 
Adder ©   (2005-10-02 14:43) [15]


> XProger ©   (01.10.05 15:42) [14]

уже лучше, но не "на все случаи жизни" -)

//вызываем
k := StrToInt("-1");
и?


 
XProger ©   (2005-10-02 20:48) [16]

Adder, вернёт -1! Не верно разве? ;)

На все случаи жизни - грохать приложение при выявлении ошибки перевода? ;)))


 
Adder ©   (2005-10-02 21:08) [17]


> XProger ©   (02.10.05 20:48) [16]

На все случаи жизни - при появлении ошибки вызывать специальную функцию обработки ошибок, передавая ей код ошибки. А в ней  - по желанию, можно сообщение об ошибке выводить, а можно и систему грохать. -)

Второй вариант - написать функцию вида
function StrToInt(const str: string; var value:integer) : boolean;
которая результат преобразования будет возвращать в переменную value, а об успехе/не успехе (корректности value) можно будет судить по возвращаемому значению.
Или, например, так:
function StrToInt(const str: string; var ErrorCode:integer) : integer;


 
isasa ©   (2005-10-02 21:45) [18]

Если сыр-бор загорелся вокруг EConvertError exception, то есть функция (SysUtils)

function StrToIntDef(const S: string; const Default: Integer): Integer;
Converts a string that represents an integer (decimal or hex notation) to a number with error default.


 
Antonn ©   (2005-10-03 06:46) [19]

isasa ©   (02.10.05 21:45) [18]
Если сыр-бор загорелся вокруг EConvertError exception, то есть функция (SysUtils)

а первый пост прочитать? :)



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

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

Наверх




Память: 0.51 MB
Время: 0.049 c
2-1128193671
NikNet
2005-10-01 23:07
2005.10.23
Можно ли положить PupupMenu как панель


14-1126765043
by
2005-09-15 10:17
2005.10.23
DOA vs. ODAC. Програмирующие Oracle + Delphi (Builder) ваш выбор?


14-1128188730
Adil
2005-10-01 21:45
2005.10.23
Windows XP Home Edition User Interface


3-1126612004
ilya_ae
2005-09-13 15:46
2005.10.23
Фотографии с БД


3-1126194426
kreyl
2005-09-08 19:47
2005.10.23
MSSQL2000 Как передать в процедуру имя таблицы в виде строки?