что такое строка в delphi

Что такое строка в delphi

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

function Length(S: String): Integer;

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

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

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
Возвращает текущее время.

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

функция 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

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

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

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

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

Источник

Строки Delphi

Сегодня речь пойдет о строках. Строки в Delphi, на мой взгляд не менее важны, чем числа. Если Вы решили стать программистом, то без строк никуда. Как говорится «из песни слов не выкинешь».

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

Для начала покажу как определить строку и присвоить ей значение

Разберемся теперь с функциями обработки строк:

Функция Length()

Функция Length() – возвращает количество символов в строке. Выглядит она так:

Function Length(S): Integer;

Передаем один параметр – строку, в результате получаем число символов.

В примере мы выводим сообщение с длиной строки str1.

Функция Copy()

Функция Copy() – функция возвращаем заданный отрывок строки.

function Copy ( str1 : string, Index, Count : Integer ) : string;

Приведу пример и все станет на свои места

Функция Pos()

Функция Pos() – возвращает позицию одной строки в другой. Так сказать, ищет подстроку в строке. Если что-то находит, то возвращает номер символа начиная с которого началось совпадение.

function Pos ( const str2, str1 : string ) : Integer;

Напишем пример, в котором будем искать вхождение «стр» в str1 и выведем найденное число в сообщении.

Процедура Delete()

Процедура Delete() – удаляет часть строки.

procedure Delete ( var Str1 : string; Index : Integer, Count : Integer );

Процедура Insert()

Процедура Insert() – вставляет одну строку в другую, начиная с указанного символа.

procedure Insert(str2: String; var Str1: String; Index: Integer);

Эти основные функции помогут сделать со строками в delphi любые манипуляции.

Источник

Сейчас онлайн:
На сайте — 19
На IRC-канале — 2

Работа со строками и символами

Введение

Символы

Строки

Типы данных

Перейдём непосредственно к программированию. Для работы с символами и строками существуют соответствующие типы данных:

Официально строки вмещают лишь 255 символов, однако в Delphi в строку можно записать гораздо больше. Для хранения больших текстов и текстов со специальными символами существуют специальные типы данных AnsiString и WideString (последний, кстати, двухбайтовый, т.е. для Юникода).

Для задания текстовых значений в Pascal используются одинарные кавычки (не двойные!). Т.е. когда вы хотите присвоить строковой переменной какое-либо значение, следует сделать это так:

Символы указываются аналогично, только в кавычках присутствует один-единственный символ.

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

В скобках указывается максимальная длина строки.

Операции со строками

Обработка строк

Перейдём к функциям и процедурам обработки строк.

Длина строки

Нахождение подстроки в строке

Удаление части строки

Следует отметить, что если длина удаляемого фрагмента окажется больше количества символов в строке, начиная с указанной позиции (т.е. «вылезем за край»), функция нормально отработает. Поэтому, если нужно удалить фрагмент из строки с какого-то символа до конца, не нужно вычислять количество этих символов. Лучшим способом будет задать длину самой этой строки.

Вот пример. Допустим, требуется найти в строке первую букву «a» и удалить следующую за ней часть строки. Сделаем следующим образом: позицию буквы в строке найдём функцией Pos(), а фрагмент удалим функцией Delete().

Копирование (извлечение) части строки

Ещё одной важной задачей является копирование части строки. Например, извлечение из текста отдельных слов. Выделить фрагмент строки можно удалением лишних частей, но этот способ неудобен. Функция Copy() позволяет скопировать из строки указанную часть. Функция принимает 3 параметра: текст (строку), откуда копировать, номер символа, начиная с которого скопировать и количество символов для копирования. Результатом работы функции и будет фрагмент строки.

Пример: пусть требуется выделить из предложения первое слово (слова разделены пробелом). На форме разместим Edit1 (TEdit), в который будет введено предложение. Операцию будет выполнять по нажатию на кнопку. Имеем:

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

Вставка подстроки в строку

В данном случае результатом будет строка «1200034567890».

Пример «посерьёзнее»

Примеры, приведённые выше, лишь демонстрируют принцип работы со строками с помощью функций Length(), Pos(), Delete() и Copy(). Теперь решим задачу посложнее, которая потребует комбинированного применения этих функций.

Задача: текст, введённый в поле Memo, разбить на слова и вывести их в ListBox по одному на строке. Слова отделяются друг от друга пробелами, точками, запятыми, восклицательными и вопросительными знаками. Помимо этого вывести общее количество слов в тексте и самое длинное из этих слов.

Сначала перенесём введённый текст в переменную. Для того, чтобы разом взять весь текст из Memo, обратимся к свойству Lines.Text:

Здесь замена произведена следующим образом: организован цикл, в котором одна из запятых удаляется, но происходит это до тех пор, пока в тексте есть две идущие подряд запятые.

Теперь в переменной Word у нас слово из текста, а в переменной Text вся остальная часть текста. Вырезанное слово теперь добавляем в ListBox, вызывая ListBox.Items.Add(строка_для_добавления).

Теперь нам нужно организовать такой цикл, который позволил бы вырезать из текста все слова, а не только первое. В данном случае подойдёт скорее REPEAT, чем WHILE. В качестве условия следует указать Length(Text) = 0, т.е. завершить цикл тогда, когда текст станет пустым, т.е. когда мы вырежем из него все слова.

Итак, на данный момент имеем:

Теперь нужно найти самое длинное из всех слов. Алгоритм нахождения максимального числа таков: принимаем в качестве максимального первое из чисел. Затем проверяем все остальные числа таким образом: если число больше того, которое сейчас записано как максимальное, делаем максимальным это число. В нашем случае нужно искать максимальную длину слова. Для этого можно добавить код в цикл вырезания слов из текста или произвести поиск после добавления всех слов в ListBox. Сделаем вторым способом: организуем цикл по строкам ListBox. Следует отметить, что строки нумеруются с нуля, а не с единицы! В отдельной переменной будем хранить самое длинное слово. Казалось бы, нужно ведь ещё хранить максимальную длину слова, чтобы было с чем сравнивать. Но не нужно заводить для этого отдельную переменную, ведь мы всегда можем узнать длину слова функцией Length(). Итак, предположим, что первое слово самое длинное.

Почему цикл до ListBox.Items.Count-1, а не просто до Count, разберитесь самостоятельно 🙂

Вот теперь всё готово!

Работа с символами

Помните «Таблицу символов«? Давайте сделаем её сами!

Заполнение осуществим прямо при запуске программы, т.е. не будем ставить никаких кнопок. Итак, создаём обработчик события OnCreate() формы.

Специальные символы

Здесь мы выводим окошко с текстом. У события есть переменная Key, в которой хранится символ, соответствующий нажатой клавише. С помощью функции Ord() узнаём код этого символа, а затем функцией IntToStr() преобразуем это число в строку.

Доведём нашу программу по поиску слов до логического конца. Итак, чтобы избавиться от пустых строк, нам нужно удалить из текста символы #13 и #10. Сделать это можно с помощью цикла, по аналогии с тем, как мы делали замену двух запятых на одну:

Дополнительный модуль StrUtils.pas содержит дополнительные функции для работы со строками. Среди этих функций множество полезных. Более подробно некоторые из функций рассмотрены в статье Работа со строковыми типами данных. А вот краткое описание часто используемых функций:

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

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

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

Скриншоты программ, описанных в статье

Заключение

Длинный получился урок. И как раз афоризм оказался в тему. Что удивительно, афоризм был подобран мной в самом начале, а сам урок написан позже 🙂

Автор: Ерёмин А.А.

Статья добавлена: 14 февраля 2008

Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.

Статьи, похожие по тематике

Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:

Ссылка для форумов (BBCode):

Быстрая вставка ссылки на статью в сообщениях на сайте:
<> (буква a — латинская) — только адрес статьи (URL);
<<статья:118>> — полноценная HTML-ссылка на статью (текст ссылки — название статьи).

Поделитесь ссылкой в социальных сетях:

Комментарии читателей к данной статье

Объясните Плиз. Например Есть Файл в файле строка,123456789 можно ли при помощи этой процедуры

procedure TForm2.Button1Click(Sender: TObject);
var S: String;
begin
S:=’1234567890′;
Insert(‘000’,S,3);
ShowMessage(S)
end;

сделать вставку в строке, только та что находится например в файле, а не как на примере строка находится в переменной.

вот созданый файл
begin
AssignFile(f,’D:1.txt’);
Rewrite(f);
WriteLn(f,’123456789′);
CloseFile(f);
end;

Цитата (alexkrv):

А Trim() удаляет space-символы из начала и из конца строки. Из середины конечно же нет.

while Pos(Chr(10),Text) > 0 do
Delete(Text,Pos(Chr(10),Text),1);
-то всё работает.

В каком именно примере это наблюдается?

Оставлять комментарии к статьям могут только зарегистрированные пользователи.

Источник

Что такое строка в delphi

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

function Length(S: String): Integer;

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

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

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
Возвращает текущее время.

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

функция 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

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

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

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

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

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

и какое собственное значение типа 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
Так вы же и читаете статью «Работа со строками»! Применяйте соответствующие функции, и всё!

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

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

Насчёт цикла вопрос не понял. Дмитрий, добавлено 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 := ‘В тексте ‘+ 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;

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
Слова разделяются пробелом. Вот и ищите пробелы и смотрите символ до него и после него.

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

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;

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *