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

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

1. КОМАНДЫ ВВОДА-ВЫВОДА

  1. Команды ввода-вывода @...SAYGET.

  2. Шаблон

  3. Форматные функции ввода-вывода

  4. Команды вывода

  5. Команды ввода

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

3. РАБОТА С ПЕРЕМЕННЫМИ

  1. Команда присваивания

  2. Сохранение переменных

  3. Удаление временных переменных

  4. Просмотр переменных

4. МАССИВЫ ПЕРЕМЕННЫХ

  1. Описание переменных

  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

1) Команда ввода-вывода @...Say...Get

Команда является наиболее универсальной командой такого типа. Она используется для форматированного ввода-вывода данных на экран/принтер.

• @ <Y,X>

[SAY<Bыpl>

[PICTURE <вырС1>]

[FUNCTION <Фкоды1>]

[SIZE <BыpNl>, <BыpN2>]

[COLOR SCHEME <BыpN3>/COLOR <список цветовых пар>]]

[GET <переменная/поле>

[PICTURE <вырС2>]

[FUNCTION <Фкоды2>]

[DEFAULT <выр2>]

[ENABLE/DISABLE]

[MESSAGE <вырСЗ>]

[[OPEN] WINDOW <окно>]

[RANGE [<выр3>][,<выр4>]]

[SIZE <BыpN4>,<BыpN5>]

[VALID <BыpLl>/<BыpN6> [ERROR <вырС4>]]

[WHEN <BыpL2>]

[COLOR SCHEME <BыpN7>/COLOR <список цветовых пар>]] Здесь Y и X - пара чисел или переменных, которые определяют номер строки и столбца (для экрана это соответственно 0 - 24 и 0 - 79, для принтера определяется размером листа бумаги). Именно с этой позиции будет осуществляться ввод-вывод. Обязательным элементом команды является только @ <Y,X>. Если больше ничего нет, то курсор устанавливается в позицию экрана Y, Х и очищает строку Y вправо с позиции X.

Параметры команды:

@ Y,X SAY <выр1> - выдает с заданной позиции <выражение> любого типа данных (поля базы данных, переменные, элементы массивов). Разрешается указывать сложное <выражение>, состоящее из нескольких элементов, соединенных знаком сцепления "+". Все такие элементы тогда должны быть символьного типа или приведены к нему, например, функцией STR(). В качестве <выражения> может быть использована ПФ. Пусть числовая переменная Х=7. Тогда следующая команда

@ 4,8 SAY 'НОМЕР - '+LTRIM(STR(x,1))

выдаст строку "НОМЕР - 7".

SIZE <BыpNl>,<BыpN2> - определяет область, отводимую под выводимое поле. По умолчанию под поле/переменную отводится одна строка длиной, равной длине поля/переменной. Если она не умещается на экране/окне, данные продолжаются на следующей строке и т.д. Опция SIZE позволяет управлять этим процессом. Здесь <BыpNl> - число строк, a <BыpN2> - число колонок, отводимых под данные. При выводе, если есть возможность (<BыpN2> больше длины слова), слова переносятся на следующую строку целиком. Если нет - "ломаются" по границе области.

Опции PICTURE, FUNCTION, COLOR рассматривается ниже.

@ Y,X GET <переменная/поле> - с заданной позиции выводится переменная или поле записи с возможностью редактирования. Переменная до этого должна существовать (если не указана опция DEFAULT). Если опция GET используется совместно с SAY (@ Y,X SAY...GET...), GET-область располагается сразу (через одну позицию) после SAY-области.

DEFAULT <выр2> - опция действует только при работе с переменными и не влияет на поля баз данных. Она задает выражение, которое по умолчанию будет помещено в GET-переменную и предъявлено на редактирование. Опция может создавать временные переменные и присваивать им исходные значения. Однако если переменная ранее существовала и имела какое-то значение, то именно это значение и будет предъявлено на редактирование. Если вы хотите гарантированно задать исходное значение в опции DEFAULT, можно, например, предварительно уничтожить переменные командой RELEASE.

ENABLE/DISABLE - разрешается/запрещается доступ к GET-полю. Цвета таких полей определяются соответственно шестой/десятой цветовыми парами из цветовой схемы номер 1.

MESSAGE <вырСЗ> - для данного поля задает поясняющее сообщение <вырСЗ>, выводимое в последней строке экрана/окна (если не изменено командой SET MESSAGE).

RANGE <выр3>,<выр4> - этот элемент команды организует входной диапазонный контроль вводимых величин любого типа данных (числовые, строковые, даты). Здесь проверяется вхождение редактируемой переменной в заданный диапазон от <выр3> до <выр4>. Допускается отсутствие одной из границ - <выр3> или <выр4>. При отсутствии <выр3>, должна быть проставлена запятая. Если значение введенной переменной не находится внутри заданного диапазона, раздается сигнал и появляется сообщение о допустимых границах

SIZE <BыpN4>,<BыpN5> - определяет область, отводимую под редактируемое поле/переменную. Если фактическая длина данных больше обозначенной области, доступ к неуместившейся их части может быть осуществлен перемещением курсора (скроллингом).

Команда READ осуществляет собственно считывание данных из редактируемого поля.

VALID <BыpLl>/<BыpN6> [ERROR <вырС4>] -.если контроль должен быть более сложным, можно предусмотреть логическую проверку вводимом переменной в фразе VALID. Если указано условие <BыpLl>, то будет допущен ввод только такого значения, которое ему удовлетворяет, т.е. <вырL1>=.Т.. Если введено неправильное значение (<BыpLl>=.F.), система выдаст предупреждение о неправильном вводе Invalid Input и предложит после нажатия клавиши Пробел повторить ввод. Можно указать собственное сообщение <вырС4> на неправильный ввод, использовав параметр ERROR. Опция VALID (в отличие от RANGE) выполняет проверку всегда и допустит выход из редактируемой области только при нажатии клавиши Escape, если результаты проверки оказались неверными (даже если редактирование не выполнялось). Допускается применять пользовательскую функцию, которая должна возвращать значение логического или числового типа. Если в опции VALID получено числовое выражение <вырN6>, оно определит относительное положение поля, которое будет редактироваться после текущего. Выражение может быть положительным (движение вперед) и отрицательным (движение назад). Если <BыpN6> указывает на номер поля, которое отсутствует, команда прерывается. Если <BыpN6>=0, значит обнаружена ошибка ввода и курсор остается в том же поле. Никаких сообщений об ошибке при этом не выводится. В сложном случае и проверка ввода, и возможные сообщения могут быть реализованы в пользовательской функции, вызываемой предложением VALID. WHEN <BыpL2> - вход в редактируемое поле допускается только при истинности условия <BыpL2>. Если условие имеет значение .F., поле пропускается.

[OPEN] WINDOW <окно> - опция используется с мемо-полями. Редактируемое мемо-поле открывается в определенном ранее командой DEFINE WINDOW окне. Если указано слово OPEN, окно будет открыто по умолчанию. Во всех случаях для входа в мемо-поле на экране необходимо нажать Ctrl-Home или другие клавиши доступа к мемо-полю. Более удобно здесь использовать команду @...EDIT.

COLOR SCHEME <BыpN7>/COLOR <список цветовых пар> определяет раскраску областей ввода-вывода. По умолчанию используется цветовая схема номер 1: первая цветовая пара для SAY-вывода, вторая - для GET-областей.

Возможно соединение фраз SAY и GET в одной команде. Тогда область ввода GET предъявляется непосредственно после сообщения SAY в той же строке.

Команды @...GET позволяют осуществить только предъявление данных. Наделение GET-полей аппаратом редактирования и фактическое запоминание экранных образов данных в полях/переменных осуществляются другой командой:

• READ [CYCLE]

которая стоит обычно всегда вслед за командой/командами @...GET. Здесь опция CYCLE запрещает выход из команды READ по достижении первого/последнего объекта, обслуживаемого данной командой внутри окна/экрана. При достижении такого поля курсор перемещается по кругу на последнее/первое поле. Выход из READ остается возможным в случае нажатия клавиш Escape, Ctrl-W/End и использования команды CLEAR READ.

На самом деле возможности команды READ значительно шире - она имеет ряд опций по управлению вводом. С помощью одной команды READ можно осуществлять ввод данных в нескольких независимых окнах, а также иметь доступ к световым меню, окнам BROWSE и окнам, открытым командой MODIFY FILE/ COMMAND/MEMO.

Такие средства команды READ как раз и дают возможность создать интерфейс, "управляемый событиями". Значение этой команды трудно переоценить. Однако сейчас ограничимся только ее простейшей формой. Более полный формат будет рассмотрен в специальной главе, а пока дополнительные возможности при необходимости разъясняются прямо в тексте.

Пример. Пусть требуется осуществить ввод некоторого платежа за купленную продукцию в переменную PL, значение которой может находиться в диапазоне от одной тысячи до одного миллиона рублей. При вводе необходимо предусмотреть выдачу подсказки (слово ПЛАТЕЖ) и контроль заданного диапазона:

@ 10,8 SAY 'ПЛАТЕЖ -' GET pl ;

RANGE 1000,1000000 DEFAULT 1000 READ

При выполнении этих команд в десятой строке с восьмой колонки экрана появится слово ПЛАТЕЖ, непосредственно за которым контрастным цветом обозначится редактируемое значение, равное 1000:

ПЛАТЕЖ - 1000

Курсор установится на первой позиции редактируемой области. Затем можно ввести новое значение PL или оставить старое. После завершения редактирования следует нажать клавишу Enter. Если при этом была сделана попытка ввода числа, находящегося вне заданного диапазона, или нецифрового символа, последует соответствующее сообщение и после нажатия клавиши Space ввод будет нужно повторить.