РЕЖИМ ПЕРЕРАБОТКИ ТЕКСТА.
Запись, подлежащая переделке — это
всегда верхняя запись из режима "дисплея". И войти в режим "UPDATA" можно только из режима
"дисплей", если в нем есть хотя бы одна запись. Используя "
" и клавиши "1"..."9", установите вверху экрана нужную
вам запись и нажмите "U". Теперь перед вами
почти те же возможности, что и в режиме "добавление записи". Разница
в том, что вы можете использовать "D" для
перехода в режим "дисплей".
ПРИМЕР
Создать файл из имен и телефонных
номеров. Условное обозначение: "+" =
"ENTER".
Начало — от главного меню /ММ/.
·
* * * NAN NAME + AT TEL NUMBER + M
Здесь мы задали 2 имени — "NAME" для метки "N" и "TEL NUMBER"
для метки "Т".
**** AAN JONES P + АТ01
2345678+М
Это
одна запись с телефоном П.Джонса.
**** A PATKINS R + 0232
666554
+ М
Здесь мы использовали автозапрос
для ввода той же информации по Р.Аткинсу.
**** А Р
SMITH JOHN + 2332-45664 + М
**** А Р
AIRPORT + 01-687 23459 + М
**** А Р HAIRDRESSER + 876-5432 + М
Теперь у нас есть пять записей и
мы можем использовать режим для создания формата сообщения при просмотре файла.
**** ЕА1
Начало просмотра, метка 1.
**** ALO+N8+1YNN
TELEPHONE-LIST
Установили
заголовок "TELEPHONE-LIST" в строке 0, колонке
8.
**** ADN
3+N1-16-+-1+7YNNN+
Изображение имен, начиная со
стр.3, колонка 1, 16 симв. и т.п.
****
ADT3+N18-14+2YNN. . .+
Изображение телефонных номеров,
начиная с 18-й колонки строки 3, максимум 14 символов. Проверить правильность
наших форматов можно переходом в режим "дисплей".
****
D
Все выглядит вроде бы хорошо, но
попробуем сортировку по имени, а также проверим возможность внесения
изменений. Возвратимся в режим EDIT.
****
MER1
Просмотр сообщения с меткой 1.
****
R76N3
Изменили цвет бордюра,
интервал....
****
АВО-И65-И63+255
Изобразили прямоугольник.
**** D
Изображение изменилось. Теперь еще
раз изменим интервал. Назначим 2.
****
MER1
Просмотр сообщения с меткой 1.
**** R76N2
Изменение
интервала на 2.
****
ADZ4+N0+32+1+7 NNN
Мы
использовали метку данных Z, которой нет в нашем файле.
* *
* * D
Теперь,
допустим изменился номер Джонса
*
* * * 3
Установка Джонса вверх экрана.
**** и
Переход в режим переработки.
****
GT
Вызов телефонного номера.
****
R01-9953311+D
Замена новыми данными и возврат в
режим "дисплей". И наконец, запишем наш файл на ленту:
* * * *
NYFTELNUM ++
РЕЖИМ "ПОИСК"
Поиск осуществляется путем
сравнения какого-либо пункта записей с аргументом, наперед заданным.
Соответствующие записи обозначаются как выбранные, что отображается в значении
SEL=NNNNN. Для того чтобы начать поиск, сначала необходимо,
чтобы число выбранных записей было нулевым. Используя "R"
в главном меню, установите SEL=OOOOO. Теперь, нажав "S", начните поиск:
Первое меню предлагает:
А — поиск по всем записям;
L — по
выбранным;
М — возврат в главное меню.
После нажатия "А" или
"L" по запросу вводится метка пункта данных, который подлежит
сравнению. Выход через "ENTER". Следующее
меню запрашивает, является ли объект поиска символом /С/ или числом /N/. Числовые данные нормируются по NNNNNNNNNNNNN,
т.е. 3,198 воспринимается как 00000000003.19, что нужно в целях сравнения.
Следующее меню запрашивает тип
сравнения:
G —
больше;
L — меньше;
U —
неравенство;
Е — равенство;
S — имеет место для поиска
символьных данных.
Если ваш аргумент числовой, а при
поиске встретился нечисловой пункт, то поиск прекращается с сообщением:
**** MON
NUMERIC DATA: SKIP (OR) UPDATE
Если вы далее выбираете режим
"U"/" переработка текста"/, то поиск не может быть
возобновлен непосредственно. Если вы наберете "S" (пропустить), то
поиск перейдет к следующей записи.
Символьный поток несколько сложен.
1. Верхний и нижний регистры букв
считаются равными.
2. Если аргумент короче пункта
данных, но равен ему в своих пределах, то они считаются равными. Так, для
аргумента Фред равными будут: ФРЕДЕРИК, ФРЕДА и др.
3. Если аргумент длиннее пункта,
то неравенство: аргумент Фред не равен пункту фре.
Сканирование "S"
осуществляет поиск внутри пунктов записей, так кик аргумент Фред совпадает со
стрингами: "АЛЬФРЕД ВЕЛИКИЙ", "МАНФРЕД МАН", "ТЕТЯ
ФРЕДА" и т.п.
Можно производить поиск на основе
наличия или отсутствия пункта в записи, независимо от его значения, поскольку
отсутствующий пункт считается начинающимся с двоичного нуля. Так,
символьный поиск с аргументом "О" поделит записи на те, которые имеют
данный пункт, и те, которые не имеют. Используйте L, чтобы выбрать записи, не
имеющие пункт, или "G", чтобы выбрать имеющие.
ПРИМЕР
Выбрать записи, в которых пункт
"зарплата" лежит от 14000 до 15000, а пункт "отдел"
— "админ."
**** R SASNG 14000+
Выбор с зарплатой больше 14 000
*
* * * LSNL 15000+
Останутся только записи с
"зарплатой" менее 15000
*
* * * LDCE ADM +
Останутся только те записи, в
которых пункт "отдел" начинается с букв "ADM".
*
* **
D
Изображение выбранных записей.
ПОДВЕДЕНИЕ ИТОГА
Как и при поиске, все данные
нормируются. Вес нечисловые пункты останавливают расчет, как в режиме
"поиск ". Если выбранная запись не имеет соответствующего пункта,
ему присваивается нулевое значение. Отрицательные числа не принимаются.
Подсчет итога может быть выполнен
из главного меню или из режима "дисплей". Результат
изображается в строках 19-21.
Подведение итога возможно только для одного пункта данных.
Для более сложных арифметических вычислений необходимо записать программу в
бсйсик-области.
ЗАГРУЗКА
С ЛЕНТЫ И ЗАПИСЬ НА ЛЕНТУ
Для записи на ленту служит команда
ММ — "Y". Далее следует запрос: F/P?
F — только
файл;
Р — программа и файл;
ENTER —
выход.
После выбора "Р"—запрос
имени (до 10 символов для ленты). Просто "ENTER"
означает — "то же имя, что и раньше".
Вы можете ставить автоматический
оператор VERIFY в строку 4020 перед
GO TO USR R :
**** VERIFY
" " DATA FS ():
см. командный режим. Как войти в
Бейсик, чтобы сделать такие изменения? При этом предполагается, что VERIFY применяется только к записи одного файла
"F", а не к "Р".
После записи файла перемотайте
ленту и воспроизведите. Если все в порядке — ММ. Иначе GO TO
1 и повторите SAVE.
Для загрузки файла, который был
выгружен самостоятельно, через MM VF используйте MM VL.
Вы должны дать имя файла точно!!!
Если вы его забыли, дайте имя XXX и проиграйте ленту. Spectrum
покажет:
CHARACTER ARRAY :
FILENAME,
затем:
BREAK
GO
TO 1
MM
и начните все сначала. После
успешной загрузки вы получите ММ с новым именем файла. Нет необходимости
вычищать файл перед загрузкой другого. Это делается автоматически при загрузке.
Рекомендуем иметь по крайней мере
3 поколения ваших файлов для повышения надежности. Для этого используйте поочередно
3....4 кассеты. Никогда не записывайте дочерний файл на родительский, так как
при этом рискуете остаться ни с чем.
СЧЕТЧИКИ
В строке 23 почти всегда изображается состояние файловых
Счетчиков:
REE S= NNNNN
, SEL” NNNNN , SPA = NNNNN
I II
III
I. Счетчик количества записей в файле.
II. Счетчик пунктов, считающихся выбранными для режима
"дисплей". Заметьте, что при создании нового файла все данные
Считаются выбранными.
III. Приблизительный размер свободного пространства в байтах.
БЕЙСИК
Хотя MASTERFILE
и предназначен для хранения файлов, возможна и обработка их через
бсйсик-область. Например, у вас есть файл результатов экзаменов учеников с
группой пунктов экзаменационных оценок в каждой записи. Вы можете рассчитать
средний балл каждого ученика и хранить его в качестве дополнительного пункта в
записях.
Вызов Бейсика —
MM UY. Только выбранные записи попадут на обработку. В исходном
состоянии Бейсика в программе нет, кроме простого возвращения. Когда вызываете
Бейсик через ММ UY, управление передастся специальным строкам.
Строка 4900. Управление сюда
передается только однажды, перед тем как какие-либо записи начнут обрабатываться.
В этой точке можно установить параметры, которые будут в дальнейшем
использоваться в других точках. Выход через GO TO USR R.
Строка 5000. Управление передается
сюда в начале каждой записи из числа выбранных, но до того, как придут
какие-либо данные из записи. Используйте эту точку для инициализации любой
записи. Выход через GO TO USR R.
Строка 6000. Сюда управление
передастся один раз в начале каждого пункта выбранной записи. Пункт хранится в
С$ длиной 130. С$(1) — это метка данных, А С$(2ТО) — это сами данные. Вы можете
переприсвоить их другой переменной, если хотите использовать их позже. Выход
также GO TO USR R.
Строка 7000. Сюда передастся
управление один раз для каждой выбранной записи после того, как все пункты
просмотрены в строке 6000. Здесь можно выполнить действия с данными,
"схваченными" в строке 6000, а затем установить С$ одним из следующих
способов:
а) LET
0$="" — для указания на то, что никаких изменений '" с записью
делать не надо;
б) LET
С$="Х" — указывает на то, что пункты, имя которых
"X", должны быть стерты. При этом "X" должен быть заглавной
буквой от А до Z;
в) LET
С$="Х" — С$ (2TO)=DATA — указывает на то, что
пункт с именем "X" должен быть вставлен или заменен, если он уже
есть. "X" должен быть заглавной буквой от А до Z.
Заметьте, что только один пункт
данных может быть задействован за один проход Бейсика. Несколько пунктов можно
обра-ботать за ряд проходов, но для этого надо с умом использовать строку 4900.
Строка 9000. Управление передается
сюда только один раз. Это происходит после того, как обработаны все записи. Эту
строку можно использовать, чтобы распечатывать итог, предусматривать
переключатели, вызывать звуковые сигналы и т.п. Управление в
MASTERFILE передастся через GO TO USR R.
ПРИМЕР
Пусть надо создать новый пункт в записи. Это пункт "Y" равный стоимости товаров, т.е. произведению
количества Q на цену С.
4900 GO TO USR R
5000 LET С=0 : LET 0=0 : GO TO USR R
6000 IF C$(1)=-"Q" THEN LET Q=VAL C$ (2TO)
6010 IF C$(l )="C" THEN LET С =
VA1, С$(2ТО) 6020
GO TO USR R 7000 LET C$="Y" : LET С$(2ТО) - STR$(Q*C): GО ТО USR R
Строка 4900 ничего не делает. Строка 5000 устанавливает С и
Q равными 0 на случай, что мы не найдем другого, лучшего значения. Строка
6000 "схватывает" Q и С и превращает их в числовые данные. В
строке 7000 строим пункт "Y" и передаем его для вставки или
замены.
Кстати, обратите внимание, что мы не выполнили:
С$ = "Y" + STR $
(...) потому, что какой-то "жучок" в ROMe
иногда даст неправильные результаты при слиянии строковых переменных.
МИКРОДРАЙВ
С небольшими изменения в бейсиковой части
MASTERFILE программа может работать с микродрайвом. Заметьте, что
микродрайв не даст вам большего объема файла, а только облегчает доступ.
Загрузите MASTERFILE с ленты, как
обычно. Включите нео6ходимые бсйсик-строки. Очистите файл. Запишите
машинно-кодовую часть через MML и
CS+Q, входя без номера строки:
SAVE + "М";1; "MF*M CODE" CODE N+l . 65535-N
здесь N — число в операторе CLEAR
при загрузке программы. Далее измените строки, содержащие SAVE
и LOAD:
4020 SAVE *"M"; VAL
"I"; C$(TO VAL"10") DATA F$
(): GO TO USR R
4030 SAVE *"M"; VAL
"1"; C$(TO VAL "10") LINE VAL
"4035": GO TO USR R
4035 LOAD *"M";
VAL"1";"MF MCODE"
CODE: GO TO VAL "1"
4050 LOAD *"M"; VAL"1
" ; C$(TO
VAL"'10")DATA
F$():GO TO USR R
Теперь изменим строку 1:
1 PRINT; : PAPER VAL
"7":GO TO USR ( )
Если вы не знали раньше, то имейте в виду, что операция VAL"NNN" экономит 3 байта RAM
по сравнению с просто NNN. Далее GO TO
1 затем:
SAVE через MM
VP .
Теперь вы можете перенести свои файлы с ленты на картридж:
10 LOAD" " DATA E$
( ): INPUT N$:
SAVE *"M";1; N$ DATA
F$ ( )
Модифицированный
MASTERFILE будет запускаться с микродрайва 1. Мы рекомендуем записывать
файлы, а не программу с файлом. Заметьте, что на картридже нельзя хранить
файлы с одинаковым именем, поэтому рекомендуем наряду с именем фиксировать
также и дату, например:
АССТ AUG 24
Это поможет вам заодно при чтении
каталога картриджа решить, какой файл более свежий.
НЕКОТОРЫЕ POKE.
Для усовершенствования MASTERFILE
войдите в Бейсик, в командный режим и используйте оператор
POKE. Затем: GO TO 1, а потом запишите на ленту
через MM VP.
Ваши возможности:
Если вам нужно больше, чем 26 меток, их можно увеличить,
добавив О...9 и некоторые символы между 9 и А:
POKE 64282,48: POKE
64306,48: POKE 65534,48
Вывод на принтеры, отличные от ZX.
Существует много интерфейсов для подключения точечного принтера и других принтеров
к Spectrum. Так как MASTERFILE
выполняет печать, используя оператор COPY, вам надо
выбрать интерфейс, который поддерживает COPY.
TASMAN, HILDER BAY, KEMPSTON имеют
интерфейсы, совместимые с MASTERFILE.
Существуют два способа COPY — это ASCII и HI-RES. ASCII передает
символы ASCII по мере их генерации через функцию SCREENS. Преимущество ASCII — в
скорости печати и в совместимости со всеми видами принтеров.
В режиме HI-RES идет передача точки
за точкой, этот режим более медленный и применим только к точечным принтерам.