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


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


Для этого вам, может быть, потребуется вспомнить, как работают слова CONVERT и NUMBER из гл. 9. 4. Кроме извлечения строк из файла весьма полезно иметь возможность записывать их в файлы. Определите слово TOFILE, которое работает аналогично слову FILEWORD, но в отличие от него запоминает строку, начиная с указанного адреса в указанный файл с позиции, указанной в переменной POSITION. Строка должна быть в исходном виде в счетной форме, а запоминаться как несчетная строка, в конце которой находится байт-разделитель. Содержимое POSITION должно быть изменено так, чтобы оно указывало на позицию, следующую после байта-разделителя. Так, если в POSITION записан 0 и текст "fox" помещен, начиная с адреса PAD, то при исполнении PAD ADDFILE TOFILE текст "fox" будет запомнен в файле, начиная с байта номер 0; содержимое переменной POSITION будет изменено на 4, т.е. будет указывать на байт, следующий после пробела, замыкающего текст "fox".

Файл адресов

В гл. 9 мы построили телефонный справочник, а в данной главе мы его модифицировали, для того чтобы запоминать в блоках диска. Несмотря на свою гибкость и быстродействие, этот справочник не лишен недостатка, состоящего в том, что для каждой записи требуется 30 байтов для имени абонента и 30 байтов для адреса. Это приводит к напрасному расходованию памяти и не позволяет записывать более длинные имена. Более гибким оказывается другой подход: будем отделять вводимые данные друг от друга с помощью байта-разделителя, в этом случае они будут занимать ровно столько места, сколько действительно требуется. Именно так мы построим наш файл адресов.

Будем считать, что каждая запись в файле должна состоять из имени абонента, его адреса и номера телефона. Каждая запись будет разделяться на четыре поля: поле имени, поле названия улицы, поле названия города, почтового индекса и страны, поле номера телефона. Для отделения полей используем знак-разделитель "'"(код ASCII 94). Мы ставим перед собой задачу определить слова для вывода имени и адреса, поиска по имени, добавления новых имен и адресов в конец файла.


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