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


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


Вот как будет использоваться слово SEARCH-NAME. Предположим, что в файле находится имя "John Jones", а после него "Gary Jones". Вы хотите найти адрес и телефон Gary, но вам нужно вспомнить, как его фамилия.

Введите $" Jones" SEARCH$ $! и 0 POSITION ! а после этого SEARCH-NAME

Вы увидите, что на экран будет выведено "John Jones найдено", но вы искали не это. Введите теперь PAD C@ POSITION +! чтобы пропустить John (если желаете, определите для этой цели специальное слово NEXTFIELD), а затем снова введите SEARCH-NAME, тогда вы увидите сообщение "Gary Jones найдено". Текстовая строка "Gary Jones" была запомнена в PAD в виде счетной строки, переменная POSITION указывала на начало поля имени. Теперь, если вы введете PRINT-RECORD, на экране вы увидите имя абонента и его адрес. Обратите внимание на то, что, поскольку поиск производится во всех полях, будет найдена также строка "101 Jones St."

Теперь нам нужно сконструировать слово для добавления строки к концу файла, т.е. перед началом признака конца файла): : FINDEOF ( адр - ) BEGIN DUP FILEWORD ?EOF UNTIL DROP POINTBACK ;

Форма использования этого слова такая: ADDFILE FINDEOF

Кроме того, нам нужно слово, которое должно добавлять новое поле в файле, если задан адрес счетной строки, которая должна помещаться в это поле: : PUTFIELD ( $адр - ) $" ^" $+ TOFILE ; (Слово TOFILE было определено в упражнении 4 предыдущего раздела.) Вот, например, слово для добавления нового поля в запись адреса: : ADD-ADDR ( -- ) ADDFILE FINDEOF ." Имя " IN$ PUTFIELD CR ." Адрес " IN$ PUTFIELD CR ." Город/Штат " IN$ PUTFIELD CR ." Телефон " IN$ PUTFIELD CR $" &&&" PUTFIELD ; Обратите внимание на то, что новое поле наложилось на старый признак конца файла.

Несмотря на то, что приведенный пример имеет узкоспециализированное применение, он демонстрирует большое число приемов работы с текстовыми файлами.


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