StrToIntDef — Функция Delphi

StrToIntDef

Convert a string to an integer value, with a default value.

Declaration

Source position: sysstrh.inc line 122

const S : string ;

Description

StrToIntDef will convert a string to an integer. If the string contains invalid characters or has an invalid format, then Default is returned.

To be successfully converted, a string can contain a combination of numerical characters, possibly preceded by a minus sign ( — ). Spaces are not allowed.

Errors

See also

Convert an integer value to a decimal string.

StrToIntDef — Функция Delphi

В этом уроке мы рассмотрим функции преобразования чисел в строки и строк в числа.
Давайте рассмотрим часто используемые функции StrToInt, IntToStr, FloatToStr, StrToFloat. Во многих случаях эти функции являются очень полезными в том плане, что они позволяют преобразовывать целочисленные и нецелочисленные переменные типов Integer, Byte, Double, Real и т.п. в их строковое представление в переменную типа String и обратно, если это возможно. Рассмотрим непосредственно сами функции по порядку.
[cc lang=»delphi»]var a: integer;
s: string;
begin
a := 12345;
s := IntToStr(a);
// в результате переменная s будет содержать в себе строку ‘12345’
end;[/cc]
Т.е. функция IntToStr позволяет преобразовывать целочисленную переменную типа integer или byte в ее строковое представление в переменную типа string;

Обратную возможность реализовывает функция StrToInt.
[cc lang=»delphi»]var a: integer;
s: string;
begin
s := ‘12345’; // В s должно быть введено обязательно целочисленное число без лишних символов!
// иначе программа, во время выполнения «конвертации» завершит свою работу
// с ошибкой.
a := StrToInt(s);
// в результате переменная a будет содержать в себе число 12345.
end;[/cc]

Те же возможности нам помогают реализовать функции FloatToStr и StrToFloat, однако они уже позволяют работать с нецелочисленными переменными типа Double, Real и т.п. Работа с ними абсолютно аналогична работе с функциями IntToStr и StrToInt.
[note]Стоит отметить одну важную особенность при переводе строки в нецелочисленное число. В качестве плавающей запятой в «строках-числах» нужно использовать символ «точка», а не символ «запятая». При переводе нецелочисленного числа в строку эта особенность учитывается функцией FloatToStr автоматически.[/note]

Функция Trystrtoint

04.04.2014, 01:32

Перегрузка операций: friend-функция или функция-член класса
Здравствуйте, меня интересует вопрос, в чем разница при перегрузке операторов через operator и.

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба, угу), в которой.

Какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()?
какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()

04.04.2014, 01:36 2

Решение

04.04.2014, 01:43 3

То же самое что делает функция StrToInt, т.е. преобразует строковое представление целого числа в машинное представление целого числа и записывает его в переменную целого типа. Но в отличие от StrToInt проверяет валидность строкового представления перед (в процессе) преобразованием, что позволяет избежать возникновения исключения во время работы программы.

Мой сайт

AnsiExtractQuotedStr(var Src: PChar; Quote: Char): string — делает то же, что и функция AnsiDequotedStr, но результат возвращается вместо исходной строки, которая имеет тип PChar.

AnsiPos(const Substr, S: string): Integer — выполняет те же действия, что и функция Pos, но в отличие от нее поддерживает работу с многобайтовой MBCS-кодировкой.

AnsiSameCaption(const Text1, Text2: string): Boolean — сравнивает две строки, не делая различие между заглавными и строчными буквами, а также не учитывая символ ‘&’; учитывает местный язык.

AnsiSameStr(const S1, S2: string): Boolean — сравнивает строки, делая различие между строчными и заглавными буквами; учитывает местный язык.

AnsiSameText(const S1, S2: string): Boolean — сравнивает строки, не делая различие между строчными и заглавными буквами; учитывает местный язык.

CompareStr(const S1, S2: string): Integer — выполняет сравнение двух строк, делая различие между строчными и заглавными буквами; не учитывает местный язык. Возвращаемое значение меньше нуля, если S1 S2.

DateTimeToStr(const DateTime: TDateTime): string — преобразует значение даты и времени в строку.

DateTimeToString(var Result: string; const Format: string; DateTime: TDateTime) — преобразует значение даты и времени в строку, выполняя при этом форматирование в соответствии со значением строки Format. Управляющие символы строки Format подробно описаны в справочнике по среде Delphi.

Format(const Format: string; const Args: array of const): string — форматирует строку в соответствии с шаблоном Format, заменяя управляющие символы шаблона на значения элементов открытого массива Args. Управляющие символы подробно описаны в справочнике по среде Delphi.

BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string — преобразует булевское значение в строку. Если параметр UseBoolStrs имеет значение False, то результатом работы функции является одно из значений ‘0’ или ‘-1’. Если же параметр UseBoolStrs имеет значение True, то результатом работы является одно из значений ‘FALSE’ или ‘TRUE’ (программист может задать другие значения; о том, как это сделать, читайте в справочнике по системе Delphi).

IntToHex(Value: Integer; Digits: Integer): string — возвращает шестнадцатиричное представление целого числа Value. Параметр Digits задает количество цифр результирующей строки.

IsDelimiter(const Delimiters, S: string; Index: Integer): Boolean — проверяет, является ли символ S[Index] одним из символов строки Delimiters. Функция поддерживает работу с многобайтовой MBCS-кодировкой.

IsValidIdent(const Ident: string): Boolean — возвращает True, если строка Ident является правильным идентификатором языка Delphi.

Илон Маск рекомендует:  Что такое код mcal_next_recurrence

LastDelimiter(const Delimiters, S: string): Integer — возвращает индекс последнего вхождения одного из символов строки Delimiters в строку S.

QuotedStr(const S: string): string — преобразует исходную строку в строку, взятую в одиночные кавычки; внутри строки символы кавычки дублируются.

SameText(const S1, S2: string): Boolean — сравнивает строки, не делая различие между строчными и заглавными буквами; учитывает местный язык.

StringOfChar(Ch: Char; Count: Integer): string — возвращает строку, в которой повторяется один и тот же символ. Количество повторений задается параметром Count.

StrToBool(const S: string): Boolean — преобразует строку в булевское значение.

StrToBoolDef(const S: string; const Default: Boolean): Boolean — преобразует строку в булевское значение. В случае невозможности преобразования, функция возвращает значение, переданное через параметр Default.

StrToDate(const S: string): TDateTime — преобразует строку со значением даты в числовой формат даты и времени.

StrToDateDef(const S: string; const Default: TDateTime): TDateTime — преобразует строку со значением даты в числовой формат даты и времени. В случае невозможности преобразования, функция возвращает значение, переданное через параметр Default.

StrToDateTimeDef(const S: string; const Default: TDateTime): TDateTime — преобразует строку в числовое значение даты и времени. В случае невозможности преобразования, функция возвращает значение, переданное через параметр Default.

StrToInt(const S: string): Integer — преобразует строку в целое число. Если строка не может быть преобразована в целое число, функция генерирует исключительную ситуацию класса EConvertError (обработка исключительных ситуаций рассматривается в главе 4).

StrToIntDef(const S: string; Default: Integer): Integer — преобразует строку в целое число. Если строка не может быть преобразована в целое число, функция возвращает значение, заданное параметром Default.

StrToInt64(const S: string): Int64 — 64-битный аналог функции StrToInt — преобразует строку в 64-битное целое число. Если строка не может быть преобразована в 64-битное число, функция генерирует исключительную ситуацию класса EConvertError (обработка исключительных ситуаций рассматривается в главе 4).

StrToTime(const S: string): TDateTime — преобразует строку в числовой формат времени. Если строка не может быть преобразована в числовой формат времени, функция генерирует исключительную ситуацию класса EConvertError (обработка исключительных ситуаций рассматривается в главе 4).

StrToTimeDef(const S: string; const Default: TDateTime): TDateTime — преобразует строку в числовой формат времени. В случае ошибки преобразования, функция возвращает значение, заданное параметром Default.

Trim (const S: WideString): WideString — Unicode-аналог функции Trim — возвращает часть строки S без лидирующих и завершающих пробелов и управляющих символов.

TrimLeft (const S: string): string — возвращает часть строки S без лидирующих пробелов и управляющих символов.

TrimLeft (const S: WideString): WideString — Unicode-аналог функции TrimLeft — возвращает часть строки S без лидирующих пробелов и управляющих символов.

TrimRight (const S: string): string — возвращает часть строки S без завершающих пробелов и управляющих символов.

TrimRight (const S: WideString): WideString — Unicode-аналог функции TrimRight — возвращает часть строки S без завершающих пробелов и управляющих символов.

UpperCase (const S: string): string — преобразует все строчные буквы строки S в заглавные; не учитывает местный язык (в преобразовании участвуют лишь символы в диапазоне от ‘a’ до ‘z’).

WideFormat (const Format: WideString; const Args: array of const): WideString — Unicode-аналог функции Format, учитывающий символы местного языка, — форматирует строку в соответствии с шаблоном Format, заменяя управляющие символы в шаблоне на значения элементов открытого массива Args. Управляющие символы подробно описаны в справочнике по системе Delphi.

WideFmtStr (var Result: WideString; const Format: WideString; const Args: array of const) — аналог функции WideFormat. Отличие в том, что WideFmtStr возвращает результат через параметр Result, а не как значение функции.

WideLowerCase (const S: WideString): WideString — Unicode-аналог функции LowerCase (учитывает местный язык) — преобразует все заглавные буквы строки S к строчным буквам

WideSameCaption (const Text1, Text2: WideString): Boolean — Unicode-аналог функции AnsiSameCaption — сравнивает две строки, не делая различие между строчными и заглавными буквами, а также не учитывая символ ‘&’; учитывает местный язык.

WideSameStr (const S1, S2: WideString): Boolean — Unicode-аналог стандартной операции сравнения строк — сравнивает две строки, делая различие между строчными и заглавными буквами.

WideSameText (const S1, S2: WideString): Boolean — Unicode-аналог функции SameText (учитывает местный язык) — сравнивает строки, не делая различие между строчными и заглавными буквами.

WideUpperCase (const S: WideString): WideString — Unicode-аналог функции UpperCase (учитывает местный язык) — преобразует все строчные буквы строки S в заглавные.

WrapText (const Line: string; MaxCol: Integer = 45): string — разбивает текст Line на строки, вставляя символы переноса строки. Максимальная длина отдельной строки задается параметром MaxCol.

WrapText (const Line, BreakStr: string; const BreakChars: TSysCharSet; MaxCol: Integer): string — более мощный аналог предыдущей функции — разбивает текст Line на строки, вставляя символы переноса строки.

AnsiToUtf8 (const S: string): UTF8String — перекодирует строку в формат UTF8.

PUCS4Chars (const S: UCS4String): PUCS4Char — возвращает указатель на первый символ строки формата UCS-4 для работы со строкой, как с последовательностью символов, заканчивающейся символом с кодом нуль.

StringToWideChar (const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar — преобразует стандартную строку к последовательности Unicode-символов, завершающейся символом с кодом нуль.

UCS4StringToWideString (const S: UCS4String): WideString — преобразует строку формата UCS-4 к строке формата Unicode.

Utf8Decode (const S: UTF8String): WideString — преобразует строку формата UTF-8 к строке формата Unicode.

Utf8Encode (const WS: WideString): UTF8String — преобразует строку формата Unicode к строке формата UTF-8.

Utf8ToAnsi (const S: UTF8String): string — преобразует строку формата UTF-8 к стандратной строке.

WideCharLenToString (Source: PWideChar; SourceLen: Integer): string — преобразует строку формата Unicode к стандартной строке. Длина исходной строки задается параметром SourceLen.

Илон Маск рекомендует:  Структуры с меняющимися размерами данных

WideCharLenToStrVar (Source: PWideChar; SourceLen: Integer; var Dest: string) — аналог предыдущей функции — преобразует строку формата Unicode к стандартной строке. Длина исходной строки задается параметром SourceLen, а результат возвращается через параметр Dest.

WideCharToString (Source: PWideChar): string — преобразует последовательность Unicode-символов, завершающуюся символом с кодом нуль, к стандартной строке.

WideCharToStrVar (Source: PWideChar; var Dest: string) — аналог предыдущей функции — преобразует последовательность Unicode-символов, завершающуюся символом с кодом нуль, к стандартной строке. Результат возвращается через параметр Dest.

WideStringToUCS4String (const S: WideString): UCS4String — преобразует строку формата Unicode к строке формата UCS-4

Как заставить StrToInt, StrToIntDef игнорировать шестнадцатеричные значения?

У меня есть переменная, которая может содержать строку или целое число. Поэтому я использую If StrToIntDef(Value) > 0 , чтобы решить, обрабатываю ли строки или целые числа. Но это не удается, когда строка начинается с «x» или «X». Я предполагаю, что он считает шестнадцатеричное число и преобразует его в целое число:

Как заставить функцию преобразования игнорировать шестнадцатеричные значения?

Я думаю, что с надежной стороны вы должны подтвердить, что каждый символ — это цифра.

Однако, если вы просто хотите определить, является ли строка числовой, то вы можете сделать это следующим образом:

Даже это несовершенно, потому что это позволит значение, подобное ‘1-2’ . Но я уверен, что вы можете изменить код, чтобы принимать только ‘-‘ в качестве первого символа.

Обратите внимание, что ваш существующий тест для числа StrToIntDef(Value) > 0 будет обрабатывать нулевые или отрицательные числа как строки. Это действительно то, что вы намерены.

StrToIntDef — Функция Delphi

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

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


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

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

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

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


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

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

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;

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

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

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


> кому надо, пусть перебирает допустимые символы. 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


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

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


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

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

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


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

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

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

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


> 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;

Если сыр-бор загорелся вокруг 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.

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

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

Илон Маск рекомендует:  float в теории и на практике

StrToIntDef — Функция Delphi

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

zdwork
Статус: 6-й класс
Рейтинг: 786
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 451
puporev
Статус: Профессионал
Рейтинг: 293
Перейти к консультации №:

Какие функции преобразования типов есть в Delphi 7 (например StrToInt)?

Состояние: Консультация закрыта

Здравствуйте, Макаров Владимир Васильевич!
Функция полно, если пишете не в блокноте то можно нажать клавиши Ctrl+пробел и начать набирать
Str ,Float , int . и вам покажут возможные вариации.
(StrToIntDef() FloatToStr() StrToFloat() . )

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Здравствуйте, Макаров Владимир Васильевич!
Основной перечень функций для преобразования типов можно посмотреть здесь:
http://ftf.grsu.by/UchProc/konspekt/delphi/ch05
или в более компактном виде:
http://na-start.narod.ru/material/delphi02.htm

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Виктор Пырлик

Тип1ТоТип2 — это скорее конвертация а не преобразование.. Приведение типа, в Delphi как и в других языках выполняется или явным указанием типа, например TObject(x) или явным именованием-ссылкой, например (Sender as TDataSet).
Конвертация есть для всех основных типов
DateTimeToStr
DateToStr
TimeToStr
IntToStr
FloatToStr (FloatToStrF)
IntToHex
———————
и обратные им.. Так же, есть «безопасные», это когда, в случае ошибки или неверного входного параметра, возвращается значение по умолчанию.

неизвестный

А как преобразовать TStrings в PAnsiChar или заполнить в массив Strings или как нибудь сохранить в файл?

Виктор Пырлик

TStrings — это массив String (AnsiString) т.е. это набор строк и преобразовать в PChar не выйдет (это вроде как пинал с ручками преобразовать в карандаш).
Но, можно получить его свойство Text — а это уже строка.
вот небольшой пример:

Функции Delphi

Стандартные функции Delphi:

Для проведения всевозможных математических вычислений и многочисленных преобразований язык программирования Delphi содержит библиотеки стандартных процедур и функций. Давайте подробнее рассмотрим стандартные функции Delphi.

Между значением и именем функции существует зависимость. Поэтому всякая функция может быть представлена как операнд некоторого выражения (к примеру, в инструкции присваивания). Для возведения числа в n-ую степень достаточно записать

откуда ln — функция, вычисляющая натуральный логарифм числа exp(x), exp — функция, вычисляющая экспоненту в степени x, x — число, n-ую степень которого надо найти, а n — степень числа x. Каждая функция обладает следующими характеристиками: тип значений, тип параметров.

Должно существовать соответствие между типом переменной (ей присваивается определенное значение функции) и типом функции. И в то же время необходимо соответствие между типом фактического параметра данной функции (фактический параметр — это параметр, который указывается при обращении к функции) и типом формального параметра. В противном случае компилятором выводится сообщение об ошибке.

Математические функции Delphi:

Библиотеки языка Delphi включаются в себя и множество математических функций:

Величину угла при использовании тригонометрических функций необходимо выражать в радианах. Чтобы преобразовать угол из градусов в радианы, используйте следующую формулу:

где a выражает угол в градусах; 3.1415926 означает число pi. На месте константы 3.1415926 с дробной частью для достижения большей точности чаще всего пользуются стандартной именованной константой pi. Тогда выражения для угла в пересчете в радианы будет выглядеть следующим образом:

Функции преобразования Delphi:

Наиболее частое использование функций преобразования связано с инструкциями, которые обеспечивают ввод/вывод какой-либо информации. Например, для вывода значения переменной c типом real в поле вывода диалогового окна (компонент Label), нужно провести преобразование числа в строку символов, которая собственно изображает данное число. Это можно достичь, применяя функцию FloatToStr, которая заменяет значение выражения (оно указано как параметр функции) его строковым представлением.

Пример.

В приведенном примере значение переменной m будете выведено в поле Label. В таблице ниже Вам будут представлены основные функции преобразования Delphi:

Применение функций Delphi:

В любом выражении функция используется как операнд. В качестве ее параметра можно выбрать переменную, константу, выражение определенного типа данных.

Примеры.

Структура функции Delphi

Как организована инструкция функции в языке Delphi? В любом языке программирования на первом этапе описания функции указывается ее заголовок. Далее за заголовком программист описывает раздел объявления констант const (если таковы имеются), затем занимается описанием раздела объявления типов type, далее следует раздел объявления переменных var и, наконец, раздел инструкций.

В приведенном примере в заголовке функции вначале указывается зарезервированное слово function, а следом идет имя функции. Далее в скобках программист перечисляет список параметров, и вслед за ним, используя символ «:», указывает тип значения функции. В конце каждого заголовка стоит символ «;». После заголовка следуют раздел констант, раздел типов, раздел переменных. Внутри раздела инструкций кроме констант и переменных, описанных соответственно в разделах const и var, может находится переменная result.

Когда инструкции функции завершат свое выполнение, значению переменной result присваивается значение функции. Таким образом, среди всех инструкций функций необходимое присутствие инструкции, которая бы присваивала переменной result окончательное значение функции. Обычно подобная инструкция есть последняя исполняемая инструкция функции. Представим пример функции FuntToKg, преобразующей фунты в килограммы.

StrtoInt64Def convert error in delphi

I am having small program having ConvertFunction which converts the string data to other formats. The return type of function is Variant. When i use StrToIntDef to convert integer value then it does without any error.

But now my number is very large so I want to use int64 instead of integer. When i use StrToInt64def function to convert its giving me error, Incompatiable types:Variant and int64.

Below are the both codes. Any idea whats wrong in this?

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL