Язык программирования Форт


Глава 10. Хранение программ и данных - часть 24


В дальнейшем изложении мы будем рассматривать именно та кие файлы в памяти. Сейчас же мы обсудим, как можно использовать их для осуществления процедуры последовательного доступа при обращении как с числами, так и со строковыми данными. (Большую часть работы вам предстоит выполнить в упражнениях.)

Предположим, что имеется метеорологическая база данных, в которой хранятся записи о температуре, относительной влажности воздуха, скорости ветра и атмосферном давлении, которые производятся через каждые полчаса. База данных была собрана в блоки при помощи системы сбора данных, реализованной на Форте. Одновременно необходимо работать с данными, накопленными за четыре недели. Каждая запись содержит результаты четырех измерений, т.е. каждая запись состоит из 8 байтов. За день производится 48 записей (по одной записи за полчаса), поэтому число записей за неделю будет 48х7=336 или 336х4=1344 записей в месяц. Следовательно, для хранения записей за месяц потребуется 1344х8=10.572 байта, которые можно разместить на II блоках диска. Допустим, что нужно выводить данные за день, неделю и за месяц. Можно работать с этой информацией с помощью программы, которая обращается к очень большому массиву, размещенному в памяти, который мы назвали файлом в памяти. Сначала мы создадим массив, в котором будут храниться общее число блоков и их номера, например: CREATE DATA 11 , 50 , 51 , 52 , 53 , 60 , 61 , 62 , 63 , 64 , 65 , 66 , (Заметьте, что блоки могут идти не обязательно подряд.) Теперь резервируем место для размещения файла CREATE METFILE DATA @ 1024 * ALLOT Определим слово, которое должно перемещать данные из блоков на диске в файл METFILE: : GETFILE ( -- ) (Взять_файл) DATA @ 1+ 1 DO (Проходит по блокам) DATA I 2 * + @ BLOCK (Получает адрес каждого блока) METFILE I 1- 1024 * + 1024 CMOVE (Перемещает данные в файл) LOOP ;

При исполнении слова GETFILE файл в памяти (метафайл) будет заполнен информацией из соответствующих блоков.

Можно дать более общее определение слова GETFILE, которое не только будет заполнять метафайл, но и создавать его: : GETFILE ( адр - ) CREATE HERE OVER @ 1024 * ALLOT SWAP DUP @ 1+ 1 DO 2DUP I 2* + @ BLOCK SWAP I 1- 1024 * + 1024 CMOVE LOOP DROP DROP ;




- Начало -  - Назад -  - Вперед -