SetString — Процедура Delphi


Содержание

Клуб программистов

Delphi programming

Подписаться на рассылку:

SetString

Копирует символы из буфера в строку

Описание:

Процедура SetString меняет длину TargetString на Length перед копированием этого количества символов из буфера, заданного переменной BufferPointer.

Длина меняется только в том случае, если строка не типа ShortString. Фактически, память под строку перераспределяется — ссылка на TargetString указывает на эту новую строку.

Пример кода:

var
target : string;
source : array[1..5] of Char;
srcPtr : PChar;
i : Integer;

begin
// Fill out the character array
for i := 1 to 5 do
source[i] := Chr(i+64);

// Copy these characters to a string
srcPtr := Addr(source);
SetString(target, srcPtr, 5);

// Show what we have got
ShowMessage(‘target now = ‘+target);
end;

SetString — Процедура 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 позицию запятой в этой строке, прибавляем нужное количество и копируем в результат это количество символов. Вот готовая функция:

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 только чисел.

SetString — Процедура Delphi

Описание
Процедура устанавливает длину и содержимое строки S. Если S — короткая строка, то символу индикатору длины строки (символ в позиции S[0]) присваивает значение Length (значение Length должно лежать в диапазоне 0.. 255), затем, если параметр Buffer — не нулевой, процедура копирует Length символов из Buffer в стро-ку S, начиная с позиции S[1]. Если S — длинная строка, то SetString заново перераспределяет блок памяти размером Length, затем если параметр Buffer — не нулевой, процедура копирует Length символов из Buffer в строку S, иначе новый контекст строки не инициализируется. При нехватке памяти для создания строки возникает исключение EOutOfMemory.

Класс TStrings — операции со строковыми данными в Делфи

Класс TStrings является базовым классом для операций со строковыми данными. Этот класс представляет собой контейнер для строк (коллекцию или массив строк). Для операций со строками класс TStrings предоставляет соответствующие свойства и методы. От класса TStrings происходит большое количество производных классов, например, TStringList, которые могут использоваться для задания различных типов строк.

Визуальные компоненты, способные работать со списком строк, имеют свойства, которые являются массивами строк, содержащихся в этих компонентах. Например, для списков ListBox и DBListBox и для групп зависимых переключателей RadioGroup и DBRadioGroup таким свойством является Items, а для многострочных редакторов Memo и DbMemoLines.

Указанные свойства для визуальных компонентов ListBox и Memo доступны при разработке и при выполнении приложения, а для визуальных компонентов DBListBox и DBMemo, связанных с данными, — только при выполнении приложения.

Особенности класса TStrings

Рассмотрим особенности и использование класса TStrings на примере свойства Items списков. Работа с другими объектами типа TStrings происходит аналогично.

Каждый элемент списка является строкой, к которой можно получить доступ по ее номеру в массиве строк Items. Отсчет элементов списка начинается с нуля. Для обращения к первому элементу нужно указать Items[0], ко второму— Items[1], к третьему — Items[2] и т. д. При операциях с отдельными строками программист должен контролировать номера строк в списке и не допускать обращения к несуществующему элементу. Например, если список содержит три строки, то попытка работы с десятой строкой приведет к исключению.

Свойство Count

Свойство Count типа Integer задает число элементов в списке. Поскольку первый элемент списка имеет нулевой номер, то номер последнего элемента равен Count-1.

Илон Маск рекомендует:  Кроссбраузерная верстка CSS

Например, присваивание элементам списка ListBox1 новых значений может быть реализовано так:

Методы Add и Insert

Методы Add и Insert служат для добавления/вставки строк в список. Функция Add (const S: string): integer добавляет заданную параметром S строку в конец списка, а в качестве результата возвращает положение нового элемента в списке. Процедура Insert (Index: Integer; const S: String) вставляет строку S в позицию с номером, определяемым параметром index. При этом элементы списка, находившиеся до операции вставки в указанной позиции и ниже, смещаются вниз.

В приводимой далее процедуре к комбинированному списку СomboBox1 добавляется строка Нажата кнопка Button1:

Заполнение списка с помощью методов AddStrings и AddObject

Для заполнения списка можно использовать методы AddStrings и AddObject. Метод AddStrings позволяет при вызове увеличить содержимое списка более чем на один элемент.

Процедура AddStrings (strings: TStrings) добавляет в конец списка группу строк, определяемую параметром Strings. Класс TStrings позволяет хранить строки и ссылки на объектыпроизвольного типа.

Функция AddObject (const S: String; AObject: TObject): Integer добавляет в конец списка строку S и связанную с ней ссылку на объект, указываемую параметром AObject.

Рассмотрим следующий пример заполнения списка:

Здесь список TS заполняется перечнем названий страниц блокнота PageControl1 при создании формы Form1. Вместе с названиями запоминаются ссылки на страницы. Страницы блокнота имеют тип TTabSheet. Знание типа необходимо при последующей работе с задаваемыми посредством ссылок объектами, в частности, для корректного выполнения операции, такой как программное переключение страниц управляющего элемента PageControl1. Вместо переменной TS можно использовать другой список подходящего типа, например, список компонента ListBox, доступный через свойство Items.

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

Процедура Assign

Процедура Assign (Source: TPersistent) присваивает один объект другому, при этом объекты должны иметь совместимые типы. В результате выполнения процедуры информация копируется из одного списка в другой с заменой содержимого. Если размеры списков (число элементов) не совпадают, то после замены число элементов заменяемого списка становится равным числу элементов копируемого списка.

Функция Equals

Функция Equals (Strings: TStrings): Boolean используется для определения, содержат ли два списка строк одинаковый текст. Если содержимое списков совпадает, то функция возвращает значение True, в противном случае— значение False. Содержимое списков одинаково, если списки равны по длине и совпадают все их соответствующие элементы.

В приведенном далее примере производится согласование двух списков по содержанию:

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

Удаление элементов списка с помощью методов Delete и Сlear

Для удаления элементов списка используются методы Delete и Сlear. Метод Delete (index: integer) удаляет элемент с номером, заданным параметром index. При попытке удаления несуществующей строки сообщение об ошибке не выдается, но метод Delete не срабатывает.

при нажатии кнопки Button2 из комбинированного списка ComboBox1 удаляется пятая строка.

Метод Сlear очищает список, удаляя все его элементы в следующей процедуре:

при нажатии кнопки btnClearPersonalList очищается список lbPersonal.

Процедура Move

Процедура Move (Curindex, NewIndex: integer) перемещает элемент из позиции с номером CurIndex в новую позицию с номером NewIndex. Если указанный номер выходит за пределы списка, то возникает исключение.

Поиск элементов в списке процедурой IndexOf

Поиск элемента в списке можно выполнить с помощью метода IndexOf. Процедура IndexOf (const S: string): integer определяет, содержится ли строка S в списке. В случае успешного поиска процедура возвращает номер позиции найденной строки в списке; если строковый элемент не найден, то возвращается значение −1.

Работа с текстовыми файлами с помощью методов SaveToFile и LoadFromFile

У класса TStrings есть методы SaveToFile и LoadFromFile, позволяющие непосредственно работать с текстовыми файлами. Эти методы предоставляют возможность сохранения строк списка в текстовом фате на диске и последующего чтения строк из этого файла. Символы файла кодируются в системе ANSI.

Процедура SaveToFile (const FileName: String) сохраняет строковые элементы списка в файле FileName. Если заданный файл отсутствует на диске, то он создается. В последующем сохраненные строки можно извлечь из файла, используя метод LoadFromFile. Например:

Здесь содержимое списка ListBox3 записывается в файл names.txt каталога C:\COMPANY.

Процедура LoadFromFile (const FileName: String) заполняет список содержимым указанного текстового файла, при этом предыдущее содержимое списка стирается. Если заданный файл отсутствует на диске, то возникает исключение.

Пример заполнения списка содержимым файла:

Файл personal.txt содержит фамилии сотрудников организации. При запуске приложения содержимое этого файла загружается в комбинированный список ComboВох2.

При конструировании приложения изменение списка строк выполняется с помощью строкового редактора String List Editor.

Его можно вызвать из окна Инспектора объектов двойным щелчком мыши в области значения свойства типа TStrings (например, в области значения свойства Items списка ListBox).

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

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

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

Примеры операции со строками Delphi

1) Функция length возвращает длину указанной строки. Данная функция обладает одним параметром, который представляет собой выражение, имеющее строковый тип данных. В качестве значения функции length выступает целое число, обозначающее количество символов, входящих в состав строки.

Примеры

b:=length(‘na beregu’);

В результате выполнения этих инструкций переменная a пример значение 6, а переменная b получит значение 9. 2)

2) Процедура delete. С помощью процедуры delete можно удалить определенную часть строки. Общий вид процедуры delete выглядит следующим образом:

  • строка обозначает переменную или константу с строковым типом данных;
  • n есть номер символа, начиная с которого удаляется заданная подстрока;
  • m представляет собой длину удаляемой впоследствии подстроки.

Пример

При выполнении инструкции

переменная st примет значение-строку ‘Город’. 3)

3) Функция роs. С помощью функции pos возможно определение положения подстроки в указанной строке. Общий вид инструкции функции pos представляется так:

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

Пример

При выполнении следующей инструкции:

Переменная n примет значение 2. В случае, если строка не содержит искомую подстроку, то функция pos возвращает значение 0. Приведем пример инструкции оператора while, которая позволит удалить начальные пробелы из указанной строки:

Здесь процедура delete(s, 1, 1) удаляет пробелы до тех пор, пока пробел есть начальный символ строки (то есть пока значение функции pos(‘ ‘,s) совпадает с единицей). Проверка условия length(s) > 0 применяется здесь для того, чтобы учесть возможность включения в строку только одних пробелов.

4) Функция copy выделяет фрагмент указанной строки. Общий вид инструкции функции copy представляется следующим образом:

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

Пример

При выполнении инструкции

town:=copy(s, 7, 12) ;

переменная town примет значение-строку ‘Екатеринбург‘.

SetString — Процедура Delphi

Строки в Delphi состоят из одоного (тип ShortString ) или двух байтов (тип AnsiString, WideString ), содержащих указание количества символов в строке, и последовательности символов. Таким образом ShortString максимально может содержать до 255 символов и занимать память 2 байта ..256 байт, а AnsiString или WideString — максимально могут содержать примерно 2 x 10 30 символов и занимать память 4 байта .. 2 Гбайта.

В типе AnsiString символы кодируются в коде ANSI, а в типе WideString — в коде Unicode.

Общим типом является тип String , который может соответствовать как типу ShortString , так и типу AnsiString . Это определяется директивой компилятора $H . По умолчанию используется <$H+>, и тип String равен типу AnsiString .

Кроме того имеется тип PChar , представляющий так называемую строку с завершающим нулем. Строки с завершающим нулем не содержат байтов длины. В отличие от обычных строк они состоят из последовательности ненулевых символов, за которым следует символ NULL (#0). Никаких ограничений на длину строк с завершающим нулем не накладывается. Фактически он указывает на символ

Расширенный синтаксис позволяет ставить в соответствие строкам с завершающим нулем символьный массив типа

где X — положительное число типа Integer , определяющее количество символов в строке, не считая завершающего символа с кодом 0. В отличие от типа String , символ с индексом 0 здесь является первым символом строки, а последний символ с индексом X — завершающим символом с кодом 0. (см. Функции работы со строками с завершающим нулем)

Список литературы:

  1. Гофман В.Э., Хомоненко А.Д. Delphi 6. — СПб. БХВ-Петербург, 2002. — 1152 с.: ил.
  2. Турбо Паскаль 7.0 — К. Торгово-издательское бюро BHV, 1996 — 448 с.: ил.
  3. Delphi7 Help

SetString — Процедура Delphi

У меня уже есть готовые функции, но там используется разделитель запятая («,»).
Я хочу переделать, чтобы разделитель был не «,» а «&$».
Вот бывшие функции (где разделитель «,»):

function GetList(S : String):TStrings;
var
iPosComma : integer;
sTmp : string;
tlist:TStrings;
begin
try
tlist:=TStringList.Create;
tlist.Clear;
s := trim(s);
while pos(«,»,s) > 0 do
Begin
iPosComma := pos(«,»,s);
sTmp := copy(s,1,iPosComma — 1);
tlist.Add(sTmp);
s := copy(s,iPosComma + 1,Length(s));
End;
if length(s) <> 0 then tlist.Add(s);
except
on E : Exception do
ShowMessage(E.Message);
end;
result:=tlist;
End;

Function GetString(tlist:TStrings):String;
var i:integer; S:String;
Begin
if tlist.Count<>0 then
begin
s:=tlist.Strings[0];
for i:=1 to tlist.Count-1 do s:=s+»,»+tlist.Strings[i];
result:=s; end else result:=»»;
End;

Как переделать функцию GetString я знаю, там достаточно поменять в одном месте «,» на «&$».
А как переделать GetList(S:String):TStrings; я незнаю. Прошу помочь.

и s := copy(s,iPosComma + 1,Length(s));
на s := copy(s,iPosComma + 2,Length(s));

Всем Спасибо. Сам разобрался. Даже не думал, что всё так просто.

alex-drob © (08.08.05 14:16) [2]
Да, не до смотрел.

Также сделал. Только почти методом тыка.
Блин, откуда у вас такая логика?!

TStrings.Delimiter и TStrings.DelimitedText чем не подошли ?

Удалено модератором
Примечание: Не в подворотне


> BFG9k © (08.08.05 14:41) [6]
> TStrings.Delimiter и TStrings.DelimitedText чем не подошли
> ?

Незнал про существование таких. щас буду смотреть.

Посмотрел. Не катит. Нету обратного (String to TStrings), и разделитель должен быть из одного символа.


> И обратно
> str:=Strings.Text;
> str:=StringReplace(str,#13#10,»&$»,rfReplaceAll);

И что экземпляр TStrings заполнится строкакми?

rolex (08.08.05 14:20) [5]
Блин, откуда у вас такая логика?!

Просто свежий взляд на код.

Kolan © (08.08.05 18:07) [11]
И что экземпляр TStrings заполнится строкакми?

А куда он денется.

Lists the strings in the TStrings object as a single string with the individual strings delimited by carriage returns and line feeds.

property Text: string;

Use Text to get or set all the strings in the TStrings object in a single string delimited by carriage return, line feed pairs.

When reading Text, the strings in the list will be separated by carriage return and (on Windows) line feed. If any of the strings in the list contain a carriage return (and line feed), the resulting value of Text will appear to contain more strings than is indicated by the Count property.

When setting Text, the value will be parsed by separating into substrings whenever a carriage return or linefeed is encountered. (The two do not need to form pairs).

If the strings in the list contain carriage return or linefeed characters, a less ambiguous format for the strings is available through the CommaText or DelimitedText property.

Kolan © (08.08.05 18:29) [14]
Зато теперь знаеш! :)

А вот так не устроит? Разделитель любой
s2 — как раз разделитель, сам ими пользуюсь
function splitToTStringList(s1, s2:String):TStringList;
var
i, ln:Integer;
s:String;

ASD-SOFT

Программирование. Теория и практика.

TStringHelper — помощник при работе с типом String в Delphi.

Здравствуйте уважаемые коллеги!
TStringHelper, как и помощники в общем, появились в Delphi начиная с версии XE3. Ниже приведено описание и примеры использования методов и свойств помощника TStringHelper.

Empty

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

Create(C: Char; Count: Integer)

Создает строку из символов C количеством Count;

Create(const Value: array of Char)

Создает строку из переданного массива символов Value.

Create(const Value: array of Char; StartIndex: Integer; Length: Integer)

Создает строку из массива символов Value начиная с позиции StartIndex количеством Length символов.

Compare(const StrA: string; const StrB: string)

Сравнение двух строк StrA и StrB с учетом регистра. Если StrA StrB, то возвращает положительное значение, если строки равны, то возвращает 0.

Compare(const StrA: string; const StrB: string; IgnoreCase: Boolean)

Сравнение двух строк StrA и StrB с учетом, IgnoreCase установле в False, или без учета регистра, IgnoreCase установлен в True. Если StrA StrB, то возвращает положительное значение, если строки равны, то возвращает 0.

Compare(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer)

Сравнить строку StrA, начиная с символа IndexA со строкой StrB, начиная с символа IndexB в количестве Length символов с учетом регистра. Если StrA StrB, то возвращает положительное значение, если строки равны, то возвращает 0.

Compare(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer; IgnoreCase: Boolean)

Сравнить строку StrA, начиная с символа IndexA со строкой StrB, начиная с символа IndexB в количестве Length символов. С учетом, IgnoreCase устанавливается в False, или без учета регистра, IgnoreCase устанавливается в True. Если StrA StrB, то возвращает положительное значение, если строки равны, то возвращает 0.

CompareOrdinal(const strA: string; const strB: string)

Сравнивает строку StrA со строкой StrB по кодам символов.

CompareOrdinal(const strA: string; indexA: Integer; const strB: string; indexB: Integer; length: Integer)

Сравнивает по кодам символов строку StrA, начиная с символа IndexA со строкой StrB, начиная с символа IndexB в количестве Length символов.

CompareTo(const strB: string)

Сравнивает текущую строку со строкой StrB. Если Текущая строка StrB, то возвращает положительное значение, если строки равны, то возвращает 0.

Contains(const Value: string)

Если текущая строка содержит строку Value, то вернет True иначе False. Учитывается регистр.

Copy(const Str: string)

Возвращает строку Str.

CopyTo(SourceIndex: Integer; var destination: array of Char; DestinationIndex: Integer; Count: Integer)

Копирует текущую строку, начиная с символа SourceIndex в массив символов destination, начиная с DestinationIndex в количестве Count символов.

EndsText(const ASubText, AText: string)

Сравнивает окончание строки AText со строкой ASubText. При совпадении возвращает True.

EndsWith(const Value: string)

Сравнивает окончание текущей строки со строкой Value с учетом регистра. При совпадении возвращает True.

EndsWith(const Value: string; IgnoreCase: Boolean)

Сравнивает окончание текущей строки со строкой Value. IgnoreCase = True — без учета регистра, IgnoreCase = False — с учетом регистра. При совпадении возвращает True.

Equals(const Value: string)

Сравнивает текущую строку со строкой Value с учетом регистра. При совпадении возвращает True.

Equals(const a: string; const b: string)

Сравнивает строку a со строкой b с учетом регистра. При совпадении возвращает True.

Format(const Format: string; const args: array of const)

Подставляет значения в форматированную строку Format из массива args.

GetHashCode

В данный момент не работает. Возвращает -1.

IndexOf(value: Char)

Возвращает позицию символа value в текущей строке. Если символ не найден, вернет -1;

IndexOf(const Value: string)

Возвращает позицию совпадения строки Value с текущей строкой. Если строка не найдена, вернет -1.

IndexOf(Value: Char; StartIndex: Integer)

Возвращает позицию символа value в текущей строке, начиная с позиции StartIndex. Если символ не найден, вернет -1;


IndexOf(const Value: string; StartIndex: Integer)

Возвращает позицию совпадения строки Value с текущей строкой, начиная с позиции StartIndex. Если строка не найдена, вернет -1.

IndexOf(Value: Char; StartIndex: Integer; Count: Integer)

Возвращает позицию символа value в текущей строке, начиная с позиции StartIndex. Сравнивает Count сиволов. Если символ не найден, вернет -1.

IndexOf(const Value: string; StartIndex: Integer; Count: Integer)

Возвращает позицию совпадения строки Value с текущей строкой, начиная с позиции StartIndex, включая Count символов. Если строка не найдена, вернет -1.

IndexOfAny(const AnyOf: array of Char)

Возвращает позицию совпадения любого из массива AnyOf в текущей строке. Если ни один символ не найден, то вернет -1.

IndexOfAny(const AnyOf: array of Char; StartIndex: Integer)

Возвращает позицию совпадения любого из массива AnyOf в текущей строке, начиная с позиции StartIndex. Если ни один символ не найден, то вернет -1.

IndexOfAny(const AnyOf: array of Char; StartIndex: Integer; Count: Integer)

Возвращает позицию совпадения любого символа из массива AnyOf в текущей строке, начиная с позиции StartIndex, проверяя Count символов. Если ни один символ не найден, то вернет -1.

Insert(StartIndex: Integer; const Value: string)

Вставляет строку Value в текущую строку начиная с позиции StartIndex.

IsDelimiter(const Delimiters: string; Index: Integer)

Проверяет: присутствует ли текущая строка в строке Delimiters начиная с позиции Index.

IsEmpty

Возвращает True, если Текущая строка пустая.

IsNullOrEmpty(const Value: string)

Возвращает True, если строка Value пустая.

IsNullOrWhiteSpace(const Value: string)

Не работает. Возвращает False.

Join(const Separator: string; const values: array of const)

Не работает. Возвращает пустую строку.

Join(const Separator: string; const Values: array of string)

Объединяет значения из массива Values в строку используя разделитель Separator.

Join(const Separator: string; const Values: IEnumerable )

Не работает. Возвращает пустую строку.

Join(const Separator: string; const value: array of string; StartIndex: Integer; Count: Integer)

Объединяет значения из массива Values, начиная с позиции StartIndex количеством Count в строку используя разделитель Separator.

LastDelimiter(const Delims: string)

Возвращает последнюю совпавшую позицию строки Delims с текущей строкой. Если совпадений не найдено, то вернет -1.

LastIndexOf(Value: Char)

Возвращает последнюю позицию символа Value в текущей строке. Если совпадений не найдено, то вернет -1.

LastIndexOf(const Value: string)

Возвращает последнюю позицию совпадения строки Value с текущей строкой. Если строка не найдена, вернет -1.

LastIndexOf(Value: Char; StartIndex: Integer)

Возвращает последнюю позицию символа Value в текущей строке, сравнивает с начала и до позиции StartIndex. Если совпадений не найдено, то вернет -1.

LastIndexOf(const Value: string; StartIndex: Integer)

Возвращает последнюю позицию совпадения строки Value в текущей строке, сравнивает с начала и до позиции StartIndex. Если строка не найдена, вернет -1.

LastIndexOf(Value: Char; StartIndex: Integer; Count: Integer)

Возвращает последнюю позицию символа Value в текущей строке, сравнивает с начала и до позиции StartIndex, проверяя Count символов. Если совпадений не найдено, то вернет -1.

LastIndexOf(const Value: string; StartIndex: Integer; Count: Integer)

Возвращает последнюю позицию строки Value в текущей строке, сравнивает с начала и до позиции StartIndex, проверяя Count символов. Если совпадений не найдено, то вернет -1.

LastIndexOfAny(const AnyOf: array of Char)

Возвращает последнюю позицию любого найденного символа из массива AnyOf в текущей строке. Если совпадений не найдено, то вернет -1.

LastIndexOfAny(const AnyOf: array of Char; StartIndex: Integer)

Возвращает последнюю позицию любого найденного символа из массива AnyOf в текущей строке до позиции StartIndex. Если совпадений не найдено, то вернет -1.

LastIndexOfAny(const AnyOf: array of Char; StartIndex: Integer; Count: Integer)

Возвращает последнюю позицию любого найденного символа из массива AnyOf, начиная с позиции StartIndex, проверяя Count символов. Если совпадений не найдено, то вернет -1.

PadLeft(TotalW >Дополняет текущую строку пробелами до длинны TotalWidth слева.
PadLeft(TotalW >Дополняет текущую строку символами PaddingChar до длинны TotalWidth слева.
PadRight(TotalW >Дополняет текущую строку пробелами до длинны TotalWidth справа.
PadRight(TotalW >Дополняет текущую строку символами PaddingChar до длинны TotalWidth справа.
Remove(StartIndex: Integer)

Удаляет символы из текущей строки начиная с позиции StartIndex и до конца.

Remove(StartIndex: Integer; Count: Integer)

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

Replace(OldChar: Char; NewChar: Char)

Заменяет все символы OldChar в текущей строке на симвопл NewChar.

Replace(OldChar: Char; NewChar: Char; ReplaceFlags: TReplaceFlags)

Заменяет символы OldChar в текущей строке на симвопл NewChar, используя насройки ReplaceFlags: rfReplaceAll — заменить все найденные; rfIgnoreCase — игнорировать регистр.

Replace(const OldValue: string; const NewValue: string)

Заменяет все совпадения со строкой OldValue в текущей строке на строку NewValue.

Replace(const OldValue: string; const NewValue: string; ReplaceFlags: TReplaceFlags)

Заменяет все совпадения со строкой OldValue в текущей строке на строку NewValue, используя насройки ReplaceFlags: rfReplaceAll — заменить все найденные; rfIgnoreCase — игнорировать регистр.

Split(const Separator: array of Char)

Разделяет текущую строку на массив строк TArray используя в качетсве разделителей символы из массива Separator.

Split(const Separator: array of Char; Count: Integer)

Разделяет текущую строку на массив строк TArray количеством Count, используя в качетсве разделителей символы из массива Separator.

Split(const Separator: array of Char; Options: TStringSplitOptions)

Разделяет текущую строку на массив строк TArray используя в качетсве разделителей символы из массива Separator. Options — условия разделения: None и ExcludeEmpty — исключать пустые.

Split(const Separator: array of string; Options: TStringSplitOptions)

Разделяет текущую строку на массив строк TArray используя в качетсве разделителей строки из массива Separator. Options — условия разделения: None и ExcludeEmpty — исключать пустые.

Split(const Separator: array of Char; Count: Integer; Options: TStringSplitOptions)

Разделяет текущую строку на массив строк TArray количеством Count, используя в качетсве разделителей символы из массива Separator. Options — условия разделения: None и ExcludeEmpty — исключать пустые.

Split(const Separator: array of string; Count: Integer; Options: TStringSplitOptions)

Разделяет текущую строку на массив строк TArray используя в качетсве разделителей строки из массива Separator. Options — условия разделения: None и ExcludeEmpty — исключать пустые.

StartsWith(const Value: string)

Сравнивает начало текущей строки со строкой Value. Возвращает True при совпадении.

StartsWith(const Value: string; IgnoreCase: Boolean)

Сравнивает начало текущей строки со строкой Value. С учетом регистра при IgnoreCase = False, и без учета при IgnoreCase = True. Возвращает True при совпадении.

Substring(StartIndex: Integer)

Возвращает часть текущей строки начиная с позиции StartIndex и до конца.

Substring(StartIndex: Integer; Length: Integer)

Возвращает часть текущей строки начиная с позиции StartIndex, количеством Length символов.

ToCharArray

Преобразует текущую строку в массив символов TArray .

ToCharArray(StartIndex: Integer; Length: Integer)

Преобразует текущую строку, начиная с позиции StartIndex, количеством Length в массив символов TArray .

ToLower

Переводит все символы текущей строки в нижний регистр.

ToLowerInvariant

Переводит все символы текущей строки в нижний регистр используя UTF-16.

ToUpper

Переводит все символы текущей строки в верхний регистр.

ToUpperInvariant

Переводит все символы текущей строки в верхний регистр используя UTF-16.

Trim

Удаляет пробелы из начала и конца текущей строки.

Trim(const TrimChars: array of Char)

Удаляет символы, указанные в массиве TrimChars из начала и конца текущей строки.

TrimEnd(const TrimChars: array of Char)

Удаляет символы, указанные в массиве TrimChars из конца текущей строки.

TrimStart(const TrimChars: array of Char)

Удаляет символы, указанные в массиве TrimChars из начала текущей строки.

Chars[Index: Integer]

Свойство вернет символ с позицией Index из текущей строки.

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 вернёт позицию первого вхождения, после чего поиск нужно продолжить со следующей позиции. Например, в слове ФЕЛЬДФЕБЕЛЬ так можно найти обе «ели».

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

Строки AnsiString в консольном приложении

24.08.2013, 03:01

Ошибка в консольном приложении
работаю в консольном приложении при компиляции ругается на этот код ShellExecute(handle,’open’.

Таймер в консольном приложении
Создаю таймер в консольном приложении Дельфи. Ошибок нет но он не работает. (проверяю через.

Многопоточность в консольном приложении
Осуществил многопоточную работу приложения, но проблема в том, что через syncronize не хочет ничего.

Параметры команд в консольном приложении
Есть задача, нужно чтобы после введения определенной команды например «run» ей можно было задать.

Убрать ошибки в консольном приложении
<$APPTYPE CONSOLE>uses SysUtils; type TTable = object public constructor.

24.08.2013, 03:30 2 24.08.2013, 04:30 [ТС] 3

именно так, батенька. Виновато именно AnsiString.
Непонятно как оно вообще работает в консольном? VCL подключена? В uses ничего не надо писать?

Добавлено через 13 минут
а вот на некотором усложнении аналогично.
Код ниже не работает с тем же сообщением

24.08.2013, 04:42 4

Плохо читали документацию. Пропустили самое главное.

Добавлено через 4 минуты

24.08.2013, 04:42
24.08.2013, 04:49 [ТС] 5
24.08.2013, 04:56 6

А если курсор не перевели на другую строку после чтения первой строки что будет читать любой последующий вызов read?

Ну а по коду. Посмотрите внимательно и скажите какое у вас значение переменной lat? Не отвечайте на вскидку, подумайте.

24.08.2013, 05:32 [ТС] 7
24.08.2013, 09:20 8

я знаю проблему. мне пришлось выпилить делфи 7, ибо там не было поддержки юникода. Панель управления — Язык и региональные стандарты — дополнительно — язык программ, не поддерживающих юникод — Русский

готово)) такая проблема тоже была у меня)

24.08.2013, 12:15 9
26.08.2013, 00:35 [ТС] 10
26.08.2013, 01:14 11

К сказанному мною выше могу добавить только одно. Начиная с Д2 и до Д2007 включительно практически все дельфийские консольные программы работали с AnsiString и проблем ни у кого не возникало.

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

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