ГЛАВА 5
ЗАДАНИЕФОРМАТОВДАННЫХ
PAL используется для задания форматов вводимых и выводимых величин с помощью:
- использования шаблонов для управления вводом величин пользователем;
- использования спецификаций формата для управления выводом величин.
Настоящая глава описывает оба метода.
ИСПОЛЬЗОВАНИЕ ШАБЛОНОВ ДЛЯ ЗАДАНИЯ ФОРМАТА ВВОДА
Шаблон PAL является мощным и гибким средством управления вводом данных в поля таблицы. Шаблоны используются в командах ACCEPT и WAIT для:
- ограничения и "формирования" информации, вводимой в поле;
- облегчения ввода данных путем автоматического заполнения требуемых или принимаемых по умолчанию величин.
Шаблоны можно рассматривать как способ определения новых типов полей путем наложения ограничений на стандартный тип поля. Например, шаблон номера Общественной Безопасности (Social Security), приведенный на рис.5-1, определяет новый тип строкового поля. Таким же образом можно создать шаблон телефонного номера (включая или исключая код штата), или номер, некоторые цифры которого задаются пользователем.
Шаблоны также помогают пользователям заполнить принимаемые по умолчанию или повторяющиеся величины в процессе ввода данных. В частности, в последнем примере вы можете определить, что X в телефонном номере будет заполняться автоматически.
Предположим, вы хотите предложить пользователю задать номер Общественной Безопасности. Можно использовать шаблон в команде ACCEPT, чтобы обеспечить ввод данных в соответствующем формате. Наличие шаблона гарантирует, что пользователь наберет требуемое число цифр (другие символы этим шаблоном не допускаются), и что знаки "-" будут вставлены в номер в нужных местах.
ACCEPT "A11"
PICTURE "###-##-####"
TO SocSec
Рис.5-1. Использование шаблонов для задания формата ввода.
Хотя пример на рис.5-1 демонстрирует шаблон в команде ACCEPT языка PAL, нет необходимости обращатьcя к PAL, чтобы использовать шаблоны. Достаточно воспользоваться опцией ValCheck меню Edit, Coedit и DataEntry (смотри главу 7 руководства пользователя системы Paradox) для установки шаблона любого поля таблицы. После того, как шаблон установлен, система Paradox будет соблюдать ее при всех процессах ввода и редактирования данных. В языке PAL можно применить команду WAIT для использования шаблона.
Шаблоны можно использовать для полей любого типа. Например, вы можете потребовать, чтобы числа содержали определенное число цифр, или чтобы пользователь вводил даты, принадлежащие к определенному месяцу.
После установки шаблона пользователь должен соблюдать его полностью и точно. Если пользователь, работая с программой, опи санной в примере на рис.5-1, начнет ввод с буквы, то ответом будет только звуковой сигнал компьютера. При попытке покинуть поле, не заполнив все цифры, пользователь получит сообщение :
Incompete field
и курсор останется в этом поле. То есть пользователь имеет две альтернативы: либо заполнить все поле, либо оставить его целиком незаполненным. Вы можете исключить последнюю альтернативу, добавив в команду ACCEPT спецификацию REQUIRED или введя проверку допустимости величины в поле.
В процессе ввода данных в шаблон пользователь может использовать команды {Backspace} и {Del} для удаления символов, и команду {Ctrl}{Backspace} для очистки поля. Вы можете также создать шаблон для ввода одного символа из нескольких, выбираемых с помощью клавиши {Space}.
Как определять шаблоны
Шаблон является разновидностью маски. Он состоит из последовательности символов, задающих тип вводимой информации в соответствующую позицию, как перечислено в таблице 5-1.
Таблица 5-1. Символы для построения шаблонов.
Элемент шаблона Описание
# допускает только цифру ? допускает только букву & допускает только букву, преобразует ее в верхний регистр @ допускает любой символ ! допускает любой символ, преобразует его в верхний регистр любой символ ^ любой символ воспринимается буквально ; воспринимает следующий символ буквально * счетчик повторений [] не обязательно () операторы группирования , набор альтернатив
^ - любое число, буква или знак препинания, не определенный как специальный символ (т.е. не перечисленный в этой таблице) воспринимается буквально.
В примере на рис.5-1 номер Общественной Безопасности определен с помощью шаблона ###-##-####. Знак "#" - элемент шаблона, допускающий, чтобы на его месте стояла только цифра. Знак "-" - символ, который вводится в поле непосредственно.
Символы шаблона заполняются автоматически, кроме случаев, когда:
- вы подавили автоматическое заполнение;
- эти символы встречаются в начале шаблона.
Например, если пользователь перешел к заполнению поля, управляемого шаблоном ABC-### , то "ABC-" не заполняется автомати чески. Но, если пользователь ввел "A" или "a", или нажал {Spase}, то в поле появляется "ABC".
Если вам необходимо вывести в поле символ, который является управляющим символом формата, введите перед ним ";". Например, для определения индекса, состоящего из трех букв, "-" и знака "#" следует задать шаблон:
???-;#
Если бы вы опустили ";", то шаблон содержал бы три буквы, знак "-" и цифру. Можно использовать ";" перед любым из символов таблицы 5-1, если вы хотите, чтобы он воспринимался буквально. Ниже приведены несколько примеров:
$*#.##;@ ; цена, например, $345.67@ *?;? ; знак "?", добавляемый к любому тексту ###;,### ; номер из шести цифр с тысячами, отде
; ленными ","
???;;;# ; индекс, состоящий из трех букв, ";" и "#"
Специальные средства, используемые в шаблонах
Повторители -----------
Заметьте, что символ * полезен при определении шаблонов для больших полей. Например, следующие два шаблона эквивалентны:
*25#
#########################
В первом шаблоне за символом * следует число, определяющее, сколько раз следует повторить следующий за числом символ. Если бы вы опустили *, то шаблон определял бы поле, состоящее из числа 25 и произвольной цифры за ним. Для повторения группы символов, необходимо заключить ее в фигурные скобки:
*3{##:} ; эквивалентно ##:##:##:
Заметьте, что приведенный выше шаблон включает специальные символы и символы, воспринимаемые буквально, в одну группу. Каждая группа состоит из двух цифр, которые необходимо ввести пользователю, и знака ":", вводимого системой Paradox.
Использование фигурных скобок полезно также, когда необходимо несколько раз повторить число:
*3{5}# ; эквивалентно 555, за которыми следует лю
; бая другая цифра
Если бы не было скобок, то система Paradox восприняла бы эту спецификацию как *35# - строку из тридцати пяти произвольных цифр.
Если вы опустили число после *, то система Paradox будет считать, что следующую за * группу или символ следует ввести ноль или более раз. Этой возможностью следует пользоваться, когда вы знаете, что пользователь должен ввести фик сированную последовательность символов не менее определенного числа раз. Например:
&&*&
требует, чтобы было введено по меньшей мере две буквы.
Используя "*" как символ, воспринимаемый буквально, следует ставить перед ней ";".
Необязательные элементы -----------------------
Если вы хотите, чтобы часть шаблона была выбрана пользователем, следует заключить ее в квадратные скобки. Это значит, что пользователь может вводить данные, соответствующие этой части поля, но это необязательно. Пользователь может выбрать необязательную часть поля, введя символ, соответствующий ее шаблону, или нажав клавишу {Space}, если символ является буквой.
Шаблон на рис.5-2 предназначен для ввода семизначного телефонного номера, перед которым может находиться трехзначный код территории, не являющийся обязательным.
Пользователь может заполнить поле двумя способами:
- Если пользователь введет скобку "(" или {Space}, значит, он будет вводить необязательную часть шаблона, и система Paradox потребует от него ввода трехзначного ввода кода территории, а затем - семизначного номера.
- Если первый символ, введенный пользователем , будет цифрой, то система Paradox проигнорирует код территории и будет вводить цифры телефонного номера.
[(###)]###-####
/
необязательная часть шаблона
Рис 5-2. Необязательная часть шаблона.
Важно помнить, что ,когда пользователь достигает необязательной части шаблона, любой совпадающий с ее спецификациями символ вынуждает вводить всю необязательную часть. Например:
[###] ###-####
Здесь код территории не является необязательным. Предположим, пользователь пытается пропустить код территории и ввести первую цифру номера телефона. Но так как эта цифра удовлетворяет первой спецификации необязательной части, то система Paradox считает, что начат ввод кода территории, и требует ввода десяти цифр.
Аналогично, в шаблоне:
[#]##
первая введенная цифра будет считаться необязательной. Чтобы определить число из двух или трех цифр, необязательную цифру следует поставить после обязательных:
##[#]
То есть данный шаблон включает две цифры, которые должны быть введены, и одну цифру, которую можно опустить. Запомните, что шаблоны всегда обрабатываются слева направо, и необязательную часть следует ставить ближе к концу поля. Буквенные символы в начале необязательной величины никогда не заполняются автоматически. Например, в шаблоне:
#[ABC]#
символы "ABC" не вводятся автоматически после того, как пользователь введет первую цифру. Они вводятся только после того, как пользователь ввел "A" или "a" или нажал {Space}. Автоматическое заполнение работает только тогда, когда заполняемые символы являются обязательными, или когда пользователь выбирает опцию, вводя первый ее символ или нажимая {Space}.
Необязательные элементы могут быть вложены друг в друга, как на приведенном ниже шаблоне:
#[[#][a]]
Так как символы "[" и "]" являются управляющими, то восприниматься буквально они будут только, если перед ними поставить ";".
Варианты выбора ---------------
Многие прикладные системы требуют, чтобы пользователь ввел в поле одну из нескольких альтернатив. Индекс, например, может содержать номер из трех цифр, за которым следует код цвета, после которого необходимо ввести еще три цифры. Можно ввести набор альтернатив в шаблон, перечислив их через запятую. Например:
###RED###,###GRE###,###YEL###,###BLU###
или более рационально:
###{RED,GRE,YEL,BLU}###
Оба шаблона дают один и тот же результат. Во втором шаблоне фигурные скобки выделяют группу альтернатив.
Как и в случае с необязательными элементами в квадратных скобках, начальные символы альтернативы не вводятся автоматически. Например, после того как пользователь введет "345", символы "RED" не вводятся автоматически. Но если пользователь нажмет {Space} или введет "R", то "ED" вводится автоматически. Если пользователь введет "G", автоматически вводится "RE" и так далее. Система Paradox всегда вводит первую из совпадающих с набранными пользователем альтернатив, а если пользователь нажмет {Space}, то первую альтернативу из списка. Для ввода другой альтернативы пользователь должен задать ее первую букву.
Предположим, вы хотите, чтобы пользователь, вводящий даты, оперировал первыми семью днями месяца. Шаблон, подходящий для этого, приведен на рис.5-3. Заметьте, что необязательные цифры дают возможность ввести номер месяца, состоящий из одной или двух цифр, а также номер года, имеющий от двух до четырех цифр.
#[#]/{1,2,3,4,5,6,7}/##[#][#]
Рис 5-3. Альтернативы в шаблоне даты.
Альтернативы могут состоять не только из символов, воспринимаемых буквально, они могут содержать любые спецификации шаблона. Например, ниже представлен другой способ определения числа, состоящего из двух или трех цифр:
###,##
Заметим, что шаблон ##,### неверен, так как, если введены первые две цифры, будет удовлетворена первая из альтернатив, а при попытке введения третей цифры компьютер выдаст звуковой сигнал.
Приведенный ниже шаблон определяет, что вводимая строковая величина может принимать значения True или False:
True,False
Используя этот шаблон или аналогичные ему, можно легко получить эффект логической величины или создать поле логического типа в таблице системы Paradox.
Если вы хотите, чтобы запятая воспринималась как символ, который вводится в поле, в шаблоне перед ним необходимо поставить ";".
Подавление автоматического заполнения -------------------------------------
Некоторых пользователей раздражает автоматическое заполнение особенно, если они редко смотрят на экран в процессе ввода. Чтобы подавить его, следует заключить символы в фигурные скобки. Например, приведенный ниже шаблон подавляет заполнение дефисов в номере Общественной Безопасности:
###{-}##{-}####
Когда пользователь введет первые три цифры, "-" не заполняется автоматически. Для его ввода следует нажать "-" или {Space}.
Иногда вам необходимо подавить автоматическое заполнение, чтобы достичь желаемого эффекта. Предположим, среди кодов цветов существует код коричневого цвета BRO. Введение его в шаблон приводит к следующему:
###{RED,GRE,YEL,BLU,BRO}###
Предположим теперь, что пользователь ввел три цифры и букву B. Так как код BLU находится левее, чем BRO, то система Paradox автоматически добавит LU. Если вы хотите ввести BRO, такой результат вас не удовлетворит. Для решения этой проблемы можно использовать любой из шаблонов, приведенных ниже:
###{RED,GRE,YEL,B{L}U,BRO}###
###{RED,GRE,YEL,B{LU,RO}}###
Во втором шаблоне "B" как бы выносится за скобки из кодов "BLU" и "BRO". При этом пользователю необходимо ввести два символа, если первый из них "B". "{LU,RO}" является группой альтернатив, вложенной в другую группу.
- Символы, с которых начинается альтернатива, никогда не заполняются автоматически.
Следующим шагом является полное подавление автоматического заполнения:
###{R{E}{D},G{R}{E},Y{E}{L},B{L}{U},B{R}{O}}###
Примеры шаблонов
Используя обычные и специальные символы шаблонов PAL, можно создавать практически неограниченное количество шаблонов, например, новых типов данных. Ниже приведено всего лишь несколько примеров:
(*#.##),*#.## ; суммы денег, с использованием
; скобок для отрицательных сумм #[#][#]*{;,###} ; положительные числа, цифры
; которых разделены запятыми ; на тройки
{20,40,60,75,100}W ; лампы накаливания различных мощностей {A,B,C,D,E,F,G,H}[R]##-## ; размеры шин
&*? ; ввод слова с заглавной буквы &. &. &*? ; фамилия любой длины и инициалы *[&[*?][@][]] ; любое число слов, начинающихся с ; большой буквы
СПЕЦИФИКАЦИИ ФОРМАТА ДЛЯ УПРАВЛЕНИЯ ВЫВОДОМ
Спецификации формата ( параметры функции FORMAT ) предназначены для определения способа вывода переменных, также как шаблоны команды ACCEPT управляют вводом переменных. Спецификации форматов используются для:
- управления количеством значащих цифр в числе;
- проверки и выравнивания данных;
- изменения регистра, в котором выводятся буквы;
- определения формата вывода календарных дат;
- подавления пробелов , предшествующих величинам, когда они выводятся на печать или дисплей.
Вы можете сочетать форматы различных типов, разделяя их спецификации запятыми. Например, "W6,AL" определяет поле вывода из шести позиций с выравниванием по левому краю. Вы можете также сочетать форматы редактирования, которые следуют за буквой E.
Таблица 5-2. Спецификации формата.
Тип формата Спецификация Значение Тип данных
ширина Wn устанавливает ширину поля все Wn.m устанавливает ширину поля и все количество знаков мантиссы выравнивание AL выравнивание слева все AR выравнивание справа все AC установка в центр все регистр CU обращение в верхний регистр все CL обращение в нижний регистр все CC обращение в верхний регистр все первых букв слов редактирование E$ введение плавающего симво- N,S,$ ла $ EC введение разделителей чи- N,S,$ сел EZ печать начальных нулей N,S,$ EB использование пробелов N,S,$ вместо начальных нулей ES печать, используя научные N,S,$ обозначения E* использование звездочек N,S,$ вместо начальных нулей EI ^ использование международного N,S,$ формата чисел знак S+ печать чисел со знаками "+" N,S,$ или "-" S- печать чисел со знаком "-" N,S,$ SP печать отрицательных чисел N,S,$ в скобках SD печать обозначений DB или CR N,S,$ SC печать CR после отрицательных N,S,$ чисел даты D1 использование формата D mm/dd/yy D2 использование формата D Month dd,yyyy D3 использование формата D mm/dd D4 использование формата D mm/yy D5 использование формата D dd-Month D6 использование формата D Mon yy D7 использование формата D dd-Month-yyyy D8 использование формата D mm/dd/yyyy D9 ^ использование формата D dd.mm.yy D10 ^ использование формата D dd/mm/yy D11 ^ использование формата D yy-mm-dd логический LY использование Yes/No L вместо True/False LO использование On/Off L вместо True/False
^ - форматы не реализованы в системе Paradox версии 1.0 и 1.1
Ширина
Спецификация "W" используется для задания общего числа символов выводимой величины. Значения ширины заключены между 1 и 255. Если вы не определили ширину, то выводится вся величина.
Если выводимое выражение является числом, можно также задать число цифр в дробной части. При этом общая ширина должна включать в себя:
- количество цифр слева и справа десятичной точки;
- саму десятичную точку;
- знак;
- другие символы, включая разделители чисел и знаки "$".
Число цифр в дробной части может быть не более 15. Если длина числа превышает ширину формата, то выводится строка звездочек. Если длина строковой, логической величины или дробной части числа превышает ширину формата, лишние символы отсекаются.
Ниже приведены несколько примеров спецификаторов ширины:
?FORMAT("w6", "This is a test") ; выводит: This i ?FORMAT("w6", 1234567 ) ; выводит: ****** ?FORMAT("w1", (5 = 5) ) ; выводит: T ?FORMAT("w9.2",1234.567 ) ; выводит: 1234.56 ?FORMAT("w6.1",123456.78 ) ; выводит: 123456
Выравнивание
Спецификацию выравнивания используют для установки местоположения выводимой величины внутри поля вывода. Таким образом, устанавливая выравнивание, необходимо установить и ширину, если она не установлена, или если она равна длине выводимой величины, выравнивание не работает.
Если выравнивание не установлено, то логические и строковые величины выравниваются слева, а числа и календарные даты - справа.
Ниже приведены несколько примеров спецификации выравнивания:
; 12345678901234567890 ; выводит:
?FORMAT("w20",ac" "This is") ; This is ?FORMAT("w20",ac" "The Title") ; The Title ?FORMAT("w20",ac" "Of the Book") ; Of the Book
?FORMAT("w20",al,123456) ; 123456 ?FORMAT("w20",ar,123456) ; 123456
Регистр
Для управления печатанием заглавных букв в словах можно пользоваться спецификацией регистра. Например, можно задать печатание каждого слова с большой буквы (спецификация CC). При этом под словом подразумевается строка букв до следующего пробела.
Ниже приведено несколько примеров спецификаций регистра:
; выводит: ?FORMAT("cu","the quick brown fox") ; THE QUICK BROWN FOX ?FORMAT("c1","JUMPS OVER THE LAZY") ; jumps over the lazy ?FORMAT("cc", "dOG") ; Dog ?FORMAT("cc", "widgets'r us "+"too") ; Widgets'R Us Too
Редактирование
Для управления выводом чисел существует несколько спецификаций редактирования. Различные спецификациии редактирования можно сочетать, хотя спецификации EZ, EB, E* исключают друг друга. Таким образом, если вы хотите, чтобы перед числом стоял знак $ и тысячи в этом числе были отделены запятой, следует избрать спецификацию "E$C".
Ниже приведено несколько примеров спецификаций редактирования:
; выводит:
x = 34567.89
?FORMAT("w10.2, e$c",x) ; $34,567.89 ?FORMAT("w10.2, e$c1",x) ; $34.567,89 ?FORMAT("w13.2, e$c",x) ; $34,567.89 ?FORMAT("w14.2, e$cb,al",x) ; 34,567.89 ?FORMAT("w15.2, e$cz,al",x) ; $000,034,567.89 ?FORMAT("w15.2, e$c*,al",x) ; $*****34,567.89
Последняя опция часто используется для написания банковских чеков, чтобы предохранить от несанкционированной вставки цифр в число.
Для форматирования чисел кроме спецификаций редактирования можно использовать спецификации знака, описанные в следующем подразделе.
Знак числа
Для вывода чисел со знаком используется спецификация знака числа. Спецификации знака применяются только к числам. Для вывода каждого числа можно использовать не более одной спецификации знака.
Ниже приведено несколько примеров спецификаций знака:
; выводит: x = -3456.89
?FORMAT("w8.2, s+",x) ; -3456.89 ?FORMAT("w11.2, e$c, sc",x) ; $3,456,89CR ?FORMAT("w14.2, e$c*,sp",x) ; ($***3,456.89) ?FORMAT("w13.2, e$c*,s+",x) ; $-***3,456.89 ?FORMAT("w14.2, e$c*,sd",x) ; $***3,456.89CR
Обозночения DB (debit) и CR (credit) используется чаще всего в расчетных документах.
Спецификации редактирования и знака можно использовать совместно. Последние три примера из приведенных выше демонстрируют порядок, в котором выводятся элементы знака и редактирования:
- сначала следуют скобки (если они определены);
- знак "$" (если он определен);
- знак "+" или "-" (если он определен);
- заполняющие символы: пробелы, ноли или звездочки (если они необходимы и определены);
- само число;
- DB или CR (если он определен);
- закрывающие скобки (если они определены).
Календарные даты
Можно использовать спецификацию даты для вывода календарных дат в одном из одиннадцати форматов, поддерживаемых системой Paradox. Если вы определили спецификации даты и ширины,то ширина должна быть достаточна, чтобы туда поместилась дата, иначе будет выведена строка звездочек.
Ниже приведено несколько примеров спецификаций даты:
; выводит: ?FORMAT("d2",8/21/1976) ; August 21,1976 ?FORMAT("d7",8/21/1976) ; 21-Aug-1976 ?FORMAT("d11",8/21/1976) ; 76-8-21 ?FORMAT("d7,w5",8/21/1976) ; *****
Логические величины
Логические спецификации используются для замены величин True и False на Yes/No или On/Off при выводе. Эти спецификации применяются только к логическим величинам.
Например:
?FORMAT("LY", (5 = 5)) ; выводит: Yes
| <<
| <
| >
| >>
| Содержание |