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


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


На практике необходимо предусмотреть некоторую проверку на возможность появления ошибок, как, например, попытку записи данных после конца блока. Если рассматривать блок 50 как файл, то можно назвать входящие в него 10-байтовые массивы записями. Не забывайте, что для любой записи на диск требуется исполнить слово FLUSH. В действительности чаще всего не требуется запоминать результаты в массивах перед записью их в блок. Приведем пример, в котором будем рассматривать три блока как три файла записей данных наблюдений врачом пациентов. Пациентам присвоены номера 0 - 512, в записи о каждом пациенте должны быть указаны его вес, систолическое и диастолическое давление крови. Эти данные нужно ввести в три последовательно расположенных блока, начинающихся с адреса PATBLOCK, печатая вес, систолическое давление, диастолическое давление, номер пациента и слово PD (ввести_данные_пациента), т.е. последовательность 125 132 86 92 PD должна записать вес 125 фунтов в первый блок, систолическое давление 132 во второй блок и диастолическое давление в третий блок для пациента номер 92. Эти данные должны попадать в 184-й и 185-й байты каждого блока (2х92 и 2х92+1). Мы выбрали такое загадочное короткое имя слова PD только для того, чтобы облегчить ввод для оператора. Для начала нам нужна константа PATBLOCK: 50 CONSTANT PATBLOCK Вот как можно определить слово PD : : PD ( n1 n2 n3 -- ) 2 * >R (Сохраняет смещение в блоке) PATBLOCK 2+ BLOCK R@ + !UPDATE (Записывает систол. давление) PATBLOCK 1+ BLOCK R@ + !UPDATE (Записывает диастол. давление) PATBLOCK BLOCK R> + !UPDATE ; (Записывает вес)

Как видно из описания, слово PD будет одновременно стирать существующие записи и записывать новые. Не забудьте о том, что в конце записи необходимо сделать FLUSH.

Теперь мы можем определить слова для извлечения данных. В качестве примера приводим слово SD (от Show_Data - показать^данные): : SD ( n --) 2 * >R CR R@ 2/ ."Номер пациента" . CR R@ PATBLOCK BLOCK + @ ." Вес" . CR R@ PATBLOCK 1+ BLOCK + @ ."Систолическое давление".


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