Диалекты бейсика для ZX Spectrum 1992 г.

Beta Basic - Операции с символьными строками.


ОПЕРАЦИИ С СИМВОЛЬНЫМИ СТРОКАМИ

INSTRINGQ, STRING$(), SHIFT$(), PRINT #14

INSTRING {< начальная позиция >, < строка символов >, < строка-о6разец>)

Эта функция осуществляет поиск <строки-образца> в <строке символов). начиная с позиции, заданной параметром Сначальная по-зиция>. Она возвращает номер позиции в <строке символов), в которой первый раз встретился образец. Если поиск оказался безуспешным, функция возвратит ноль. Нулевое значение возвращается функцией также:

• если значение параметра <начальная позиция) выходит за пределы базовой строки,

• если <строка-образец) по длине больше исходной <строки символов), а также

• если одна из строк имеет нулевую длину.

<Строка символов) может иметь произвольную длину, но <строка-образец) не должна состоять более чем из 256 символов.

Для поиска можно использовать шаблон, вставляя в <строку-образец) знак #. В этом случае при поиске содержимое позиции, в которой стоит #, будет игнорироваться. Например, инструкция

PRINT INSTRING (1, А$, "ЬаоЬ#Ь")

будет искать в строке А$ позиции строк baobab, baobbb, baobcb и т. д.

INSTRING в сочетании с функцией MEMORY$ (см. предыдущий раздел) позволяет вести поиск в обширных участках памяти компьютера.

STRING$(<число),<строка символов))

Функция возвращает символьное значение, состоящее из < число) раз повторенных <строк символов). Так, например, STR!NG$(5,"la-") сформирует строку "la-la-la-la-la-".

Функция STRINGS формирует сгроку быстрее, чем цикл FOR...NEXT, и поэтому ее целесообразно использовать совместно с оператором РОКЕ для заполнения памяти требуемыми данными. К примеру, для быстрой бчистки трети экрана достаточно выполнить строку:

РОКЕ 16384, STRING$(2048,CHR$ 0)

Пригодится функция STRINGS и для формирования шаблона в операторе USING, когда число печатаемых разрядов определяется значениями переменных, скажем, переменных Intr и Fr в следующем примере:

PRINT USING STRINO$(lntrf"#")+"."+STRING$(Fr,"#"); А

SHIFT $ (< номер режима >, < строка символов >)

Эта функция в зависимости от выбранного <номера режима) (1...7) преобразует <строку символов): избирательно заменяет сим волы другими символами, последовательностями символов или удаляет символы из строки.

Режим 1. В этом режиме функция SHIFT$ заменяет все прописные буквы в <строке символов) на строчные.

Режим 2. Обратная процедура: заменяет строчные буквы прописными.

Режим 3. Все прописные буквы заменяются на строчные, а строчные — на прописные.

Режим 4. Функция возвращает строку, в которой все управляющие символы (с кодами от 0 до 31), за исключением символа возврата каретки (код 13), заменены символом точки (CHR$ 46)96. Используя этот рел^им, удобно просматривать память компьютера, например, область бейсик-программы:

PRINT SHIFT$(4, MEMORV$()(<aApec начала> ТО <адрес конца>))

Режим 5. Функция SHIFT$ заменяет каждый символ с кодом N из второй половины таблицы символов (ключевые слова интерпретатора) на символ с кодом N-12897. Кроме этого, подобно режиму 4, все управляющие символы (как ранее существующие, за исключением символа возврата каретки, так и полученные в результате преобразования) заменяются символом точки. Заменяется точкой и символ CHR$ 141, который после преобразования должен был бы стать символом возврата каретки (141-128=13).

Режим 6. Целиком совпадает с режимом 5, за исключением одного нюанса: символ возврата каретки уже не находится на особом положении. Он, подобно другим управляющим символам, обращается в точку.

Режим 7. Прежде всего в этом режиме функция SHIFT$ удаляет из строки все символы управления выводом на экран (перемещение курсора, изменение позиции печати, управление цветовыми атрибутами) (см. табл. 19). Причем удаляет не только управляющие символы, но и их параметры98 (если они предусмотрены). Так, к примеру, изымая символ позиционирования вывода на экран — CHR$ 22 (АТ-управляющий), функция SHIFT$ «подчистит» и два обязательно следующих за ним параметра. А вот управляющий символ табуляции CHR$ 23 (TAB-управляющий) будет не только удален вместе со своими параметрами, но еще и заменен необходимым количеством пробелов.

Таблица 19. Замена символов функцией SHIFT$ в режиме 7.

КЙАЫ <им*о*0*

д*й<т*и* при »ы*од* на экдои

3 амена

8.,,11

перемещение курсора

«пустая строка»

12

удаление символа (Delete)

CHR$ 32

15

пробел + возврат каретки + перевод строки

CHRS 32+CHR$ 13

16...21 + 1 параметр

управление атрибутами при выводе на экран

«пустая строка»

22 + 2 параметра

АТ-управляющий

«пустая строка»

23 + 2 параметра

ТАВ-управляющий

соответствующее число пробелов

Помимо изложенного, функция SHIFTS в режиме 7 вводит новый управляющий код, который ранее в ZX Spectrum не использовался: в исходной строке символ с кодом 1 5 она заменяет сочетанием символов пробела (CHR$ 32) и возврата каретки (CHR$ 13).

Но самое ценное в работе функции SHIFT$ в режиме 7 — это замена символов с кодами 128...255 на последовательности букв, составляющих соответствующие ключевые слова интерпретатора. Такая интерпретация выполняется только в режиме клавиатуры KEYWORDS 1. Например, функция SHIFT$(7,CHR$ 140) вернет строку из пяти символов с кодами 76, 79, 67, 65 и 76, которые составят слово LOCAL. Несколько иначе трактуется символ с кодом 168, соответствующий ключевому слову FN. Если двум символам — букве и открывающей скобке или букве и знаку $, стоящим за CHR$ 168, соответствует одна из встроенных функций Beta Basic, то все эти символы будут заменены на полное буквенное название соответствующей функции. В противном случае код 168 будет просто заменен сочетанием символов F и N.

В режиме KEYWORDS 0 никаких изменений в старшей половине кодовой таблицы не происходит, за исключением замены по описанному сценарию символа с кодом 168.

Свойства функции SHIFTS в режиме 7, к примеру, дают возможность написать на языке Beta Basic драйвер принтера, позволяющего распечатывать тексты программ, или драйвера экрана для независимого редактора программ.

Завершим рассказ о способах обработки символьных значений описанием интереснейшего объекта системы Beta Basic — символьной переменной Z$. Использовать эту переменную можно, как и любые другие (A$...YS); при обычных операциях с символьными значениями Z$ ничем не отличается от них, но...

Но кроме этого в символьную переменную ZS можно заносить данные с помощью оператора PRINT (или LPRINT) в виде, предназначенном для вывода на экран. Данные, направленные в Z$, можно аккумулировать, то есть использовать неременную в качестве своего рода буфера99.

«Печать» данных в переменную Z$ производится оператором PRINT #14. Выполним программу:

10 INPUT LINE А$: LET Z$=""

20 PRINT #14; AT 5,10;INK 4;A$;PAPER 2;12345

В результате работы программы на экране не появятся ни значение, присвоенное переменной А$, ни числа, стоящие в строке за PRINT — все они будут спрятаны в символьную переменную Z$. В этом легко убедиться, распечатав ее содержимое с помощью оператора PRINT Z$. Данные предстанут на экране, причем будут выведены именно в том цвете и окажутся именно в тех позициях, которые были предусмотрены в операторе PRINT #14. Все это говорит о том, что в переменную Z$ передаются не только данные, hd и все коды управления выводом на экран.

Как уже упоминалось, переменная Z$ накапливает выводимую в нее информацию. При этом, если в конце очередного PRINT #14 после выводимых данных не стоит запятая или точка с запятой, они будут дополнены символом CHR$ 13 (возврат каретки). Вся информация может быть мгновенно удалена оператором LET Z$="' Попытка осуществить вывод в Z$ до того, как она была впервые определена, приведет к выдаче сообщения Variable not found.

Описанные свойства символьной переменной Z$ позволяют находить изящные решения многих вопросов программирования. Так, с ее помощью можно задерживать предназначенную для вывода информацию, при желании анализировать или видоизменять ее, пользуясь всеми доступными средствами для работы с символьными переменными, а затем по выбору направлять на то или иное внешнее устройство.

В заключение добавим, что такими «волшебными» свойствами можно наделить любую символьную переменную. Для этого достаточно выполнить оператор

РОКЕ 47027,"<имя переменной>"

- где <имя переменной> — заглавная латинская буква (без знака $). Так, инструкция РОКЕ 47027,"А" предпишет каналу "Z" работать с переменной А$. Делая аналогичные переключения на разные переменные, можно в любую из них осуществлять запись оператором PRINT #14 со всеми вытекающими отсюда последствиями.

Обращаем внимание на то, что переменные, стоящие в списке вывода оператора PRINT #14, должны быть определены или иметь последние изменения до инициализации переменной Z$. Если же это условие соблюсти невозможно, перед оператором PRINT #14 необходимо делать переинициализацию Z$ (без потери информации в ней) инструкцией LET Z$=Z$.




СОДЕРЖАНИЕ:
  1. Laser Basic - Вывод спрайтов на экран; Вывод на экран части спрайта; Перенос атрибутов; Преобразование окна экрана; Наборы переменных; Перемещение спрайтов; Наложение спрайтов; Копирование изображения с экрана в спрайт; Преобразование спрайтов; Скроллинг пейзажа; Изменение размеров области спрайт-файла; Вспомогательные графические операторы и функции; Определение столкновений спрайтов; Сервисные операторы и функции; Процедуры; Загрузка и запись программ.


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
scene intro - сценовое вступление.
How To Become The Best PC Swapper In The World ... EVER!
Фантастика - Эрис Лоренс "Этот проклятый компьютер".
Железяка - "SPRINTER-97": Видеосистема.
Слушаем вас ? - Valeron рассуждает на тему "чего не хватает спектруму?"

В этот день...   24 ноября