Функции преобразования в числовой формат и обратно
Выполняя вычисления, используем для ввода данных и отображения результатов следующие функции, работающие со строками Delphi:
функция IntToStr(N: Integer): String
Преобразует целое число N в строку.
функция StrToInt(S: String): Integer
Преобразует строку S в целое число.
функция FloatToStr(X: Extended): String
Преобразует число с плавающей точкой X в строку.
функция StrToFloat(S: String): Extended
Преобразует строку S в число с плавающей точкой.
Следующие функции работают с параметрами возвращаемой строки:
функция AnsiLowerCase(const S: String): String
Возвращает строку S, преобразованную к нижнему регистру.
функция AnsiUpperCase(const S: String): String
Возвращает строку 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, 0 если S1=S2, >0 если S1>S2
функция AnsiCompareText(const S1, S2: String): Integer
Сравнивает две строки S1 и S2 без учёта регистра символов.
Возвращает значение <0 если S1<S2, 0 если S1=S2, >0 если S1>S2
Помимо прочего, функцию copy можно использовать для вывода нецелого числа с нужным количеством цифр после запятой. Для этого, сначала получаем строку из числа формата Real, затем находим функцией Pos позицию запятой в этой строке, прибавляем нужное количество и копируем в результат это количество символов. Вот готовая функция:
function RealToStr(X: Real; Count: Integer): String; //Count - количество цифр после запятойvar S: String; N: Integer;begin S:=FloatToStr(X); //после запятой - длинная последовательность цифр N:=Pos(',', S); //позиция запятой в строке N:=N+Count; //вычисляем длину строки с нужным количеством знаков после запятой Result:=Copy(S, 1, N);end;
Список строк Delphi TStringList - это структура данных, напоминающая компонент ListBox, но не визуальная, а просто хранящая в памяти и имеющая свойства и методы для работы со строками типа TString.
Для работы со списком строк типа TStringList его сначала необходимо создать с помощью конструктора - Create:
var StrList: TStringList;begin StrList:=TStringList.Create;
Теперь нужно описать способ хранения строк в списке. Список строк типа TStringList может сортировать добавляемые строки или хранить без сортировки, а также может игнорировать попытки добавления новой строки при наличии уже сохранённого дубликата:
StrList.Sorted:=True; //True - сортировать, False - не сортировать StrList.Duplicates:=dupIgnore; //dupAccept - сохранять дубликаты (значение по умолчанию), dupIgnore - игнорировать, dupError - вызвать сообщение об ошибке
Теперь можно добавить в список строки типа TString:
StrList.Add('Новая строка'); //Добавление в конец списка (или в порядке сортировки). Возвращается индекс строки StrList.Insert(Index, 'Новая строка'); //Строка добавляется на позицию с номером Index. Если список отсортирован, то возникает исключительная ситуация.Удалить строку: StrList.Delete(Index); // Удаление строки с номером Index;Количество строк в списке: N:=StrList.Count;Доступ к строке с номером Index: Str:=StrList[Index];Index отсчитывается от 0, поэтому номер последней строки: Last:=StrList.Count-1;Очищаем список строк: StrList.Clear;Если список отсортирован, есть метод для поиска: StrList.Find(S, Index); // В случае удачного поиска возвращает True, и индекс строки S в переменной IndexВ конце работы со списком его необходимо удалить из памяти: StrList.Free;end;
Собственно, для меня список типа TStringList ценен именно возможностью обнаруживать дубликаты строк. Как узнать, что строка уже содержится в списке? Вот алгоритм:
Запретить списку запись дубликатов. Это делается один раз, при создании списка.
Сохранить в переменной количество строк в списке.
Попробовать записать новую строку.
Опять подсчитать количество строк в списке.
Если оно совпадёт с количеством перед записью, то такая строка в списке уже есть!
Без такой возможности пришлось бы в цикле перебирать и сравнивать с искомой все строки в списке.
Строковый тип PChar –Эта строка работает совершенно иначе, чем String. Строка String представляет собой массив символов, в нулевом элементе которого содержится количество байт, отводимых под эту строку. А переменная типа PChar – это не сама строка, а указатель на начало строки, то есть переменная указывает на первый символ строки в памяти компьютера. А где же тогда PChar хранит количество байт в строке?! А нигде! Мы уже говорили о таблице символов ANSI, и выяснили, что нулевой символ – пустой. Вот последний символ PChar как раз и хранит этот символ, и компьютер, найдя его, считает, что строка окончена.
Со строками PChar работать очень неудобно, однако нам придется это делать, когда мы будем работать с функциями WinAPI напрямую. Функции WinAPI – это функции самой Windows, а не Delphi. Однако Delphi позволяет использовать их. Иногда это бывает необходимо, например, когда средств Delphi недостаточно для выполнения намеченной задачи. Использование таких функций не всегда удобно, однако они выполняются процессором намного быстрее, так как содержатся в самой операционной системе.