Пример пакета обработки текстов
Этот пример иллюстрирует простой пакет обработки текстов. Пользователи имеют доступ только к видимому разделу; реализация от них скрыта в личном разделе и теле пакета (тело не показано).
С точки зрения пользователя, TEXT является строкой переменной длины. Каждый текстовый объект имеет максимальную длину, которая должна задаваться при описании этого объекта, и текущую длину, которая равна длине в диапазоне от нуля до максимального. Максимальная возможная длина текстового объекта является константой, определяемой реализацией.
Сначала в пакете определяются необходимые типы, затем функции, возвращающие некоторые характеристики объектов типа, затем функции преобразования текстов и предопределенных типов CHARACTER и STRING и, наконец, некоторые стандартные операции над переменными строками. Большинство операций над строками, символами, а также над типом TEXT совмещены для минимизации числа явных преобразований, которые должен написать пользователь.
package TEXT_HANDLER is MAXIMUM : constant := SOME_VALUE; -— это значение определено реализацией
subtype INDEX it INTEGER range 0 .. MAXIMUM;
type TEXT(MAXIMUM_LENGTH : INDEX) is limited private;
function LENGTH (T TEXT) return INDEX; function VALUE (T TEXT) return STRING; function EMPTY (T TEXT) return BOOLEAN;
function TO_TEXT (S STRING; MAX : INDEX) return TEXT; -- максимальная длина МАХ function TO_TEXT (С CHARACTER; MAX : INDEX) return TEXT; function TO_TEXT (S STRING) return TEXT; - - максимальная длина S'LENGTH function TO_TEXT (C CHARACTER) return TEXT;
function "&" (LEFT : TEXT; RIGHT TEXT) return TEXT; function "&" (LEFT : TEXT; RIGHT STRING) return TEXT; function "&" (LEFT : STRING; RIGHT TEXT) return TEXT; function "&" (LEFT : TEXT; RIGHT CHARACTER) return TEXT; function "&" (LEFT : CHARACTER; RIGHT TEXT) return TEXT;
function "=" (LEFT : TEXT; RIGHT TEXT) return BOOLEAN; function "<" (LEFT : TEXT; RIGHT TEXT) return BOOLEAN; function "<=" (LEFT : TEXT; RIGHT TEXT) return BOOLEAN; function ">" (LEFT : TEXT; RIGHT TEXT) return BOOLEAN; function ">=" (LEFT : TEXT; RIGHT TEXT) return BOOLEAN;
procedure SET (OBJECT ; in out TEXT; VALUE : In TEXT); procedure SET (OBJECT : In out TEXT; VALUE : In STRING); procedure SET (OBJECT : In out TEXT; VALUE : in CHARACTER);
procedure APPEND (TAIL : In TEXT; TO In out TEXT); procedure APPEND (TAIL : in STRING; TO In out TEXT); procedure APPEND (TAIL : In CHARACTER; TO in out TEXT);
procedure AMEND (OBJECT in out TEXT; BY In TEXT; POSITION : In INDEX); procedure AMEND (OBJECT in out TEXT; BY In STRING; POSITION : In INDEX); procedure AMEND (OBJECT In out TEXT; BY In CHARACTER; POSITION : In INDEX);
-— заменяет часть объекта с заданной позиции на данный -— текст, строку или символ
function LOCATE (FRAGMENT : TEXT; WITHIN : TEXT) return INDEX; function LOCATE (FRAGMENT : STRING; WITHIN : TEXT) return INDEX; function LOCATE (FRAGMENT : CHARACTER; WITHIN : TEXT) return INDEX;
—- возвращают значение О, если фрагмент не размещается
private
type TEXT(MAXIMUM_LENGTH : INDEX) is record
POS : INDEX := 0; VALUE : STRING(1 .. MAXIMUM_LENGTH); end record;
end TEXT-HANDLER;
Пример использования пакета обработки текста:
Программа открывает файл вывода, имя которого дается строкой NAME. Эта строка имеет вид
[УСТРОЙСТВО :] [ИМЯ ТИПА [.РАСШИРЕНИЕ]]
Для устройства, имени файла и расширения существуют стандартные значения по умолчанию. Названное пользователем имя передается через параметр функции EXPAND_FILE_NAME, ее результатом является расширенная версия с необходимыми добавлениями по умолчанию.
function EXPAND_FILE_NAME (NAME : STRING) return STRING is use TEXT_HANDLER;
DEFAULT_DEVICE : constant STRING = "SY:"; DEFAULT_FILE_NAME : constant STRING = "RESULTS"; DEFAULT_EXTENSION : constant STRING = ".DAT";
MAXIMUM_FILE_NAME_LENGTH : constant INDEX := SOME_APPROPRIATE_VALUE: FILE_NAME : TEXT(MAXIMUM_FILE_NAME_LENGTH);
begin
SET(FILE_NAME, NAME); if EMPTY(FILE_NAME) then
SET(FILE_NAME, DEFAULT_FILE_NAME); end if;
if LOCATEC:', FILE_NAME) = 0 then
SET(FILE_NAME, DEFAULT_DEVICE & FILE_NAME); end if;
if LOCATE('.', FILE_NAME) = 0 then
APPEND(DEFAULT_EXTENSION, TO => FILE_NAME); end if;
return VALUE(FILE_NAME);
end EXPAND_FILE_NAME;
Пред. | Уровень выше | След. |
7.5. ПРИМЕР ПАКЕТА РАБОТЫ С ТАБЛИЦАМИ |
Содержание | Глава 8. ПРАВИЛА ВИДИМОСТИ |