[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]