ГЛАВА 12
МАССИВЫ ДАННЫХ
Синтаксис команд чтения и записи в СОС для нетекстового массива с
заголовком "MONEY" выглядит так :
LOAD "MONEY" DATA МО или
SAVE "MONEY" DATA МО
для текстовых массивоа.добавляется $, например:
LOAD "MONEY" DATA М$()
Как большинство команд TR DOS, команды чтения и записи
синтаксически аналогичны командам СОС, но добавляется префикс и, воз-
можно, указатель дисковода. Маловероятно, что обращение к массивам дан-
ных будет осуществляться непосредственно из TR DOS. Природа массивов
данных такова, что они записываются и читаются из работающей программы.
Синтаксис, который должен быть использован в BASIC-программе, следу-
ющий:
RANDOMIZE USR 15619: REM: LOAD "MONEY" DATA MO
или
RANDOMIZE USR 15619: REM: SAVE "MONEY" DATA MO
ЗАМЕЧАНИЕ: этот синтаксис подразумевает, что Вы работаете с диско-
водом по умолчанию. Если у Вас двухдисковая система, то разумно предпо-
ложить, что диск с данными находится в одном и том же дисководе, скажем,
в В, в то время как диск с программой находится в дисководе по умолчанию
А. В этом случае следует пользоваться указателем дисковода:
RANDOMIZE USR 15619: REM: LOAD "B.MONEY" DATA MO
При копировании, стирании или переименовании файла данных команда
всегда должна заканчиваться указателем типа файла, то есть: DATA, иначе TR
DOS будет подразумевать Бейсик-файл:
COPY "A:MONEY", "B:MONEY" DATA
ГЛАВА 13
ФАЙЛЫ С ПОСЛЕДОВАТЕЛЬНЫМ И ПРОИЗВОЛЬНЫМ
ДОСТУПОМ
ОБЩИЕ СВЕДЕНИЯ
В предыдущей главе были рассмотрены обычные файлы. TR DOS под-
держивает еще два типа файлов - последовательные файлы и файлы с пря-
мым доступом. Для того, чтобы использовать файлы этих типов, вначале
необходимо открыть канал. SPECTRUM имеет 16 каналов. СОС использует
каналы с 0 по 3 для внутренних нужд, а каналы с 4 по 15 можно использовать
в TR DOS. Всякий раз, когда открывается канал для последовательного файла
или файла с прямым доступом, используется 336 байтов ОЗУ.
В файле данных могут храниться как числовые, так и текстовые перемен-
ные. Числовые переменные переводятся компьютером в текстовый вид. Тек-
стовая строка заканчивается возвратом каретки (ASCII код 13, вставляется
компьютером). В файле с последовательным доступом данные записываются
последовательно, как и на кассете. Чтобы считать строку, нужно начать с са-
мого начала файла. В файлах с прямым доступом данные хранятся в виде
записей. Любая из записей в таком файле может быть прочитана или записа-
на путем указания ее номера. Таким образом, доступ к последней записи
также быстр, как и к первой.
Все команды TR DOS для выбора дисковода, копирования, переимено-
вания и так далее так же хорошо работают и в применении к файлам с после-
довательным и прозвольным доступом. Единственным отличием является
индикатор типа файла "# "вместо CODE или DATA. Например:
COPY "В: PHONE"#, "A: PHONE"#
NEW "NEWFILE"#, "OLDFILE"#
ERASE "NAMES"*
Обращение к файлам с последовательным и произвольным доступом
редко происходит непосредственно из TR DOS. Таким образом, в примерах,
приведенных ниже, подразумевается, что обращение к файлам происходит
из программы на BASIC'e.
ПОСЛЕДОВАТЕЛЬНЫЕ ФАЙЛЫ
Последовательный файл может быть открыт для записи или чтения, но
не для того и другого одновременно. Для открывания файла для записи
синтаксис должен быть следующий:
OPEN номер канала, "имя файла", W
Когда канал открыт, запись в файл производится командой PRINT:
10 LET DOS«15619
20 RANDOMIZE USR DOS: REM: OPEN 4, "TEST:, W
30 PRINT 4: "THIS IS A TEST LINE"
40 RANDOMIZE USR DOS: REM: CLOSE 4
Обратите внимание на использование переменной DOS вместо 15619 и
на то, что файл должен быть закрыт. Текст в строке 30 будет записан на диск
в файл с именем "TEST". Если файл не будет закрыт, данные будут потеряны.
Любой закрытый файл может быть повторно открыт для чтения, модификации
и последующей записи с другим именем. Для открывания файла использует-
ся синтаксис:
OPEN номер канала, "имя файла", R
После того, как открыт канал для чтения, ввод информации
производится ключевым словом INPUT:
10 LETDOS-15619
20 RANDOMIZE USR DOS: REM: OPEN 7, "TEST", R
30 INPUT 7;A$
Данные из файла TEST будут загружены в переменную AS.
ФАЙЛЫ С ПРОИЗВОЛЬНЫМ ДОСТУПОМ
Файл с произвольным доступом состоит из записей, нумеруемых от О
вверх. Длина записи (максимальная 254 байта) выбирается во время откры-
вания файла. Запись хранится в виде отдельной строки. Строка, длина кото-
рой меньше заявленной, записывается сдвинутои влево и заканчивается
возвратом каретки. Оставшиеся байты записи имеют неопределенное зна-
чение. Если строка длиннее, чем длина записи, то записывается число бай-
тов, равное длине записи, остальные байты игнорируются и возврат каретки
не вставляется. Когда файл с произвольным доступом открывается первый
раз, TR DOS резервирует под него 16 секторов (приблизительно 4 К). В слу-
чае превышения этого объема число секторов автоматически расширяется.
Файл с произвольным доступом открывается следующим образом:
OPEN номер канала, "имя 0aiuia"RND, длина записи
Для записи в файл используется следующий синтаксис:.
PRINT номер канала, номер записи, имя переменной.
Пример:
100 RANDOMIZE USR 15619: REM:
OPEN 8, "ADDRESS" RND, 100
150 PRINT 8;72,D$
Канал 8 был открыт для файла ADDRESS, в котором для каждой записи
было зарезервировано 100 байтов. Содержимое переменной D$ было зане-
сено в запись номер 72 этого файла. В отличие от последовательного файла,
файл с произвольным доступом, после того как он открыт, можно одновре-
менно читать и писать. Для чтения используется такой синтаксис:
INPUT номер канала; (номер записи), имя переменной
Пример:
100 RANDOMIZE USR 15619: REM: OPEN 12, "TEST 1 "RND, 20
110 PRINT 12;20, A$
570 INPUT 12; (15), Ay
990 RANDOMIZE USR 15619: REM: CLOUSE 12
995 END
U строке 570 содержимое записи номер 15 (помните, что это 16-я
запись) читается в переменную А$. Когда все операции с файлом закончены,
файл должен быть закрыт, как показано в строке 990. Содержимое будет
потеряно, если питание будет выключено до того, как канал был закрыт.
Запись может содержать более одной переменной. Программа должна со-
единить две строки перед записью. Аналогично, программа должна раз-
делить строку на две переменные послё прочтения такой записи.