IntToStr — Функция Delphi

Delphi-Help

IntToStr

IntToStr

Описание

1. function IntToStr ( Number : Integer ) : string;
2. function IntToStr ( BigNumber : Int64 ) : string;

Функция IntToStr преобразует целое число Integer или Int64 в строку
Она имеет две формы: последняя, поддерживает очень большие целые числа.
Обычно используется в целях отображения результата.

Пример кода

var
NormalInteger : Integer;
BigInteger : Int64;
begin
NormalInteger := 2147483647; // Самое большое значение Integer
BigInteger := 9223372036854775807; // Самое большое значение Int64
ShowMessage(‘NormalInteger : ‘+ IntToStr (NormalInteger));
ShowMessage(‘BigInteger : ‘+ IntToStr (BigInteger));
ShowMessage(‘Calculated number : ‘+ IntToStr (27 * 4));
end;

NormalInteger : 2147483647
BigInteger : 9223372036854775807
Calculated number : 108

IntToStr — Функция Delphi

Нужно перевести String в Integer. Спасибо.

А как преобразовать обратно — Integer в String;

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

> Src_Crab (12.07.02 21:02)
> Спасибо.
>
> А как преобразовать обратно — Integer в String;

Ты наверное удивишся
IntToStr(что-нибудь)

Петров день — не забудем.

procedure TForm1.FormCreate(Sender: TObject);
var s:string;
begin
edit1.text:=Strtoint («two»);
end;

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

Ошибка компиляции: Incompatible types: «String» and «Integer»

я тоже не догоняю в чём вопрос.
Edit1.text:=StrToInt(«2»);
..или я совсем не догнал? :)

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
i:=10;
edit1.text:=InttoStr(i);
end;
Тогда В edit1 будет написано 10.

Результат StrToInt имеет тип integer, а в скобочках указывается строка, содержащая число, например «6542»

Результат InttoStr имеет тип String, а в скобочках указывается integer, например 6542.

edit1.text имеет тип String;

тьфу. сорри в моём сообщении наоборот
Edit1.text:=IntToStr(2);
путаю постоянно :)

IntToStr

А если подпрограмма нужна, то запилите себе функцию или процедуру с inttostr.Создаете новую форму и:

IntToStr, ..работающую так, как стандартные

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

Летели два верблюда — один рыжий, другой налево. Сколько весит килограмм асфальта, если ежику 24 года?

Летели два верблюда — один рыжий, другой налево. Сколько весит килограмм асфальта, если ежику 24 года?Единственное, что понял, что нужно оформить все это в виде процедуры. Ну если это так, то..

Delphi/Перевод переменных

Переменные можно перевести из одного типа в другой. Например, нужно в компоненте Edit отобразить число. Чтобы, изменить текст в Edit’e, нужно изменить его свойство Text. Что написано в Text, то отобразится в самом Edit’e. Тип свойтсва Text — string. Как отобразить число в Edit’e? Все очень просто. Существует команда IntToStr . Давайте мы её разберем.

Чтобы изменить свойство Text, нужно его «назвать». Общий вид вызова свойства какого-либо компонента имеет вид:

Теперь напишем простую программу, которая переводит переменную типа integer в тип string.

А как отобразить дробное число в Edit’e? Также как с целым числом, только команда другая — FloatToStr . Напишем такую же программу, только вместо integer — real.

Теперь усложним нашу программу — теперь она будет складывать числа в 2-х Edit’ах, а показывать результат в Edit 3-й. У вас появился вопрос: «Как сложить два числа из Edit’a?» Нужна обратная команда — StrToInt , она переводит string в integer.

Но мы поступили хитро — мы не использовали ни одной переменной. Можно было использовать их, но так было сложней. И напоследок про команду — StrToFloat , такая же как предыдущая, только вместо integer — real.

IntToStr — Функция Delphi

Работа со строками Delphi позволяет извлечь из строки необходимую информацию и представить её в нужном виде. Система предоставляет весь спектр необходимых функций для работы со строками Delphi и преобразования строк Delphi в необходимые форматы:

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

Непосредственно сами строки Delphi поддерживают единственную операцию, так называемую операцию конкатенации, то есть присоединения. Несмотря на «научное» название, операция конкатенации выполняет очень простую процедуру. С помощью операции конкатенации одна строка присоединяется к другой:

Результирующая строка S будет суммой двух слагаемых строк. Длина строки, то есть количество символов в строке, возвращается встроенной функцией

function Length(S: String): Integer;

Delphi работает со строками типа String, в котором длина строки записывается в начале строки, перед первым символом. Поэтому индекс первого символа в строке не 0, а 1. То есть, если:

S:=’Строка типа String’;

то S[1] — символ ‘С’, S[2] — символ ‘т’ , последний символ в строке — S[Length(S)], равный ‘g’.

Однако часто приходится иметь дело со строками типа PChar, которые использует операционая система Windows. В строках типа PChar длина строки определяется специальным символом конца строки — #0. Поэтому для использования функций Windows тип String необходимо предварительно переводить в тип PChar. Преобразование типа String в тип PChar выполняет функция

function PChar(S: String): PChar;

Для полноценной работы со строками Delphi используются следующие стандартные процедуры и функции:

Функции преобразования в числовой формат и обратно

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

функция IntToStr(N: Integer): String
Преобразует целое число N в строку.
функция StrToInt(S: String): Integer
Преобразует строку S в целое число.
функция FloatToStr(X: Extended): String
Преобразует число с плавающей точкой X в строку.
функция StrToFloat(S: String): Extended
Преобразует строку S в число с плавающей точкой.

Процедуры и функции преобразования дат и времени

Сначала собственно функции, предоставляющие информацию о текущих дате и времени:

функция Now: TDateTime
Возвращает текущую дату и время.
функция Date: TDateTime
Возвращает текущую дату.
функция Time: TDateTime
Возвращает текущее время.

Далее, функции, работающие с составляющими даты и времени (год, месяц, число, день недели, часы, минуты, секунды и даже миллисекунды):

функция DayOfWeek(Date: TDateTime): Integer
Возвращает текущий номер дня недели: 1 — воскресенье, 7 — суббота.
процедура DecodeDate(Date: TDateTime; var Year, Month, Day: Word)
Разбивает дату Date на год — Year, месяц — Month и день — Day.
процедура DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word)
Разбивает время Time на час — Hour, минуты — Min, секунды — Sec и миллисекунды — MSec.
функция EncodeDate(Year, Month, Day: Word): TDateTime
Объединяет год — Year, месяц — Month и день — Day в значение типа TDateTime.
функция EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime
Объединяет час — Hour, минуты — Min, секунды — Sec и миллисекунды — MSec в значение типа TDateTime.

Наконец, собственно, функции, переводящие дату и время из формата TDateTime в строчный формат:

функция DateTimeToStr(DateTime: TDateTime): String
Преобразует дату и время DateTime в строку.
функция DateToStr(Date: TDateTime): String
Преобразует дату Date в строку.
функция TimeToStr(Time: TDateTime): String
Преобразует время Time в строку.

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

функция AnsiLowerCase(const S: String): String
Возвращает строку S, преобразованную к нижнему регистру.
функция AnsiUpperCase(const S: String): String
Возвращает строку S, преобразованную к верхнему регистру.
функция Length(const S: String): Integer
Возвращает количество символов в строке S.
функция Trim(const S: String): String
Удаляет из строки S начальные и завершающие пробелы и управляющие символы.
функция TrimLeft(const S: String): String
Удаляет из строки S начальные пробелы и управляющие символы.
функция TrimRight(const S: String): String
Удаляет из строки S завершающие пробелы и управляющие символы.

Следующие функции сравнивают две строки между собой:

функция AnsiCompareStr(const S1, S2: String): Integer
Сравнивает две строки S1 и S2 с учётом регистра символов.
Возвращает значение 0 если S1>S2
функция AnsiCompareText(const S1, S2: String): Integer
Сравнивает две строки S1 и S2 без учёта регистра символов.
Возвращает значение 0 если S1>S2

Следующие функции осуществляют поиск в текущей строке подстроки, вставляют, удаляют или заменяют подстроку:

функция Pos(Substr: String; Str: String): Integer
Возвращает позицию (индекс) первого вхождения Substr в строке Str. Если Substr нет в Str, возвращает 0.
функция Insert(Source: String; var S: String; Index: Integer): Integer
Вставляет строку Source в строку S, начиная с номера символа, равного Index
процедура Delete(var S: String; Index, Count: Integer)
Удаляет из строки S подстроку, начинающуюся с номера символа, равного Index, и содержащую до Count символов.
функция StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): String
Заменяет в строке S подстроку OldPattern на строку NewPattern с учётом флага TReplaceFlags. Для работы с этой функцией нужно создать переменную типа TReplaceFlags — это множество, и включить в него одно или оба значения из следующих:
rfReplaceAll — будут заменены все вхождения. Если это значение не будет включено во множество, то будет заменено только первое вхождение;
rfIgnoreCase — замена будет без учёта регистра символов. Если это значение не будет включено во множество, то замена будет чувствительна к регистру символов.

Наконец, функция копирования части строки:

функция Copy(S: String; Index, Count: Integer): String
Возвращает подстроку строки S, начиная с номера символа, равного Index и содержащую до Count символов.

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

Илон Маск рекомендует:  Примеры оперативной памяти DDR3 отличия, отзывы

function RealToStr(X: Real; Count: Integer): String; //Count — количество цифр после запятой
var S: String;
N: Integer;
begin
S:=FloatToStr(X); //после запятой — длинная последовательность цифр
//DecimalSeparator — константа, содержащая истинный разделитель целой и дробной частей числа N:=Pos(DecimalSeparator, S); //позиция запятой в строке
//вычисляем длину строки с нужным количеством знаков после запятой:
if N=0 //если в строке нет запятой — это целое число, и
then N:=Length(S) //тогда просто выводим это число
else N:=N+Count; //иначе вычисляем длину строки
Result:=Copy(S, 1, N); //копируем часть строки в результат
end;

Или вот, к примеру, текст модуля, обеспечивающего ввод в компонент Edit только чисел.

Обзор компонентов Delphi В начало урока Создание интерфейса

Ян, добавлено 26.08.09, 00:55:10
Отличный урок, без лишних слов, всё по теме, нашёл то, чего не нашёл в других источниках. Спасибо. Yaksan, добавлено 8.09.09, 19:51:52
Уроки просто супер спс. Будем ждать продолжения :) Murod_tj, добавлено 15.09.09, 07:53:43
a как на счет выделение текста или строки? Автор, добавлено 15.09.09, 11:23:44
Текст или часть строки выделяются в рамках какого-либо окна, например, компонентов Edit или Memo. На сайте есть описание этих компонентов.
Человек, добавлено 19.02.10, 12:47:31
спасиб искал функцию для работы со строками. a как на счет выделение текста или строки? — для Мемо это SelStart, SelLength . Автор, добавлено 19.02.10, 15:56:44
Всё написано выше. Аноним, добавлено 28.02.10, 15:36:51
Помоему здесь ошибка:
«функция Copy(S: String; Index, Count: Integer): Integer
Возвращает подстроку строки S, начиная с номера символа, равного Index и содержащую до Count символов.»
copy должна возращать тип string Автор, добавлено 28.02.10, 18:40:07
Справедливо. Исправляю на
Copy(S: String; Index, Count: Integer): String; X-8973, добавлено 14.03.10, 20:23:05
Функции AnsiLoVerCase не существует. Есть функция AnsiLoWerCase. Автор, добавлено 15.03.10, 07:13:25
Спасибо!))) Исправил. Аноним, добавлено 16.04.10, 19:47:24
как прочитать дату? Автор, добавлено 17.04.10, 00:26:49
С помощью функции Now. Она даёт текущую дату и время. Можно сохранить в переменную типа TDate, или вывести с помощью метки Label:
Label1.Caption := DateToStr(Now); Андрей, добавлено 23.07.10, 08:07:58
Я бы внес корректировочку одну, потому как локали то бывают разные на машинах. и огрести можно по полной :-)

function RealToStr(X: Real; Count: Integer): String; //Count — количество цифр после запятой
var S: String;
N: Integer;
begin
S:=FloatToStr(X); //после запятой — длинная последовательность цифр
N:=Pos(DecimalSeparator, S); //позиция запятой в строке
N:=N+Count; //вычисляем длину строки с нужным количеством знаков после запятой
Result:=Copy(S, 1, N);
end;
Автор, добавлено 23.07.10, 09:06:23
Совершенно справедливая поправка. Но, возможно, начинающим будет более понятен первый вариант. А возникновение ошибки будет дополнительным стимулом для развития! Тем не менее спасибо — поправку учёл. Мельхиор, добавлено 9.08.10, 16:44:04
Здравствуйте!
Можете подсказать, пожалуйста, как посчитать кол-во строк в TString? Например, заполнена, переменная Unt: Tstrings каким-то текстом, разбитым на строки. Автор, добавлено 9.08.10, 20:02:41
Переход на новую строку кодируется последовательностью #13+#10. Подсчитайте количество вхождений и прибавьте единичку. Второй вариант: создайте переменную типа TStringList (ну или воспользуйтесь компонентом Memo), запишите в неё ваш текст — он сам на строчки разобъётся, и подсчитайте их. Про TStringList и Memo на сайте есть странички. Владимир, добавлено 8.01.11, 21:44:03
TString.Count — количество строк в TString. Учтите, что строки TString начинаются с нуля. Виктор, добавлено 14.03.11, 20:57:36
Прекрасный материал для учащихся школы изучающих информатику на профильном уровне!
Использую на уроках.
Спасибо! Мария, добавлено 8.04.11, 08:55:49
Подскажите, как определить количество вхождений в подстроки в строку? Автор, добавлено 8.04.11, 10:19:59
Мария, с помощью функции pos определяем первое вхождение подстроки, если оно вообще есть. Затем с помощью функции delete удаляем первые символы, ключая символы подстроки, и повторяем это в цикле, пока функция pos не равна нулю.

var Str, StrCopy, Substr: String;
N: Integer;
begin
N:=0; //Количество вхождений
StrCopy:=Str; //Чтобы не затереть оригинал, будем работать с копией
while pos(SubStr, StrCopy)<>0 do
begin
delete(StrCopy, 1, pos(SubStr, StrCopy)+Length(SubStr)-1);
N:=N+1;
end;
end; Вадим Мошев, добавлено 29.05.11, 13:43:56
Здравствуйте.
Скажите, у Вас опечаток в описаниях функций сравнения строк нет случайно?
А то формулировка
функция AnsiCompareStr(const S1, S2: String): Integer
Сравнивает две строки S1 и S2 с учётом регистра символов.
Возвращает значение 0 если S1>S2

Несколько непонятна. Может, имелось в виду :
Возвращает значение 0 если S1>S2
? Автор, добавлено 29.05.11, 14:22:48
Ну, конечно могут быть и ошибки, кто без греха.
Так что спасибо за помощь, Вадим, исправляю. Кстати, это не опечатка, а особенность отображения знаков в html-страницах.
Дело в том, что эти знаки также составляют элементы html-тегов, вот браузер и путается. иван, добавлено 9.06.11, 12:19:39
я читаю строеу с 10 по15 символ, если есть пробел мне надо удалить пробел и вывести строку как это сделать Автор, добавлено 9.06.11, 17:21:46
Смотрите список функций вверху, найдите подходящую. Не получится, давайте ваш вариант, найдем ошибку. Альбина Абенова, добавлено 22.06.11, 14:37:12
решите кто нить плизззз задачу по Делфи. Даны строки s1, s2 и символ С. Перед после каждого вхождения символа С в строку вставить строку s2 Иван, добавлено 2.08.11, 09:57:53
Здраствуйте, а какой функцией возможно вычислить количество строк в memo? Иван, добавлено 2.08.11, 10:10:09
функцию нашел. Автор, добавлено 2.08.11, 10:13:57
количество строк в Memo1: Memo1.Lines.Count Туся, добавлено 4.09.11, 15:32:40
При удалении подстроки используется ПРОЦЕДУРА delete, а не функция. исправьте пожалуйста, а то весь мозг сломала когда ошибку искала .^_^ Автор, добавлено 4.09.11, 15:37:52
Посмотрите внимательнее, Delete это именно функция, возвращающая, кроме изменения S, и собственное значение типа Integer. Я, правда, не описал его смысл, но тем не менее. Туся, добавлено 5.09.11, 13:11:18
Справка Делфи выдает
Delphi syntax: procedure Delete(var S: string; Index, Count:Integer);

и какое собственное значение типа Integer выдает Delete?
Другие источники тоже указывают что это процедура. Если интересно могу привести ссылки. Автор, добавлено 5.09.11, 21:28:53
Вот это и называется работа с первоисточниками! Я был невнимателен, простите, и спасибо за подсказку. Статью немедленно исправляю. Ерлан, добавлено 22.11.11, 14:34:25
Version 300
Charset «WindowsCyrillic»
Delimiter «,»
CoordSys Earth Projection 8, 1001, «m», 75, 0, 1, 13500000, 0 Bounds (13273605.238, 5282774.137) (13295340.939, 5306095.988)
Columns 1
X Char(1)
Data

Pline 2
13275451.93 5304308.518
13275466.01 5304287.43
Pen (2,2,139)
Pline 2
13275610.94 5304285.176
13275607.21 5304258.546
Pen (2,2,139)

Использую Memo на чиная с 11 строки первую цифру мне нужно присвоить в первую переменную через пробел вторую цифру во вторую переменную,
на 12 строке первую цифру мне нужно присвоить в третью переменную через пробел вторую цифру в четвертую переменную потом сделать над ними вычисления.
Это возможно? Если да то как? Автор, добавлено 22.11.11, 18:35:34
Так вы же и читаете статью «Работа со строками»! Применяйте соответствующие функции, и всё!

Сначала нужно выделить нужную строку.

S:=Memo.Lines[n];//n — нужная строка

Затем найти позицию пробела

k:=pos(‘ ‘, S);

Первое число

X1:=copy(S, 1, k-1);

Второе число аналогично, но сами подумайте. Ерлан, добавлено 24.11.11, 12:15:59
Спасибо Большое!
Сможете ли помочь новичку написать цикл с заменой
s:=Memo1.Lines[10] ;
k:=pos(‘ ‘, S);
x1:=copy(S, 1, k-1);
y1.Text:=copy(S, 13, k-1);
s:=Memo1.Lines[11] ;
k:=pos(‘ ‘, S);
x1:=copy(S, 1, k-1);
y1:=copy(S, 13, k-1);
// здесь произойдут вычисления где получу новые зн-я х2 и у2 их надо заменить // заместо 11 строки
s:=Memo1.Lines[14] ;
k:=pos(‘ ‘, S);
x1:=copy(S, 1, k-1);
y1.Text:=copy(S, 13, k-1);
s:=Memo1.Lines[15] ;
k:=pos(‘ ‘, S);
x1:=copy(S, 1, k-1);
y1:=copy(S, 13, k-1);
Автор, добавлено 24.11.11, 21:48:26
Если этот вопрос продолжение предыдущего, то второе число y1 найдено неверно. k — позиция пробела, т.е. для первого числа это конечная точка, а для второго — начальная. В функции pos сначала идёт строка, затем начальная позиция, затем количество символов. Для второго числа количество символов равно длина строки минус позиция пробела.

А заменить строку просто

Memo1.Lines[n]:=S;//n — нужная строка, S — текст замены Ерлан, добавлено 26.11.11, 09:17:58
Да это продолжение. Может я не верно как -то сделал y1, но в переменную он (дельфи)правильно записал, как можно сделать цикл со вторыми четырмя цифрами Автор, добавлено 26.11.11, 09:29:33
Даже если программа выдаёт правильные результаты, это ещё не значит, что она сделана правильно сама. Вы просто скопировали второе число, равное по длине первому и получилось правильно, но по смыслу оператора это неверно. Пример: 3+2=5, но это не значит, что этим действием нужно корень из 25 извлекать, хотя и равно одно другому.

Но если вас удовлетворяет результат, оставьте как есть. Со временем всё равно разберётесь.

Насчёт цикла вопрос не понял. Дмитрий, добавлено 29.11.11, 21:31:57
Не могу понять как вывести полученное значение. Когда пытаюсь вывести его при помощи Label1.Caption := IntToStr(Result); программа выдает ошибку,подскажите как его вывести, или же ошибка в самой программе?

procedure TForm1.Button1Click(Sender: TObject);
var A,B:integer; C,P:real;
begin
A := StrToInt(Edit1.Text);
B := StrToInt(Edit2.Text);
C := Sqrt(Sqr(A)+Sqr(B));
P := A+B+C;
end;

function RealToStr(P: Real; Count: Integer): String;
var S: String; N: Integer;
begin
S:=FloatToStr(P);
N:=Pos(‘,’, S);
N:=N+Count;
Result:=Copy(S, 1, N);
end;
Автор, добавлено 29.11.11, 22:35:15
Простите за задержку. Был занят с вопросами на другой странице.

Вот у вас текст, например в эдите:

Вам нужно вывести это число с двумя знаками после запятой в Label:

Если же у вас число типа Real, то сначала переводим его в строку типа String, а только потом используем в функции RealToStr:

Но функцию RealToStr нужно разместить выше предыдущего кода. Илья, добавлено 24.12.11, 23:55:27
подскажите пожалуйста, вот тренируюсь (паскаль еще толком не освоил =)
procedure TForm1.Button1Click(Sender: TObject);
Var x: string; s:integer;
begin
x:=Edit1.Text;
s:=Length(x);
label3.Caption := ‘В тексте ‘+ s + ‘символов’;
end;

Хочу написать программу подсчета символов в тексте, выдает ошибку тут:label3.Caption := ‘В тексте ‘+ s (ТУТ КУРСОР) + ‘символов’; звучит Incompatible types: ‘String’ and ‘Integer’
понятно что какое то несоответствие типов, но где оно. сто раз проверял, все правильно, на паскале аналог (тем же способом) работает нормально. что не верно? Автор, добавлено 25.12.11, 07:38:59
Ну как это где? S: Integer, ‘В тексте’ — (сами пишете!) текст. То есть вы текст прибавляете к целому числу, вот и несоответствие, это разные типы. Хотя на самом деле несоответствие Label3.Caption (тип String) и S. В статье первая же табличка содержит функцию преобразования числа, чтобы оно выводилось как текст: IntToStr. Короче, должно быть:

Илон Маск рекомендует:  Техника оптимизации программ (фрагмент) 33

label3.Caption := ‘В тексте ‘+ IntToStr(s) + ‘ символов’; Илья, добавлено 25.12.11, 19:02:23
спасибо большое, вот еще тут аналогичная проблема(( хелп плиз.
procedure TForm1.Button1Click(Sender: TObject);
Var a,b,c,d,x1,x2:real;
begin
a:= StrToFloat(Edit1.Text);
b:= StrToFloat(Edit3.Text);
c:= StrToFloat(Edit4.Text);
d:= b*b-4*a*c;
x1:= (-b+sqrt(d))/2;
x2:= (-b-sqrt(d))/2;
label6.Caption:= ‘x1= ‘+x1;
label7.Caption:= ‘x2= ‘+x2;
end;

label6.Caption:= ‘x1= ‘+x1;(ТУТ КУРСОР)
ошибка Incompatible types: ‘String’ and ‘Real’
StrToFloat(x1) не помогает. помогите пжл :)
(п.с. в теории прога должна находить корни кв. уравнения) Автор, добавлено 25.12.11, 22:58:26
Ну при чём тут StrToFloat. Может, наоборот? FloatToStr. Ник, добавлено 17.04.12, 18:13:15
Скажите как разделить значение строки DBGrid ФИО на отдельные строки фамилия,имя, отчество Автор, добавлено 17.04.12, 18:53:04
С помощью функции pos находим позицию первого пробела. Функцией copy копируем фамилию с помощью delete эти символы из строки удаляем. С оставшейся строкой проделываем те же действия и получаем имя. В оставшейся части строки — отчество. Аноним, добавлено 27.04.12, 09:34:50
Скажите, а как вообще должна выглядеть дата, какой должен быть у нее формат записи. То есть ддммгггг, и какой у нее должен быть разделитель? Автор, добавлено 27.04.12, 09:56:00
А самому? Возьмите сегодняшнюю дату, и посмотрите третий символ. Все функции для этого приведены в статье.

Caption:=DateToStr(Now)[3]; Антон, добавлено 1.05.12, 17:51:37
Скажите, а как можно сравнить две строки на совпадение по символам? Как я понял приведенные в уроке функции сравнивают строки по длине (иначе что означает запись s1 Автор, добавлено 1.05.12, 18:10:11
Нет, это сравнение по некоему значению, зависящему от алфавита. Например

‘a12345’ Аноним, добавлено 3.07.12, 22:26:11
Кто может помогите!
Как найти в тексте все пары слов-соседей, второе из которых начинается на ту же букву, которой заканчивается первое из такой пары. Автор, добавлено 4.07.12, 07:11:26
Слова разделяются пробелом. Вот и ищите пробелы и смотрите символ до него и после него.

Если обратитесь по ссылке «Решение задач», я вам сделаю. Или давайте делайте сами, код — сюда. Что не будет получаться — помогу. Аноним, добавлено 4.07.12, 12:46:34
Допустим я нашел пробелы, как сделать так, чтобы выводились нужные пары слов?
Автор, добавлено 4.07.12, 14:52:57
Вы имеете позицию пробела в тексте. Позиция минус один — предыдущий символ, плюс один — последующий. Если они равны, вы нашли. А потом нужно выявить эти слова. Опять же по пробелам до и после слова.

Нужен, конечно, пробный текст, так как могут ещё быть точки, запятые и другие знаки препинания, переходы на другую строку. Аноним, добавлено 4.07.12, 15:00:45
Спасибо. Дмитрий, добавлено 31.08.12, 13:08:24
Спасибо за отличный и подробный материал. Николай, добавлено 21.09.12, 02:33:42
Статья неплохая. Но хотелось бы больше узнать про другие строковые типы ShortString, LongString (AnsiString), WideString. Кстати тип String давно приравнен к LongString.
Ну и пара советов, правда они больше касаются вопросов в комментариях.
1). По поводу путаницы с десятичной точкой/запятой. Советую обратить внимание на переменнную SysUtils.DecimalSeparator . Она отвеает за локаль. Кстати в этом модуле много интересных переменных. Список можно получить через предметный указатель справки введя «DecimalSeparator variable».
2). Для разбивки строки на подстроки по вхождению некого символа удобно использовать класс TStringList, точнее два его свойства Delimiter и DelimitedText. Первое отвечает за этот самый символ, второе является строкой которую будем разбивать. Результат получаем в свойстве Strings. Владимир, добавлено 11.10.12, 13:52:45
Кто сможет помочь решить задачу в delphi? Автор, добавлено 11.10.12, 16:31:19
ПОМОЧЬ могу и я. Рассмотря ваши наработки и указав на ошибки или подсказав алгоритм. Владимир , добавлено 12.10.12, 11:40:34
я тебя не совсем понял) Автор, добавлено 12.10.12, 11:51:11
Если нужно помочь в том что не получается, то так. А если решить вместо тебя, то смотри ссылку выше: Решение задач (небесплатно). Вовка, добавлено 10.10.13, 19:57:20
Здравствуйте) с вашего сайта начал изучать делфи 22 августа этого года)) У меня вопрос. есть два мемо поля. в одном список чисел. я нахожу самое большое значение и копирую его в переменную. как вывести сообщение с текстом из второго мемо, строка должны быть такой же как у максимального числа из первого мемо. например в первом мемо число 700 на 26 строчке, нужно из второго мемо в шоумессэдж вывести значение 26 строки Автор, добавлено 10.10.13, 20:11:33
Вывести значение строки Memo2 с тем же индексом что и найденный в Memo1?

где i — найденный индекс строки первого Memo. Если не так понял, извиняйте — выражайтесь точнее. Аноним, добавлено 10.10.13, 20:25:34
procedure TForm1.Button23Click(Sender: TObject);
var
max: real;
i: word;
begin
if Memo36.Lines.Count = 0 then Exit;//если первое поле пусто -выходим из процедуры
max:= StrToFloat(Memo36.Lines[0]);//максимальное значение — первая строка в списке мемо
for i:= 1 to Memo36.Lines.Count-1 do// от второй строки до последней строки
begin
if StrToFloat(Memo36.Lines[i]) > max then // если строка преобразованная в текст больше чем максимаьное текущее значение то
max:= StrToFloat(Memo33.Lines[i]) ;//то максимальным значением делаем значение этой строки
end;
ShowMessage(FloatToStr(max));//показываем в сообщении максимальное число
end;
. я знаю мах значение, как узнать строку этого мах значения?? и потом показать текст такого же номера строки из другого мемо Автор, добавлено 10.10.13, 20:44:07
Ну как узнать.

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

procedure TForm1.Button23Click(Sender: TObject);
var
max: real;
i, n: word;//n — переменная для хранения текущего индекса строки с максимальным значением
begin
if Memo36.Lines.Count = 0 then Exit;//если первое поле пусто -выходим из процедуры
max:= StrToFloat(Memo36.Lines[0]);//максимальное значение — первая строка в списке мемо
n:=0;
for i:= 1 to Memo36.Lines.Count-1 do// от второй строки до последней строки
if StrToFloat(Memo36.Lines[i]) > max then // если строка преобразованная в число больше чем максимаьное текущее значение то
begin
max:= StrToFloat(Memo33.Lines[i]) ;//то максимальным значением делаем значение этой строки
n:=i;//запоминаем индекс строки с текущим максимальным значением
end;
ShowMessage(FloatToStr(max));//показываем в сообщении максимальное число
end;
Вовка, добавлено 10.10.13, 21:10:23
Спасибо большое. а я не в том направлении думал и не мог сообразить как имея значение — отыскать строку. спасибо еще раз. Павел, добавлено 5.11.13, 16:19:05
Спасибо! Сергей, добавлено 22.12.13, 22:44:26
Прошу помочь разобраться. Возможно ли реализовать поиск строки учитывая, что часть символов в нем является значимой, а часть нет?
Например, задана строка для поиска: edit53.Text:='(:4624’+chr(32)+’81760’+chr(32)+ks+chr(32)+’2’+chr(32)+’1305’+chr(32)+edit1.text+chr(32)+’1′; в которой подстрока «ks» значимой не является?
Длина подстроки «ks» является постоянной. Автор, добавлено 22.12.13, 22:57:11
Всё это делается с помощью регулярных выражений, хотя я всё никак не соберусь их освоить.
А не осваиваю я их потому, что также можно искать подстроки с помощью обычных функций pos и copy.
Например, вашу подстроку можно поискать как строку, одновременно содержащую и ‘(:4624’+chr(32)+’81760’+chr(32)’ и chr(32)+’2’+chr(32)+’1305’+chr(32)+edit1.text+chr(32)+’1′.
То есть позиции этих подстрок одновременно не должны быть равны нулю в этой строке. При этом ks никак не влияет. Аноним, добавлено 3.03.14, 14:07:21
Чтобы сложить секунды, минуты и часы, можно сделать так:
DecodeTime(StrToTime(Edit1.Text.Text),h,m,s,ms);
Edit1.Text:=IntToStr(s+(m*60)+(h*60)*60);
Хотелось бы узнать, как число распределить «обратно» по часам, минутам и секундам.
(это нужно для того, чтобы, например, к 15:59:50 прибавить 20 секунд, чтобы получилось 16:00:10 но никак иначе =) Автор, добавлено 3.03.14, 14:24:19
Отвлекитесь от программирования, и сами возьмите число 3721 секунда например. Сколько это часов минут и секунд? Вы сможете решить эту задачу?

Если сможете, то запомните операции, которые для этого нужны — и затем переведите в команды Delphi (mod и div вам в помощь). Это и называется разработка алгоритма. А если не сможете, то программирование вообще ни при чём. Я арифметике не учу. Ульяна, добавлено 16.03.14, 16:41:06
Разработать программу, которая из строки, содержащей некоторый текст, выделяет все слова и печатает их в алфавитном порядке (по первой букве).
Очень нужна помощь. Автор, добавлено 16.03.14, 16:47:35
Алгоритм должен быть такой: составляете множество всех разделителей слов — пробела, знаков препинания, ещё чего придумаете. Далее в цикле проверяете все символы, найдёте разделитель — копируете в список символы от первого до разделителя минус 1, затем эти символы удаляете. И начинаете сначала. Список типа StringList сортирует слова автоматически, если его об этом «попросить».

Что непонятно, спрашивайте. Ульяна, добавлено 16.03.14, 17:07:39
массив должен задаваться в procedure TForm2.Edit1Change(Sender: TObject);а в обработчике события кнопки уже выводить в Label Автор, добавлено 16.03.14, 17:14:34
Это круто. Ульяна, добавлено 16.03.14, 17:27:08
Не спорю.Но не очень получается.Можете мне написать? Ульяна, добавлено 16.03.14, 17:32:36
и вот такую: На форму поместить N точек (каждая точка помещается на форму по нажатию левой / правой кнопок мыши и имеет номер 1..N). Вычислить сумму расстояний между всеми парами точек с четными номерами. Задачу решить отдельно для групп точек, созданных по левой и по правой кнопке мыши. Начало работы алгоритма — по нажатию определенной клавиши на клавиатуре, результат выдать функцией TextOut в середине окна.Пожалуйста! Ульяна, добавлено 16.03.14, 17:34:07
извиняюсь,вот такую надо.На форму поместить N точек (каждая точка помещается на форму по нажатию правой кнопки мыши и имеет номер 1..N). Упорядочить точки по возрастанию / убыванию расстояния до точки, заданной последним нажатием левой кнопки мыши. Начало работы алгоритма — по нажатию определенной клавиши на клавиатуре, результат выдать функцией TextOut, подписав номера каждой точки. Автор, добавлено 16.03.14, 17:37:14
Там, рядом со ссылочкой «Комментарии» есть другая: «Решение задач на заказ». Так и говорите, что нужно не помочь а сделать для вас. Стоить будет недорого.
А если вы хотите «помощи», то чем могу — помогу, подскажу, но делать за вас не стану. Автор, добавлено 16.03.14, 17:48:36
Да, можно. Но только во вторник — пока занят. Напоминаю — это не бесплатно. Ульяна, добавлено 16.03.14, 17:54:00
Хорошо.Спасибо Алеся, добавлено 16.03.14, 18:46:59
Скажите, что делает данная функция function GetSubStr(st:string; expl:string; n:integer):string; Автор, добавлено 16.03.14, 20:30:15
Хм, я полез в интернет и выяснил, что это самостоятельно написанная кем-то функция. Советую вам сделать то же самое. Это не встроенная функция Delphi. По смыслу — эта функция выделяет часть строки. Ульяна, добавлено 16.03.14, 21:58:53
Вот,что у меня получилось.Но вот что у меня получилось.Подскажите пожалуйста,что со сравнением не так:
function TForm1.Vvod(st:string; expl:string; n:integer):string;
Var p,i:integer;
Begin
for i:= 1 to n-1 do
begin
p:=pos(expl,st);
st:=copy(st,p+1,Length(st)-p);
while (pos(expl,st)=1) and (length(st)>0) do
delete(st,1,1);
end;
p:=pos(expl,st);
if p<>0 then result:=copy(st,1,p-1)
else result:=st;

Илон Маск рекомендует:  Уроки MS Word 2003 и 2007

procedure TForm1.Button1Click(Sender: TObject);
var
a:array[1..10] of string;
i,j:integer;
Tmp:string;
st:string;
begin

For i := 1 to 10-1 do
begin <ëåêñèêîãðàôè÷åñêîå óïîðÿäî÷åíèå ñëîâ>
For j := 1 to 10-1 do
If a[j]>a[j+1] then
begin
a[j+1]:=Tmp;
end;
end;
for i:=0 to 10-1 do
a[i]:=Vvod(Edit1.text,’ ‘,i);
for i:=1 to 10-1 do
st:=st+IntTostr(i)+’ ‘+a[i]+#13;
ShowMessage(st);
end;

DelphiComponent.ru — бесплатно видеоуроки по Delphi, статьи, исходники

Процедуры и функции для работы со строками в Delphi

Строки очень часто используются в программах — хотя бы для вывода раз­личных сообщений пользователю, чтобы он не заблудился в интерфейсе. Ну, для таких простых случаев вполне достаточно тех сведений, которые вы получили на уроке, посвящённом строкам. Если же у вас более серьёз­ные намерения и вы хотите манипулировать строками по своему желанию (например, вы пишете какую-нибудь словесную игру вроде Балды или Ло­гогрифов), то в Delphi найдётся всё нужное и для таких любителей словес­ности и жонглирования приставками и суффиксами.

Для определённости в примерах будем считать, что

Когда мы изучали простые операции со строками, то рассматривали кон­катенацию строк с помощью оператора +. Но объединить две строки можно и функцией

которая возвращает «сумму» двух строк:

Для сравнения строк вместо операторов отношения можно использовать следующие функции.

Обе функции сравнивают строки s1 и s2. Первая — с учётом регистра букв (прописные/строчные), вторая — без учёта.

Эти функции возвращают значение

0, если строки равны;

Их нельзя применять к русским словам, поэтому лучше пользоваться функциями:

которые одинаково хорошо работают и с латинскими, и с русскими буква­ми.

Теперь перейдём к процедурам и функциям, которые выполняют со сло­вами более сложные действия.

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

Первая переводит слова в нижний регистр (строчные буквы), вторая — в верхний (прописные буквы). Для русских ( и для латинских ) букв годятся функции :

Функция AnsiLowerCase (S1) вернёт строку «смородина».

Функция AnsiUpperCase (’смородина’) вернёт строку «СМОРОДИНА».

Процедуры вывода сообщений на экран (обычно в метку или список) тре­буют в качестве параметра строку, а что делать, если нужно предъявить пользователю число? — Преобразовать число в строку! Это можно сде­лать и самостоятельно, но гораздо удобнее воспользоваться встроенными функциями Delphi.

Чаще других в программах применяют функции для преобразования це­лых чисел в строку:

Например, IntToStr (1234) вернёт строку «1234».

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

Если вы хотите узнать, как десятичное число записывается в 16-ричной системе счисления, примените к нему функции:

Например, IntToHex (12 34, 8) вернёт строку «000004D2», а IntToHex (2009, 4) — строку «07D9».

Второй параметр — Digits — задаёт число цифр в 16-ричном числе.

При вводе данных из файла или некоторых компонентов вместо числа мы получаем строку символов. И хотя она состоит из цифр, это не число. В этом случае поможет функция

Причём строка S может содержать не только десятичное, но и 16-ричное число.

Например, функции StrToInt(’$07D9’) и StrToInt(’2009’) вернут одно и то же число 2009.

Однако эта функция «опасна»: если в строке обнаружится хотя бы один неверный символ, возникнет ошибка. Если у вас есть обоснованные со­мнения в правильности строки, лучше обратиться к надёжной функции

Она возвращает TRUE, если строка преобразована в число без ошибок, и FALSE, если с ошибками. Переменная Value (в нашем примере i) хранит число.

В примере строка ‘$07D9s’ содержит неверный символ «s», поэтому функ­ция вернёт FALSE и строку печатать не нужно (на самом деле значение переменной i будет равно 2009, так как функция успеет конвертировать первые символы строки — до первой «нецифры»).

Так же можно использовать и процедуру:

V — переменная целого или действительного типа.

Code — переменная целого типа, в которой возвращается номер ошибочно­го символа в строке. Если таких символов нет, то значение этой перемен­ной будет равно нулю.

В результате выполнения этого примера будет напечатано число 2009.

Этот код также напечатает число 2009, но значение переменной i будет равно не нулю, как в первом случае, а 6, так как шестой символ строки не является 16-ричной цифрой.

Аналогичные функции для вещественных чисел:

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

Первая удаляет начальные пробелы, вторая — конечные, третья — и те, и другие. Эти функции возвращают новую строку — уже без пробелов.

Узнать длину строки (число символов в ней) можно с помощью функции

Например , Length (S1) вернёт 9, а Length(S2) — 7.

Ну, а теперь — самые интересные процедуры и функции!

Удаляем часть строки S от символа номер Index:

Здесь Count — число удаляемых символов.

Например, после выполнения процедуры:

строка si будет иметь значение «РОДИНА».

А после процедуры delete(s2,5,3); строка s2 будет урезана до «ПАРА».

Если значение переменной Index меньше единицы или больше длины строки, то строка останется без изменений. Ничего не слу­чится со строкой и если Count меньше единицы.

Если же Count больше, чем число символов в строке, начиная с In­dex, то будут удалены все символы до конца строки.

Процедура Insert действует противоположно — она вставляет подстроку Substr в строку Dest после символа номер Index:

Например, после выполнения процедуры insert (’З’, s1,6); строка s1 превратится в смешное слово «СМОРОЗДИНА».

А процедура insert (’КА’, s2,8); позволит нам насладиться неологиз­неологиз­мом «ПАРАШЮТКА».

Если же мы не хотим портить исходную строку, как это делает процедура Delete, то можем создать новую строку, вырезав из любой строки нужный нам кусок:

Например, строка s примет значение «ПАРА» после выполнения функции s:=copy(s2,1,4);

Обратите внимание: чтобы получить то же самое слово, что и в примере с delete(s2,5,3);, мы указали другие значение параметров в вызове функции!

Функция copy (s1,4,9) вернёт в переменную s слово «РОДИНА».

И последняя функция находит позицию подстроки substr в строке str. function Pos(const substr: string; const str: string): Integer;

Если в строке искомая подстрока встречается несколько раз, то первый вызов функции Pos вернёт позицию первого вхождения, после чего поиск нужно продолжить со следующей позиции. Например, в слове ФЕЛЬДФЕБЕЛЬ так можно найти обе «ели».

Если же подстроки в строке нет, то вернётся безнадёжный ноль!

IntToStr — Функция Delphi

не хочу таскать с собой SysUtils
как перевести из индежер в стрин только использую модули WIndows,System подскажите аналог функции Inttostr,strtoint

Добавлено 01.07.08, 15:35
поспешил создавать тему,вопрос решен str\val

Вроде должно работать и работает.
А что в этом тексте насторожило?
(Не присваивается Result перед вызовом FmtStr?)

Добавлено 02.07.08, 08:56

Именно. В 2007ой на порядок оптимальнее сделано.

а вот так оно в 2007

давайте попробуем найти 10 отличий:)

Сидел сейчас и, как последний зануда, сравнивал быстродействие

А)
10^8 операций по конвертированию константы в строку

D5: 37 секунд
В7: 32 секунды

Б)
2*10^8 операций по конвертированию константы в строку

D5: 77 секунд (87 с другой константой)
В7: 65 секунд (73 с другой константой)

21562 — D5
35125 — D2007

Видимо наоборот
Разница более 60% — видимо FastMM рулит, а вот D7 с классическим менеджером дает только 24%
А ежели поделить мсек на Count, то получим 200-300 нс на одно преобразование. Спрашивается куда можно «складировать» строки с такой скоростью, разве что в массив или TList

требуется помощь относительно функции inttostr в делфи

procedure TForm1.FormCreate(Sender: TObject);
begin
x1:=1;
z1:=inttostr(3);
label1.Caption:=z1;
end;

procedure TForm1.Image100Click(Sender: TObject);
begin
if x1=1 then begin
image100.Picture.LoadFromFile(‘C:\game files\redx1.bmp’);
x1:=0;
x2:=1;
x3:=1;
z1:=inttostr(z1-1);
label1.Caption:=z1;
end;
все интегер

нужно чтобы при нажатии на картинку значение лейбел всегда уменьшалось на 1

Строковые процедуры и функции

Function Copy(S: String; Index, Count: Integer): String;

Возвращает подстроку строки.

S — выражение типа String. Index и Count — выражения целого типа. Функция возвращает строку, содержащую Count символов, начинающихся с позиции Index.

Если Index больше, чем длина S, функция возвращает пустую строку.

Procedure Delete(var S: String; Index, Count:Integer);

Удаляет подстроку символов длиной Count из строки S, начиная с позиции Index.

S — переменная типа String. Index и Count — выражения целого типа.

Если Index больше, чем длина S, символы не удаляются.

Procedure Insert(Source: String; var S: String; Index: Integer);

Объединяет подстроку в строку, начиная с определенной позиции.

Source — выражение типа String. S — переменная типа String любой длины. Index — выражение целочисленного типа.

Insert вставляет Source в S, начиная с позиции S[Index].

Function Length(S: String): Integer;

Возвращает число символов, фактически используемое в строке S.

Обратите внимание: при использовании строк с нуль-окончанием, число символов не обязательно равно числу байтов.

Function Pos(Substr: String; S: String): Integer;

Ищет подстроку в строке.

Pos ищет Substr внутри S и возвращает целочисленное значение, ко-торое является индексом первого символа Substr внутри S.

Если Substr не найден, Pos возвращает ноль.

StrToInt и IntToStr вне модуля SysUtils

Delphi , Синтаксис , Преобразования

Статья StrToInt и IntToStr вне модуля SysUtils раздела Синтаксис Преобразования может быть полезна для разработчиков на Delphi и FreePascal.

Комментарии и вопросы

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

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