Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема_2_6_FoxМодульность.doc
Скачиваний:
4
Добавлен:
05.05.2019
Размер:
92.67 Кб
Скачать

Тема 2.6. Создание программных файлов. Модульность программ.

2. СОЗДАНИЕ КОМАНДНЫХ ФАЙЛОВ

5. МОДУЛЬНОСТЬ ПРОГРАММ

  1. Внешние и внутренние процедуры

  2. Процедурный файл

  3. Процедуры-функции

  4. Глобальные и локальные переменные

Если стандартная форма окна редактирования вам кажется неудобной, можно прибегнуть к индивидуальному определению места и формы предъявления данных для каждого поля/переменной, использовав специальные команды ввода/редактирования. Но сначала рассмотрим команды очистки экрана.

• CLEAR

Команда освобождает весь экран/окно от имеющейся информации и устанавливает курсор в левый верхний угол экрана/окна.

• @ <Y1,X1> [CLEAR/CLEAR TO <Y2,X2>]

Команда очищает в окне/экране прямоугольник с координатами верхнего левого угла Y1, XI и нижним правым углом окна/экрана (если указана опция CLEAR) или произвольными координатами Y2, Х2 нижнего правого угла (если указана опция CLEAR TO ...).

Пример. Очищаются прямоугольные области экрана.

@ 5,0 CLEAR && Координаты: 5,0 и правый нижний угол в 15,5 CLEAR TO 20,50 && Координаты: 15,5 на 20,50

2. Создание командных файлов

К настоящему моменту нами были рассмотрены некоторые основные команды языка FoxPro. Их практическое освоение, как мы надеемся, дало вам возможность почувствовать мощь инструмента FoxPro и власть над данными. Однако для построения полноценных систем обработки данных этого, конечно, недостаточно. Очевидно, что не хватает пока средств управления вычислительным процессом, организации диалога, структурирования программ, не обсуждался вопрос о временных переменных и массивах и т.д. Кроме того, во многих случаях такие команды оказываются слишком "грубыми" для работы в прикладных системах обработки данных.

Дальнейший материал посвящен изучению команд, ориентированных на прямое программирование процессов обработки данных. Такие программы создаются с помощью внутреннего встроенного текстового редактора FoxPro, вызываемого командой

• MODIFY COMMAND/FILE <имя текстового файла/маска>

[NOEDIT]

[NOWAIT]

[WINDOW <окно>]

Если используется вариант MODIFY COMMAND, по умолчанию вновь создаваемый файл считается командным (программным) файлом и ему присваивается расширение PRG, если оно не задано явно. Повторный вызов командного файла осуществляется этой же командой. Если вы забыли, как называется ваша программа, или хотите просмотреть сразу несколько файлов, можно задать <маску> с использованием обычных замещающих символов DOS -"*" и "'?". Например, команда MODIFY COMMAND F* вызовет на экран все файлы типа PRG, имена которых начинаются на букву F, каждое в свое окно, а команда MODIFY COMMAND * - вообще все PRG-файлы. Далее нужные окна можно оставить на редактирование, а остальные убрать, нажав клавишу Escape или установив маркер мыши в левый верхний угол, помеченный прямоугольником, и нажав кнопку мыши. Вариант MODIFY FILE не предусматривает каких-либо умолчаний имен файлов.

Внутренний редактор FoxPro применяется не только для работы с программами. Именно он используется для предъявления мемо-полей при нажатии клавиш Ctri-Home. Кроме того, его удобно привлекать для отображения текстовых файлов внутри прикладной системы обработки данных, например для того, чтобы пользователь мог решить, печатать данный документ или нет. По умолчанию редактор использует собственное системное окно, в заголовок которого выносится имя файла. Однако его можно "посадить" в любое предварительно определенное командой DEFINE WINDOW окно с нужным заголовком и заданным местонахождением. Для этого в команду следует включить опцию WINDOW <окно>. Нежелательный доступ пользователя к данным при этом может быть заблокирован опцией NOEDIT. Окно редактора может присутствовать на экране совместно с другими окнами, меню и прочими объектами прикладной системы. Чтобы открывающееся окно редактора не препятствовало активации других объектов текущего экрана, в команду включается опция NOWAIT.

Действие команды MODIFY COMMAND в общем не отличается от действия команды MODIFY FILE, за исключением одной особенности. Первая команда выводит строки, не "ломая" их у правого края окна. Это может быть удобно в случае, если выводимый в прикладной системе текст имеет размер строки больший, чем используемое окно. Очень часто в программах генерируются тексты (например, таблицы), имеющие больше 80 колонок. Доступ к данным, оказавшимся за пределами окна, в этом случае может быть осуществлен клавишами управления курсором. Команда же ' MODIFY FILE автоматически разбивает длинную строку на несколько коротких, чтобы уместить ее всю на экране, превращая таким образом в "кашу" выведенную таблицу. Разбивка строк может быть предотвращена с помощью меню настройки редактора с последующим запоминанием ее в файле FOXUSER.DBF. При этом прикладная система для эксплуатации должна иметь доступ к этому файлу. Если нет других причин использовать в программе файл FOXUSER.DBF, лучiе применять команду MODIFY COMMAND.

Созданная в редакторе программа запоминается в указанном в команде файле и может быть в дальнейшем вызвана на исполнение командой

• DO <имя командного файла > Расширение PRG указывать не обязательно.

Исполнение программы может быть прервано в любой момент нажатием клавиши Escape, если командой

• SET ESCAPE ON/OFF

установлено ON (действует по умолчанию). В готовой программе эта возможность должна быть подавлена параметром OFF. Рассмотрим возможности встроенного редактора FoxPro. В редакторе действие традиционных клавиш управления (перемещения курсора, PgDn, PgUp, Del, Ins и др.) имеет обычный смысл. Кроме того, есть возможность быстрого перемещения курсора клавишами:

С1г1-<вправо/влево> - на слово вправо/влево, Home/End - на начало/конец строки, Ctrl-Home/End - на начало/конец текста. После радактирования программы сохранение ее текста в файле осуществляется клавишами Ctri-W. Выход нажатием клавиш Escape или Ctrl-Q не влечет перезаписи текста в файл, однако, если перед этим было сделано изменение данных, сначала появится меню-предупреждение ("Discard changes?") о возможной необходимости сохранить данные.

В редакторе можно удалять/перемещать целые фрагменты текста. Выделение текста для манипуляций с ним осуществляется при одновременном нажатии клавиши Shift и одной из клавиш управления курсором. При этом выделяются следующие фрагменты текста:

Ctrl-<вправо/влево> - символы справа/слева, Shift-<BBepx/Bни3> - строки, Shift-Ctrl-<BпpaBo/BлeBo> - до конца/начала слова, Shift-Ctrl-End/Home - до конца/начала текста, Ctri-A - всего текста.

Выделение очень удобно выполнять мышью. Для этого надо поставить ее маркер на начало выделяемого участка, нажать кнопку мыши и, не отпуская ее, переместить курсор в конец участка. Кроме того, двойное/тройное нажатие кнопки дает возможность сделать быстрое выделение слова/строки.

Снятие выделения выполняется нажатием любой клавиши или перемещением мыши. Выделенный фрагмент может быть взят в буфер клавиатуры с удалением (клавишами Ctri-X) или без удаления (Ctri-C) его из текста. Текст, взятый в буфер, может быть извлечен из него в любое другое место, в том числе и в другом файле (в окне, открытом другой командой MODIFY COMMAND) с помощью клавиш Ctrl-V. Удаление выделенного фрагмента текста без взятия его в буфер осуществляется нажатием клавиш Delete/Backspace или любой содержательной клавиши.

Пусть требуется перенести фрагмент текста из одного файла в другой. Для этого сначала нужно поставить курсор в начало выделяемого участка в исходном файле и при нажатой клавише Shift выделить (иным цветом) нужный фрагмент клавишами со стрелками, PgDn/PgUp или другими клавишами или мышью. Затем следует взять этот текст в буфер нажатием клавиш Ctri-X (с удалением из исходного текста) или Ctri-C (без удаления). Далее следует загрузить файл, в который переносится текст, установить курсор в нужное место и извлечь из буфера на экран содержащийся там текст нажатием клавиш Ctrl-V.

Фрагменты текста можно извлекать с помощью клавиш Ctrl-C и из окна Help. Особенно удобно брать из него готовые примеры и пробовать их в своих командных файлах.

Удаление слова, в котором находится курсор, выполняется клавишами Ctrl-Backspace. Если курсор стоит в промежутке между словами, то удаляется слово, стоящее справа. Удаление других фрагментов текста выполняется выделением с последующим нажатием клавиш Delete/Backspace или Ctrl-X.

Редактор поддерживает режим отката. Если вы хотите отказаться от последней операции, сделанной в редакторе, то следует нажать Ctrl-Z. Если все-таки это действие оказалось необходимым, можно вернуться в исходное положение, нажав Ctrl-R.

В редакторе возможны поиск вхождения (Ctrl-F и Ctrl-G), замена вхождения (Ctrl-E), а также некоторые другие действия. Полное меню редактора можно увидеть, выбрав позицию Edit в главном меню FoxPro. Возможна настройка редактора в пункте Prefrences меню Edit. Настройки перечислены, в гл. 28, где описывается системное меню FoxPro. Если вас не устраивает внутренний редактор FoxPro, можно воспользоваться любым внешним редактором, к которому вы привыкли, указав его имя в файле CONFIG.FP.

Комментарии. Для ориентирования в текстах программ необходимы комментарии. Отдельная строка комментариев должна начинаться со звездочки (*). Комментарии могут быть внесены и в строку, где уже есть команда. Для этого они предваряются двумя знаками &&. Комментарии не влияют на обработку данных. В случае, если требуется временно исключить из программы значительный фрагмент, можно ограничить его операторами IF...ENDIF, указав в качестве условия "Ложь" (IF .F.).

Создадим очень простую систему обработки данных - контроль исполнения документов (КИД). Такие системы разной степени сложности обычно включают в АРМы руководителя. Программа, которую мы разберем, является довольно удобной, несмотря на то, что реализована она по существу одной командой BROWSE.

Поставим задачу. Пусть требуется хранить сведения об исполняемых документах в порядке намеченных сроков исполнения, а также выделить каким-то образом просроченные документы и документы, срок исполнения которых сегодня и завтра.

Запись такой базы данных (назовем ее KID.DBF) имеет структуру.

Содержание__________Название Тип____Длина

Дата исполнения DAT Дата 8

Номер документа NDOK Число 5

Содержание документа SOD Строка 60

Исполнители_________ISP______Строка._____60

Для ее создания воспользуемся командой CREATE kid. Задача ранжирования базы по дате легко решается индексированием ее по полю DAT. Назовем этот индексный файл KID.IDX.

INDEX ON dat TO kid COMPACT

Программа приведена ниже.

*----------------KID.PRG - контроль исполнения -------

SET TALK OFF

SET DATE GERMAN

SET DELETE ON

CLEAR

d=DATE()

USE kid INDEX kid

BROWSE TITLE 'Coxp.-^W Вых.-Еsс Доп.-^N Удал.-^’;

‘+’ (сегодня '+DTOC(DATE())+')' COLOR SCHEME 10;

FIELD stat=IIF(dat<d,'* Проср.',IIF(dat=d,'Сегодня',;

IIF(dat=d+l,'Завтра',''))) :H='Статус ':8, ;

ndok :H='Номер', ;

dat :H='Дата', ;

sod :H='Содержание' :27,;

isp :H='Исполнители' :24

PACK

USE

*------------------Конец модуля------------------

B примере сначала подавляются ненужные в данном случае автоматические сообщения FoxPro о результатах выполнения команд (SET TALK OFF) и устанавливается удобный формат даты (SET DATE GERMAN). Чтобы сделать невидимыми записи, помеченные к удалению в процессе работы с документами, используется команда SET DELETE ON. Экран очищается (CLEAR). Далее запоминается текущая дата в переменной D (d=DATEQ) и открывается база данных KID.DBF совместно с индексным файлом KID.IDX (USE kid INDEX kid).

Теперь главное - определение облика и функций BROWSE-окна. Цвет зададим стандартной цветовой схемой 10 для BROWSE-ОКОН (COLOR SCHEME 10). В заголовке (TITLE) укажем функции стандартных клавиш и текущую дату. Для того чтобы дата сочеталась с остальной информацией строкового типа в заголовке, она приводится к этому типу функцией DTOC(DATE()).