Форум » Уголок Программиста » Delphi: Наполнение библиотеки «SPO» » Ответить

Delphi: Наполнение библиотеки «SPO»

Alex_soldier: Библиотека специальных подпрограмм SPO (String Parameters Operations - Операции обработки Строки Параметров). НАЗНАЧЕНИЕ: Представление набора параметров и значений в виде строки с разделителями: myStr := '_param1_123_A_-6_koord_10_21_number__of_0_points'; Первым стоит символ '_' - он и является разделителем значений в данной строке. Если же он является частью параметра, то его необходимо повторить дважды: '__' (вообще-то можно и трижды, четырежды, ... - просто один символ из такой группы будет отброшен). К каждому полю возможен доступ как по его номеру, так и по значению (имени). Во многом библиотека эквивалентна существующим потомкам класса TStrings. Главное отличие: работа с обычной символьной строкой, а не с объектом, который нужно создавать, уничтожать и периодически проверять (Assigned). ПРИМЕНЕНИЕ: 1) Хранение произвольного количества данных любого типа (все приводится к string) 2) Хранение данных смешанного типа и/или переменной структуры 3) Передача в подпрограмму и возврат из функции сразу целого набора значений 4) Упрощенная альтернатива для работы со СПИСКАМИ, XML-данными, таблицами БД. СКАЧАТЬ ПРОЕКТ: http://alex-world.ru/go?down_spo

Ответов - 9

Alex_soldier: В НАСТОЯЩИЙ МОМЕНТ ГОТОВЫ (т.е. можно использовать при решении): 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); // Удалить некоторые символы вокруг разделителя

Alex_soldier: ЗАДАНИЯ К ВЫПОЛЕНИЮ: 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 задачу, обязательно отпишитесь в этой теме!

bibimij: Простите, но ссылка на проект битая... :( И ещё насчёт задания. Не совсем понятно что требуется, например это: // позиция начала по произвольной позиции


Alex_soldier: Простите, но ссылка на проект битая... :( Недоглядел! На Mail.Ru какой-то бардак перед НГ. Вот прямая: http://alex-world.ru/go?down_spo // позиция начала по произвольной позиции если мы ткнем наугад в строку, то угодим в какой-то параметр (разделитель считать относящимся к правому параметру) Нужно определить позицию, где начало того элемента (т.е. после разделителя) в который мы попали Кстати, к каждому заданию там есть пояснения с примерами!

bibimij: Спасибо! Уже выполняю. :)

bibimij: GetPosBegByPos я уже сделал.

bibimij: Кстати, GetPosBegByIndex уже написана вами. Прошу удалить её из списка. Спасибо. Уже подкорректировал списки.

Alex_soldier: Приветствую. Итак, в доработке сейчас находятся: GetPosBegByPos GetPosBegByValue На прочие подпрограммы заявок не поступало. Всех с Наступающим!

bibimij: Сделал ещё GetPosNextByPos.



полная версия страницы