Отправлено: 25.10.07 17:07. Заголовок: Delphi: Наполнение библиотеки «SPO»
Библиотека специальных подпрограмм SPO (String Parameters Operations - Операции обработки Строки Параметров).
НАЗНАЧЕНИЕ: Представление набора параметров и значений в виде строки с разделителями: myStr := '_param1_123_A_-6_koord_10_21_number__of_0_points';
Первым стоит символ '_' - он и является разделителем значений в данной строке. Если же он является частью параметра, то его необходимо повторить дважды: '__' (вообще-то можно и трижды, четырежды, ... - просто один символ из такой группы будет отброшен). К каждому полю возможен доступ как по его номеру, так и по значению (имени).
Во многом библиотека эквивалентна существующим потомкам класса TStrings. Главное отличие: работа с обычной символьной строкой, а не с объектом, который нужно создавать, уничтожать и периодически проверять (Assigned).
ПРИМЕНЕНИЕ: 1) Хранение произвольного количества данных любого типа (все приводится к string) 2) Хранение данных смешанного типа и/или переменной структуры 3) Передача в подпрограмму и возврат из функции сразу целого набора значений 4) Упрощенная альтернатива для работы со СПИСКАМИ, XML-данными, таблицами БД.
Отправлено: 06.11.07 14:11. Заголовок: В НАСТОЯЩИЙ МОМЕНТ Г..
В НАСТОЯЩИЙ МОМЕНТ ГОТОВЫ (т.е. можно использовать при решении):
function GetCount(myStr: string): Longint;// Подсчет количества параметров в строке
function GetPosBegByIndex(myStr: string; Index: longint): longint;// позиция начала по номеру параметра
function GetValueByIndex (myStr: string; Index: longint): string; // Вернуть значение по номеру параметра (символьное) function GetValueByIndexAsDouble (myStr: string; Index: longint): Extended;// Вернуть значение по номеру п-ра (вещественное) function GetValueByIndexAsInteger(myStr: string; Index: longint): longint;// Вернуть значение по номеру параметра (целое число) function GetValueByIndexAsBoolean(myStr: string; Index: longint): boolean;// Вернуть значение по номеру параметра (логическое)
function GetValueByPos (myStr: string; ipos: longint): string;// Вернуть значение по позиции (символьное) function GetValueByPosAsDouble (myStr: string; ipos: longint): Extended;// Вернуть значение по позиции (вещественное) function GetValueByPosAsInteger(myStr: string; ipos: longint): longint;// Вернуть значение по позиции (целое число) function GetValueByPosAsBoolean(myStr: string; ipos: longint): Boolean;// Вернуть значение по позиции (логическое)
function IsDouble( myStr: string): boolean;// Является ли строка вещественным (или целым) числом function IsBoolean(myStr: string): boolean;// Является ли строка логическим значением (0 и 1 - тоже ок)
function IsDoubleByIndex( myStr: string; Index: longint): boolean;// Является ли значение вещественным (или целым) числом function IsIntegerByIndex(myStr: string; Index: longint): boolean;// Является ли значение целым числом function IsBooleanByIndex(myStr: string; Index: longint): boolean;// Является ли значение логическим значением (0 и 1 - тоже ок)
procedure DelSomeChars(var myStr: string; SomeChars: string);// Удалить некоторые символы вокруг разделителя
Отправлено: 06.11.07 15:16. Заголовок: ЗАДАНИЯ К ВЫПОЛЕНИЮ:..
ЗАДАНИЯ К ВЫПОЛЕНИЮ:
function GetPosBegByPos( myStr: string; ipos: longint): longint;// позиция начала по произвольной позиции function GetPosBegByValue(myStr, value: string): longint;// позиция начала по значению параметра
function GetPosNextByPos( myStr: string; ipos: longint): longint;// позиция начала следующего по позиции текущего function GetPosNextByIndex(myStr: string; Index: longint): longint;// позиция начала следующего по номеру текущего function GetPosNextByValue(myStr, value: string): longint;// позиция начала следующего по значению текущего
function GetPosPrevByPos( myStr: string; ipos: longint): longint;// позиция начала предыдущего по позиции текущего function GetPosPrevByIndex(myStr: string; Index: longint): longint;// позиция начала предыдущего по номеру текущего function GetPosPrevByValue(myStr, value: string): longint;// позиция начала предыдущего по значению текущего
ЭТИ ЗАДАНИЯ ПОКА НЕ ДЕЛАТЬ:
procedure ReplaceValueByPos( myStr: string; ipos: longint);// заменить значение по позиции (символьное) procedure ReplaceValueByIndex(myStr: string; Index: longint);// заменить значение по номеру (символьное)
procedure DecValueByPos( myStr: string; ipos: longint);// декремент значения по позиции (только для целых полей) procedure DecValueByIndex(myStr: string; Index: longint);// декремент значения по номеру (только для целых полей) procedure IncValueByPos( myStr: string; ipos: longint);// инкремент значения по позиции (только для целых полей) procedure IncValueByIndex( myStr: string; Index: longint);// инкремент значения по номеру (только для целых полей)
function IsEqv(myStr1, myStr2: string): boolean// сравнение 2 строк с возможно разными разделителями и порядком параметров (true - набор значений одинаков)
procedure Add(myStr, value: string);// добавить значение в конец procedure InsertToIndex(myStr, value: string; Index: longint);// добавить значение по указанному номеру
procedure DelByPos(myStr: string; ipos: longint);// удалить параметр по позиции procedure DelByIndex(myStr: string; Index: longint);// удалить параметр по номеру procedure DelFirst(myStr: string);// удалить первый параметр procedure DelLast(myStr: string);// удалить последний параметр
Прежде чем взять какую-либо 1 задачу, обязательно отпишитесь в этой теме!
// позиция начала по произвольной позиции если мы ткнем наугад в строку, то угодим в какой-то параметр (разделитель считать относящимся к правому параметру) Нужно определить позицию, где начало того элемента (т.е. после разделителя) в который мы попали
Кстати, к каждому заданию там есть пояснения с примерами!
Все даты в формате GMT
3 час. Активность сегодня: 17
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет