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