[an error occurred while processing this directive]

.цв

5.11. Обработка текстов в памяти

.нф

В Форт-Агате имеются все основные средства обработки символьных строк, которыми обычно располагают языки высокого уровня.

В Форт-Агате различаются три типа текстовых строк:

.кс-4

счетная строка - последовательность до 255 любых символов Агата, первым байтом которой является число символов в строке;

несчетная строка - последовательность до 65535 символов, длина которой лежит на вершине стека;

строка текста - последовательность символов, ограниченная символом CRCOD или NULL (т.е. нулевой байт).

.нф

Текстом в Форт-Агате называется совокупность строк, оканчивающаяся символом NULL, т.е. нулевым байтом

В табл. 5.1 приведен список слов Форта, реализующих различные функции обработки символьных строк.

.цв

Таблица 5.1. Слова библиотеки обработки текстов

.нф

.кс-5

.гр

¤! (asm) (A1 A2 ═→) Копирует счетную строку A1 по адресу A2 Пример: MyGreating My ¤!

     Присвоит переменной My значение константы MyGreating 

¤+ (asm) (A1 A2 ═→ A) Склеивает счетные строки A1 и A2, результирующую строку помещает в A1.

¤. (A --) Выводит содержимое счетной строки A на экран

¤compare (asm) (A1 A2 ═→ n) Сравнивает посимвольно две счетные строки и кладет на стек признак n результата:

               если n=0, то более длинная строка имеет                        то же начало, что вся более короткая;
               если n=1, то первая больше второй,
               если n=-1, то первая меньше второй.

¤var (bld) (u --) Создает новую текствую переменную в виде пустой счетной строки длиной u. Формат команды: u ¤var <ИМЯ>

cutin¤ (A n A1 --) Врезает строку A1 внутрь строки A, начиная с символа n. Сохраняет удлиненную строку в системной переменной ¤¤, адрес которой оставляет на вершине стека. Максимальная длина строки с врезкой 127 символов

lcutin¤ (A n A1) Делает то же, что и cutin¤, но вдвое медленнее, но зато максимальная длина строки с врезкой 255 символов

erase (A n═→) Обнуляет n байтов памяти, начиная с адреса A

fill (A u b ═→) Заполняет u байтов памяти, начиная с адреса A, значением байта b

gets (A --) Вводит текст с клавиатуры в счетную строку A. Применяется для присвоения значения текстовой переменной. Контроль за переполнением текстовой переменной отсутствует

left¤ (asm) (A1 n ═→ A) Копирует в PAD n первых символов счетной строки A1

mid¤ (A1 n1 n2 ═→ A) Вырезает n2 символов из счетной строки A1, начиная с символа n1 (счет символов - с 1), помещает вырезку в PAD. Пример:

    MyGreating 3 4 ¤Mid PAD ¤. → Peop
               ↑ ↑
               | ╚ число вырезаемых символов
               ╚ номер первого символа вырезки (с 1)

.тт

right¤ (A1 n ═→ A) Копирует в PAD n концевых символов счетной строки A1

val (A ═→ d) Переводит первое вхождение целого числа в тексте по адресу A в двойное число и кладет его на стек

lochar (A u ═→) В тексте по адресу A и длиной u заменяет заглавные буквы на строчные

upchar (A u ═→) В тексте по адресу A и длиной u заменяет строчные буквы на заглавные

type (A n --) Выводит на экран текст из u символов Агата, начиная с адреса A

.нф

Определения слов ¤compare, left¤, mid¤, right¤, cutin¤ не входят в базовый Форт, а хранятся в виде текстов в листах 2-4. В скомпилированном виде они входят в файл float, который можно загрузить в словарь командой rprog float.

Действие большинства слов данного списка ясно из приведенных описаний. Обратите внимание на то, что слова ¤!, ¤+, ¤compare, left¤, mid¤, right¤, cutin¤, lcutin¤ правильно работают только со счетными строками. При нужде первые три из них можно применить и к строкам других типов, если помнить, что эти слова воспринимают заданную адресом строку как счетную, т.е. первый байт ее считают длиной строки. В пределах этой "длины" они работают правильно, но попытка выйти за пределы "длины" обычно дает непредсказуемый результат.

.стФортАгат.Инстр4

[an error occurred while processing this directive]