Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.041 c
2-1127728182
Алексей2
2005-09-26 13:49
2005.10.23
Убрать обработчик события


6-1120546729
Интиресующийся
2005-07-05 10:58
2005.10.23
И снова TServerSocket!


1-1127933261
френк
2005-09-28 22:47
2005.10.23
Загрузка CPU определенным приложением


4-1124354962
Black Krok
2005-08-18 12:49
2005.10.23
Определение координат перетаскиваемого окна


14-1128079411
oldman
2005-09-30 15:23
2005.10.23
Вера, Надежда, Любовь и мать их Софья.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский