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

2, 3) Шаблон. Форматные функции ввода-вывода

При необходимости можно контролировать не только диапазон вводимых значений, но и их форму, используя фразу PICTURE <шаблон> и/или FUNCTION <Фкоды>.

Шаблон состоит из специальных символов, которые устанавливает программист в соответствии с желаемой формой вводимой/выводимой переменной. Каждый символ шаблона определяет один символ переменной. Строка шаблона может содержать любые знаки, однако только символы, которые будут перечислены ниже (и символы "$", "," действие которых для отечественного пользователя бесполезно), влияют на данные. Иные символы будут лишь отображаться при вводе-выводе. При вводе курсор будет перескакивать через них. Этот механизм хорошо работает в числовых полях. В символьных полях обычно необходимо пользоваться кодом R (FUNCTION '@R...').

Символы шаблона PICTURE разрешают ввод вместо себя только определенных символов данных. В основном шаблоны предусмотрены для ввода данных (GET) и лишь иногда - для вывода (SAY). Ниже эти символы перечислены. В неочевидных случаях указано и их применение (GET, SAY).

А - Допускает ввод только букв.

L - Допускает ввод только логических данных вида T/F.

N - Допускает ввод только букв и цифр.

Х - Допускает ввод любых символов.

Y - Допускает ввод только логических данных вида Y/N.

9 - В символьных данных допускает ввод только цифр, в числовых - цифр и знаков "+" и "-".

# Позволяет вводить цифры, пробелы и знаки "+" и "-". ! - Преобразует строчные буквы в прописные (GET, SAY).

* - Звездочки выводятся перед числами. Может использоваться для защиты от подделки (SAY). . - Точка задает позицию десятичной точки в дробном числе

(GET, SAY).

Замечание к символу шаблона #. Если фактически выводимое или редактируемое число имеет больше дробных разрядов, чем предусмотрено шаблоном, лишние правые разряды отбрасываются без округления. Строка

@ 10,8 SAY 'СУММА -' GET s PICTURE '#####.##'

допускает вместо символов # ввод знака числа и цифр с десятичной точкой, фиксированной после пятой позиции.

Аналогичные задачи решает включение в команду форматных функций ввода-вывода (FUNCTION <Фкоды>). Но коды функций (Фкоды) распространяются на всю переменную, а не на отдельные ее символы. Обычно, коды функций сочетаются с шаблонами. В этом случае нет необходимости указывать в команде само слово FUNCTION, а нужно поместить в апострофы перед строкой шаблона знак @ и коды функций и, затем, обязательно через пробел - сам шаблон.

Форматные коды FUNCTION:

А - Ввод только букв. Пробел может быть реализован перемещением курсора (GET).

В - Выводимые числа выравниваются к левой границе поля (SAY).

I - Выводимый текст центрируется внутри поля (SAY).

J - Выводимый текст выравнивается к правой границе поля (SAY).

L - Выводимые числа отображаются с ведущими нулями, а не пробелами (SAY, GET).

К - При попадании курсора в данное поле (оно выделяется контрастным красным цветом) нажатие в начальный момент любой содержательной клавиши влечет немедленную его очистку. Если вы хотите выполнить редактирование, сначала следует нажать клавишу перемещения вправо. Режим удобен в случае радикального изменения данных (GET).

М <список> - задает <список> вводимых элементов данных, разделенных запятыми. При вводе в поле отображается первый элемент списка. Для вызова следующего элемента списка нужно нажать клавишу Пробел или первую букву элемента. Не допускается ввод каких-либо иных данных. Функция может быть использована только с данными символьного типа (GET).

S<n> - вывод не всей строки данных, а только ее N знаков с возможностью просмотра в этом окне остальной информации с помощью клавиатуры (GET и SAY для символьных данных).

R - Вывод в шаблоне символов, которые не являются частью данных (GET и SAY совместно с PICTURE). Применяется только с символьными данными. Функция R удобна для вывода символов, облегчающих восприятие информации, но которые нецелесообразно запоминать в данных. Среди этих символов не могут использоваться никакие из символов шаблона (т.е. символы ALNXY9#!*.,$).

Т - Удаляет при выводе ведущие и концевые пробелы в поле

(SAY).

Z - При выводе числа, равного нулю, выводятся все пробелы (GET, SAY). Эта функция особенно удобна, или скорее комфортна, в случае ввода данных в команде BROWSE. Она подавляет нули (от которых, иначе, рябит в глазах) в пустых полях базы данных, привлекая к ним внимание пользователя.

! - Буквы алфавита преобразуются в прописные (GET, SAY).

^ - Выводит числа в экспоненциальной форме (GET, SAY).

( - Заключает отрицательные числа в скобки (SAY).

Допускается сочетание форматных кодов между собой и со знаками шаблона. При этом символы кодов не должны противоречить друг другу.

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

Пример. Шаблон ввода телефонного номера в переменную TEL, включая код города, добавочный номер (если есть) и, возможно, фамилию абонента (кого пригласить к телефону), следующий:

@ 2,2 GET tel PICTURE;

'8R (999) ###-99-99 доб:##-## Спросить: '!ХXXXXXXXXXХХ';

DEFAULT SPACE(27) READ

Здесь цифровые позиции, которые должны быть заполнены обязательно, имеют символ шаблона "9", а необязательные (номер телефона может иметь меньше семи цифр и без добавочного) -"#", что позволяет пропускать их при вводе. Абонент (кого спросить) обозначен символами "X" (любой ввод), кроме самого первого знака. Значок "!" обеспечивает прописную букву в этом месте, поскольку здесь обычно вводится фамилия или имя. Если это должность, то хуже не будет. Область ввода, реализованная командами, может выглядеть следующим образом (позиции ввода, оставшиеся пустыми, указаны знаком подчеркивания):

012__-38-67 доб: -56 Спросить: Петрова_____

а содержимое переменной:

012__3867 56Петрова_____

Пример. Создать экран редактирования Данных в базе KADR.DBF, изображенный на рис. 12.1.

Сегодня 23.10.07

ДАННЫЕ 0 СОТРУДНИКЕ

Фамилия, инициалы: КУЛИКОВА Л.И. Дата рождения (день.месяц.год): 15.04.49 Табельный номер: 6 Количество детей:2 Пол (М или Ж): Ж Семейное положение: Б Ср. зарплата: 24ОО Перемещение по службе: Мемо Подразделение: 3А1

Выход с сохранением изменений - Ctrl-End, Без -

Esc

Ввод фамилии прописными буквами

Программа, реализующая эту задачу, приведена ниже. Разъясним неочевидные элементы.

В пятой строке экрана выводится текущая системная дата (DATE()). Вводимая дата рождения ограничена диапазоном 16-80 лет (трудоспособным возрастом). Поскольку пол может иметь только два значения М и Ж, они перечислены в списке альтернативных значений в функции ввода М (FUNCTION 'M М,Ж). Здесь возможен только выбор перечисленных значений путем нажатия клавиши Space. Аналогичным образом устроен ввод в поле SEM. Команда @ 5,9 ТО 15,70 DOUBL рисует двойной линией прямоугольник, а команда @ 11,10 ТО 11,69 - одинарную линию в строке 11.

@ 4,30 SAY 'ДАННЫЕ О СОТРУДНИКЕ'

@5, 9 ТО 15,70 DOUBL

@5,51 SAY ' Сегодня '+DTOC(DATE())+' ‘

@ 6,18 SAY 'Фамилия, инициалы:' GET fam ;

MESSAGE ‘Ввод фамилии прописными буквами’

@ 7,20 SAY 'Дата рождения (день-месяц.год):' ;

GET dtr RANGE DATE()-80*365, DATE()-16*365

@8,11 SAY 'Табельный номер:' GET tab

@ 8,33 SAY 'Количество детей:' GET det

@ 8,54 SAY 'Пол (М или Ж):' GET pol FUNCTION 'M М,Ж' ;

MESSAGE 'Выбор клавишей ПРОБЕЛ'

@ 9,15 SAY 'Семейное положение:' GET sem FUNCTION ‘M Б,Х,Р';

MESSAGE 'в Браке, Холост, Разведен - выбор клавишей ПРОБЕЛ'

@ 9,42 SAY 'Ср. зарплата:' GET szar

@ 10,12 SAY 'Перемещения по службе:' GET per;

MESSAGE ' Нажмите Ctrl-Home'

@ 10,40 SAY 'Подразделение:' GET podr

@ 11,10 ТО 11,69

@ 12,12 SAY 'Выход с сохранением изменений - Ctrl-End, Без - Esc'

READ CYCLE

Направление информации, выдаваемой командой @ в форме @...SAY на экран, принтер или в файл, осуществляется командой

• SET DEVICE TO SCREEN/PRINT/FILE <файл> Форма SET DEVICE TO PRINT/FILE направляет выдачу на принтер или в <файл>, a SET DEVICE TO SCREEN - на экран. Последняя форма принята по умолчанию, т.е. существует при загрузке FoxPro в компьютер. Если необходима выдача на печать, то в соответствующее место программы включается команда SET DEVICE TO PRINT, a после завершения печати она должна быть отменена командой SET DEVICE TO SCREEN. Данные, отображенные в GET-областях, командой игнорируются.

Привлекательность команды @... SAY... GET заключается в том, что она позволяет организовать любую форму ввода/редактирования данных в указанных диапазоне и виде. При этом соответствующая область экрана выделяется контрастным цветом. Кроме того, только эта команда и команды полноэкранного редактирования (BROWSE, CHANGE и др.) могут использоваться для непосредственного ввода данных в поля базы данных.