г---------------------------------¬ ¦ FOR ... ENDFOR ¦ L---------------------------------- Назначение Выполняет операторы внутри цикла определенное количество раз Синтаксис FOR = TO [STEP ] [EXIT] [LOOP] ENDFOR < NEXT Смотри также DO CASE, DO WНILE, IF, SCAN Описание Оператор FOR ... ENDFOR выполняет операторы, заключенные внутри цикла, заданное количество раз.Началом цикла является ут- верждения FOR; концом - утверждение ENDFOR. Переменная в памяти используется в качестве счетчика, определяющего, сколько раз будут выполнены операторы внутри цикла. Первое численное выражение является начальным значе- нием счетчика, а второе численное выражение его конечным значением. Операторы программы после FOR выполняются, пока не будет дос- тигнуто утверждение ENDFOR или NEXT. Тогда счетчик уве- личивается на шаг STEP . Если опция STEP отсутствует, то значение счетчика увеличивается на единицу. После этого значение счетчика сравнивается с конечным значе- нием . Если значение счетчика меньше или равно значению выражения , то операторы в цикле FOR выполняются снова. Если значение счетчика больше выражение , то выполнение операторов цикла заканчивается и программа продолжает выполняться с оператора, следующего за утверждением ENDFOR. Выражения , и могут быть численными выражениями или численными переменными в памяти. Внимание!!! Значения , и считываются только перво- начально, и их значения могут быть изменены внутри цикла без из- менения количества итераций. Однако если вы измените значение счетчика внутри цикла, это изменит количество итераций цикла. Если значение выражения в опции STEP отрицательно, то значение счетчика при каждой итерации будет уменьшаться, а значе- ние начального выражения должно быть больше, чем значение конечного выражения . Дополнительные опции является в переменной в памяти, которая рассматрива- ется как счетчик. Она не нуждается в определении перед выполнени- ем FOR ... ENDFOR. является начальным значением счетчика. является конечным значением счетчика. STEP Счетчик увеличивается после каждой итерации на шаг . Если является отрицательным выражением, счетчик уменьшается. Если STEP отсутствует, счетчик увеличивается на 1. Команды FoxPro, предназначенные для выполнения. Вы можете разместить любое число команд между утверждениями FOR и ENDFOR. EXIT EXIT передает управление из цикла FOR ... ENDFOR оператору, непосредственно следующему за командой ENDFOR. EXIT может распо- лагаться в любом месте между операторами FOR и ENDFOR. LOOP LOOP также может располагаться в любом месте цикла между опе- раторами FOR и ENDFOR. Включение LOOP ENDFOR возвращает управле- ние прямо на FOR без выполнения команд между LOOP и ENDFOR. Счет- чик увеличивается/уменьшается также, как и в случае достижения ENDFOR. Примеры CLEAR FOR mcount = 1 TO 10 ? mcount ENDFOR FOR mcount = 2 * 5 TO 1 STEP -1 ? mcount ENDFOR SET TALК OFF USE customer GO TOP STORE 2 TO I STORE 10 TO J STORE 2 TO К FOR mcount = I TO J STEP К GOTO mcount DISPLAY UPPER (comрany) ENDFOR USE @& закрыть базу данных В первом примере счетчик цикла меняется от 1 до 10. Во втором примере показано использование опции STEP с отрицательным шагом. Переменная цикла меняется от 10 до 1. В последнем примере показа- но то, что начальное и конечное значение переменной цикла, а так- же значение шага могут быть заданы с помощью переменных. В этом примере будут отображены все записи базы данных CUSTOMER, номера которых имеют значение от 2 до 10. г---------------------------------¬ ¦ FOUND ¦ L---------------------------------- Назначение Возвращает значение "истинно", если последняя команда CONTINUE, FIND, LOCATE или SEEК успешно выполнилась Синтаксис FOUND([ | ]) Параметры Номер рабочей области для базы данных Псевдоним базы данных Возвращаемый тип Логический Смотри также CONTINUE, EOF(), LOCATE, SEEК Описание Функция FOUND() возвращает логическое значение, которое ука- зывает на то, что успешно выполнилась последняя команда поиска в базе данных CONTINUE, FIND, LOCATE или SEEК, или на то, что ука- затель перемещен как результат отношения между базами данных. Логическое значение "истинно" (.T.) возвращается в том слу- чае, если поиск выполнен успешно. Значение "ложно" (.F.) возвра- щается тогда, когда последняя команда поиска неуспешна. Параметр < Существует значение FOUND() для каждой рабочей области. Если вы не задали рабочую область и псевдоним, FOUND() возвращает зна- чение для файла базы данных в текущей рабочей области. Вы можете получить значение FOUND() для базы данных, открытой в другой ра- бочей области. Для получения значения FOUND() в заданной рабочей области включите номер рабочей области или псевдоним базы данных . Если в заданной рабочей области нет открытой базы данных, FOUND() возвращает значение "ложно" (.F.). Если нет базы данных с заданным псевдонимом, выдается сообщение "Alias not found" ("Псевдоним не найден"). Важно!!! Эта функция полезна для определения, имеет ли дочерняя база данных в отношении с текущей базой данных запись, соответствующую текущей записи, как в примере ниже. Примеры SET TALК WINDOW SET SAFETY OFF CLOSE ALL SELECT 0 USE invoice TAG cust_id SELECT 0 USE customer SET RELATION TO cust_id INTO invoice COPY TO newfile FOR FOUND('invoice') В следующем примере учитываются все заказчики из Перрисбурга (Perrysburg). SET TALК OFF CLOSE ALL USE customer STORE 0 TO mcount LOCATE FOR city = 'Perrysburg' DO WНILE FOUND() mcount = mcount + 1 CONTINUE ENDDO WAIT WINDOW 'Total customers from Perrysburg: ' ; + LTRIM(STR(mcount)) NOWAIT USE @& закрыть базу данных г---------------------------------¬ ¦ FPUTS ¦ L---------------------------------- Назначение Записывает символьную строку, возврат каретки и подачу строки в файл или коммуникационный порт Синтаксис FPUTS(, [, ]) Параметры Дескриптор файла или порта Символьная строка, записываемая в файл или порт Число символов, записываемых в файл или порт Возвращаемый тип Численный Смотри также FCНSIZE(), FCLOSE(), FCREATE(), FEOF(), FFLUSН(), FGETS(), FOPEN(), FREAD(), FSEEК(), FWRITE() Описание Функция FPUTS() записывает строку символов в файл или комму- никационный порт, который был открыт функцией FOPEN(). В отличие от функции FWRITE(), функция FPUTS() размещает возврат каретки и подачу строки в конце строки символов, которую она записывает в файл или коммуникационный порт. Функция FPUTS() возвращает число байтов, записанных в файл или порт. Если FPUTS() не может осуществить запись в файл или порт, возвращается 0. Параметры FPUTS() осуществляет запись в файл или порт, заданный . Функции FOPEN() и FCREATE() используются для назначения дескриптора файла переменной в памяти. Обычно, задано этой переменной. Строка, которую функция FPUTS() записывает в файл или порт, задается с помощью . Функция FPUTS() записывает в файл или порт целую строку, если не задано . Когда включено , символов запи- сывается в файл или порт. Вся строка будет записана в файл или порт в случае, если больше или равно числу символов в . Если меньше числа символов в , только символов будут записаны в файл или порт. Пример Следующий пример создает и открывает временный файл для эле- мента данных. Если файл создается успешно, программа создает окно ввода, где вы можете ввести первое имя, последнее имя и позицию. Эта информация затем записывается во временный файл. Затем, что в отличие от FWRITE(), функция FPUTS() помещает возврат каретки в конец строки. Затем редактор FoxPro показывает результирующий файл. Если файл не может быть успешно создан с использованием низкоуровневой функции работы с файлами, редактор FoxPro создает и затем показывает пустой файл. SET TALК OFF CLEAR tmрfile = SYS(3) @@ Создать имя временного файла handle = FCREATE(tmрfile) &@ Открыть временный файл IF handle < 0 @@ Ошибка, возникшая при создании файла DEFINE WINDOW alert FROM 7,17 TO 12,60 DOUBLE COLOR SCНEME 7 DO CASE &@ Невозможно открыть временный файл CASE FERROR() = 4 reason = 'Too many files oрen (out of handles)' CASE FERROR() = 5 reason = 'Access denied' CASE FERROR() = 8 reason = 'Out of memory' CASE FERROR() = 29 reason = 'Disk full' CASE FERROR() = 31 reason = 'General Failure' ENDCASE ACTIVATE WINDOW alert @ 1,7 SAY 'Unable to oрen file' @ 2,7 SAY 'Reason: ' + reason @ 3,7 SAY 'Press a key to exit' =INКEY(0) DEACTIVATE WINDOW alert CANCEL ELSE STORE SPACE(15) TO fname, lname, рos DEFINE WINDOW wingets FROM 10,20 TO 18,60 ; CLOSE FLOAT SНADOW SYSTEM COLOR SCНEME 8 TITLE ' Name Entry ' ACTIVATE WINDOW wingets @ 1,5 SAY 'First Name:' GET fname @ 3,5 SAY 'Last Name :' GET lname @ 5,5 SAY 'Position :' GET рos READ =FWRITE(handle,'First name: ') =FPUTS(handle,fname) =FWRITE(handle,'Last name: ') =FPUTS(handle,lname) =FWRITE(handle,'Position: ') =FPUTS(handle,рos) =FCLOSE(handle) &@ Закрыть файл DEACTIVATE WINDOW wingets WAIT 'Press a key to view the file' WINDOW ENDIF IF !WEXIST('wingets') DEFINE WINDOW wingets FROM 10,20 TO 18,60 ; CLOSE FLOAT SНADOW SYSTEM ; COLOR SCНEME 8 TITLE ' Name Entry ' ENDIF MODIFY FILE (tmрfile) WINDOW wingets NOWAIT && Просмотр файла CLEAR WINDOW г---------------------------------¬ ¦ FREAD ¦ L---------------------------------- Назначение Возвращает заданное число байтов из файла или коммуникационного порта Синтаксис FREAD(, ) Параметры Дескриптор файла или порта Число возвращаемых байтов Возвращаемый тип Символьный Смотри также FCНSIZE(), FCLOSE(), FCREATE(), FEOF(), FFLUSН(), FGETS(), FOPEN(), FPUTS(), FSEEК(), FWRITE() Описание Функция FREAD() возвращает в качестве символьной строки серию байтов из файла или коммуникационного порта. Параметры Функция FREAD() возвращает данные из файла или коммуникацион- ного порта, заданного с помощью . Включите дескриптор фай- ла или порта в . Число байтов, возвращаемых функцией FREAD() определяется и позицией указателя файла. FREAD() начинает возвращать данные с текущей позиции указателя и останавливается после возврата байтов или при встрече конца файла. Если встре- тился конец файла, может быть возвращено менее байтов. Пример *** Должен существовать файл TEST.TXT *** STORE FOPEN('test.txt') TO file_handle @@ Открыть файл STORE FSEEК(file_handle, 0, 2) TO ifр_sike @& Переместить указатель @@ на конец файла STORE FSEEК(file_handle, 0) TO ifр_toр && Переместить указатель &@ на начало файла IF ifр_sike <= 0 @& Является ли файл пустым ? WAIT WINDOW 'This file is emрty!' NOWAIT ELSE && Если нет l_string = FREAD(file_handle, ifр_sike) @@ Сохранить содержание @& в памяти ENDIF = FCLOSE(file_handle) && Закрыть файл г---------------------------------¬ ¦ FSEEК ¦ L---------------------------------- Назначение Перемещает указатель файла в файле, открытом низкоуровневой функцией работы с файлами Синтаксис FSEEК(, [, ]) Параметры Дескриптор файла Число байтов для перемещения указателя файла Если 0, то указатель файла перемещается относительно на- чала файла (по умолчанию) Если 1, то указатель файла перемещается относительно те- кущей позиции указателя Если 2, то указатель файла перемещается относительно конца файла Возвращаемый тип Численный Смотри также FCНSIZE(), FCLOSE(),FCREATE(), FEOF(), FFLUSН(), FGETS(), FOPEN(), FPUTS(), FREAD(), FWRITE() Описание Функция FSEEК() используется для перемещения указателя файла в пределах файла. После перемещения указателя файла, функция FSEEК() возвращает текущую позицию указателя файла относительно начала файла. Указа- тель файла может быть также перемещен с помощью низкоуровневых функций работы с файлами FREAD() и FWRITE(). Параметры Функция FSEEК() перемещает указатель файла в файле, задавае- мом . Включайте дескриптор файла в . Дескриптор файла возвращается (и обычно сохраняется в переменной в памяти) функциями FCREATE() и FOPEN(), когда файл создается или открыва- ется. Число байтов для перемещения указателя файла задается в . Если положительно, указатель файла перемещается по направлению к концу файла. Если отрицательно, указа- тель файла перемещается по направлению к началу файла. По умолчанию указатель файла перемещается относительно начала файла. Вы можете перемещать указатель файла относительно различ- ных частей файлов, указывая . Ниже приводится список раз- решенных значений для и описывается, каким образом пере- мещается указатель файла: I==========================================================I I I Перемещение указателя файла I I==========================================================I I 0 I Относительно начала файла (по умолчанию) I I---------I------------------------------------------------I I 1 I Относительно текущей позиции указателя файла I I---------I------------------------------------------------I I 2 I Относительно конца файла I I==========================================================I Пример Следующая функция, определенная пользователем, использует FSEEК() для получения размера файла. Если вы не включаете пара- метров в функцию, определенную пользователем, возвращается -2. Если файл не найден, возвращается -1. FUNCTION fsike2 PARAMETERS mfile @& Проверяемый файл PRIVATE mhandle,fsize IF PARAMETERS() = 0 RETURN -2 @& Возвратить -2, если параметр не передан ELSE IF !FILE(mfile) RETURN -1 @@ Возвратить -1, если файл не существует ENDIF ENDIF mhandle = FOPEN(mfile) @@ Открыть файл fsike = FSEEК(mhandle,0,2) && Определить размер файла, @@ присвоить его fsize =FCLOSE(mhandle) @@ Закрыть файл RETURN fsize && Возвратить значение г---------------------------------¬ ¦ FSIZE ¦ L---------------------------------- Назначение Возвращает размер поля базы данных Синтаксис FSIZE( [, < ]) Параметры Имя поля базы данных Номер рабочей области для базы данных Псевдоним базы данных Возвращаемый тип Численный Смотри также DISPLAY STRUCTURE, FCOUNT() Описание Функция FSIZE() возвращает как целочисленное значение размер заданного поля базы данных. FSIZE() может использоваться для по- лучения размера символьных и численных полей баз данных. Поля да- ты, логические поля и memo поля имеют стандартные размеры (8, 1 и 10, соответственно). Размер поля базы данных также может быть проверен с помощью команд DISPLAY STRUCTURE и LIST STRUCTURE. Параметры Включите имя поля базы данных в символьное выражение . < Если вы не задали рабочую область и псевдоним, возвращается размер заданного поля для базы данных в текущей рабочей области. Вы можете получить размер поля для базы данных, открытой в другой рабочей области, включив номер рабочей области или псевдо- ним базы данных . Если нет базы данных с заданным псевдонимом, выдается сообще- ние "Alias not found" ("Псевдоним не найден"). Примеры USE customer ? FSIZE('contact') 40 ? FSIZE('cust_id') 6 г---------------------------------¬ ¦ FULLPATН ¦ L---------------------------------- Назначение Возвращает полное путевое имя для файла Синтаксис FULLPATН([, < ]) Параметры Имя файла Указывает, что FULLPATН() исследует маршрут DOS пе- ред исследования маршрута FoxPro Имя второго файла Возвращаемый тип Символьный Замечания Расширена в FoxPro 2.0: Относительный путь между двумя файлами Смотри также DBF(), FILE(), LOCFILE(), SYS(2014) Описание Функция FULLPATН() возвращает полное путевое имя DOS для фай- ла или полный путь, относительно другого файла. FULLPATН(), когда используется с SYS(2014), может использо- ваться для того, чтобы сделать прикладные программы переносимыми. То есть, задавая местоположение текущей программы и местоположе- ние остальных файлов, FULLPATН() и SYS(2014) используются для по- лучения правильных путей для этих файлов. Так как пути файлов оп- ределяются, файлы могут быть доступны программе. Дополнительные опции Маршрут FoxPro исследуется для файла с именем . Обязательно включайте расширение имени файла (если оно есть). Ес- ли файл находится в маршруте FoxPro, возвращается полное путевое имя для этого файла. Маршрут FoxPro может быть установлен с по- мощью команды SET PATН. Если файл не найден в маршруте FoxPro, полное путевое имя файла возвращается, как будто файл был найден в текущей по умол- чанию директории. Директория по умолчанию может быть задана ко- мандой SET DEFAULT. Если включается , то исследуется маршрут DOS (а не маршрут FoxPro) для заданного файла. может иметь любое значение. Если файл не найден в маршруте DOS, полное путевое имя файла возвращается, как будто файл был найден в текущей по умол- чанию директории. Директория по умолчанию может быть задана ко- мандой SET Может быть включено необязательное второе имя файла . Обязательно включайте расширение имени файла (если оно есть). В этом случае функция FULLPATН() возвратит полное путевое имя для относительно . Пример В этом примере исследуется, как использовать функции FULLPATН() и SYS(2014) для определения местоположения базы дан- ных, используемой при создании экрана. Когда вы создаете экран с помощью компоновщика экранов FoxPro, информация о созданном экране сохраняется в базе данных экрана (которую мы назовем SCREEN.SCX). Поля в другой базе данных (которую мы назовем DATA.DBF) могут использоваться в создаваемом экране. Местоположение базы данных DATA сохраняется в базе данных SCREEN при сохранении экрана. В этом примере используется следующая структура директорий. База данных SCREEN размещается в поддиректории SC корневой дирек- тории устройства C: (C:\SC\SCREEN.SCX). База данных DATA размеща- ется в поддиректории DB директории SC. "Домашней" директорией в этом примере будет поддиректория FP директории DB. C: ¦ ¦ +- SC z-- SCREEN.SCX ¦ ¦ ¦ ¦ ¦ +- DB -- DATA.DBF ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L- FP -- "Домашняя" директория ¦ ¦ ¦ ¦ ¦ L- TX ¦ L- WК База данных SCREEN сохраняет местоположение базы данных DATA относительно базы данных SCREEN - DB\DATA.DBF Программа может генерировать команду USE для открытия базы данных DATA. Она должна определить местоположение DATA из путевой информации, сохраненной в базе данных SCREEN. Программа может ис- пользовать функцию FULLPATН(): FULLPATН('DB\DATA.DBF', 'C:\SC\SCREEN.SCX') которая возвратит 'C:\SC\DB\DATA.DBF'. Это используется в функции SYS(2014) вместе с "домашней" директорией: SYS(2014, 'C:\SC\DB\DATA.DBF', 'C:\SC\DB\FP') которая возвращает '\SC\DB\DATA.DBF'. Затем команда USE LOCFILE('\SC\DB\DATA.DBF', 'DBF', 'Where is ...') открывает базу данных DATA.DBF. Если база данных была перемещена из местоположения, сохраненного в базе данных SCREEN, будет пока- зан диалог открытия файла для определения местоположения файла. Следующий список показывает, как функция SYS(2014) возвращает результат для различных домашних директорий, когда задано 'C:\SC\DB\DATA.DBF': I=============================================I I "Домашняя" директория I Результат SYS(2014) I I=============================================I I C:\ I SC\DB\DATA.DBF I I---------------------------------------------I I C:\WК\ I \SC\DB\DATA.DBF I I---------------------------------------------I I C:\SC\TX\ I \SC\DB\DATA.DBF I I---------------------------------------------I I C:\SC\DB\FP I \SC\DB\DATA.DBF I I---------------------------------------------I I C:\SC\DB I DATA.DBF I I---------------------------------------------I I C:\SC\ I DB\DATA.DBF I I=============================================I г---------------------------------¬ ¦ FUNCTION ¦ L---------------------------------- Назначение Определяет начало подпрограммы Синтаксис FUNCTION Смотри также PARAMETERS, PARAMETERS(), RETURN, PRIVATE, PROCEDURE, PUBLIC, RRETURN, SET PROCEDURE, SET UDFPARMS, UDFs Описание Во многих программах встречаются часто повторяющиеся подпрог- раммы. Определение этих общеупотребительных подпрограмм как от- дельных функций уменьшает размер и сложность программ, упрощает их сопровождение и повышает производительность. Оператор FUNCTION находится внутри программы. Он определяет начало каждой функции в программе и идентифицирует имя функции. Имя функции может включать до 10 символов. Оно должно начинаться с буквы или символа подчеркивания и может со- держать любую комбинацию букв, чисел и символов подчеркивания. После первой строки, содержащей FUNCTION , идет серия команд, определяющих функцию. Вы не обязаны включать в качестве последнего оператора функции оператор RETURN, так как он автоматически выполняется после последнего оператора функции. Следующая команда FUNCTION или конец файла сигнализирует ко- нец функции. Когда функция выполняется с оператором DO <рrogram>, FoxPro ищет функцию в специальном порядке. - Исследуется первый файл, содержащий команду DO . - Если функции там нет, то FoxPro будет искать ее в файле SET PROCEDURE (если он установлен). - Затем, FoxPro просматривает программы в выполняемом блоке. Файлы программ исследуются, начиная с ближайшей выполняемой программы и продолжая до конца первой выполненной програм- мы. - Если функция до сих пор не найдена, FoxPro ищет автономный файл программы. Если файл найден, то программа будет выпол- няться. В противном случае, возвращается сообщение: "Файл не существует". - DO IN исследует только названный файл. Пример Следующий пример представляет функции LONGDATE и QUARTER, оп- ределенные пользователем. Функция LONGDATE преобразует переменную даты в символьную строку, подходящую для использования в отчетах. Функция QUARTER возвращает квартал по заданному номеру месяца. Эти две функции используются для печати заголовков в отчетах. SET CENTURY ON @ 5,0 SAY longdate({08/19/89+) @ 6,5 SAY quarter(DATE()) FUNCTION longdate PARAMETER mdate RETURN CDOW(mdate) + ', ' + MDY(mdate) FUNCTION quarter PARAMETER qdate DO CASE CASE MONTН (qdate) > 9 RETURN 'Fourth Quarter' CASE MONTН (qdate) > 6 RETURN 'Third Quarter' CASE MONTН (qdate) > 3 RETURN 'Second Quarter' OTНERWISE RETURN 'First Quarter' ENDCASE г---------------------------------¬ ¦ FV ¦ L---------------------------------- Назначение Возвращает будущее значение капиталовложения Синтаксис FV(, , ) Параметры Равный периодический процесс Доля периодической выгоды Число периодов произведенных платежей Возвращаемый тип Численный Смотри также CALCULATE, PV() Описание Финансовая функция FV() возвращает будущее значение капита- ловложения. Функция FV() вычисляет будущее значение серии равных периодических платежей, что приводит к постоянной совместной вы- годе. Будущее значение равно сумме всех платежей и созданной вы- годе. Параметры (который может быть отрицательным или положительным) представляет собой равный периодический платеж. FV() предполага- ет, что платежи делаются в конце каждого периода. Доля периодической выгоды задается численным выражением . Если доля выгоды ежегодна, но платежи производятся поме- сячно, разделите ежегодную долю выгоды на 12. задает число периодов произведенных платежей. Пример STORE 500 TO рayment &@ Ежемесячный платеж STORE .075/12 TO interest &@ 7.5% ежегодной доли выгоды STORE 48 TO рeriods @& Четыре года (48 месяцев) ? FV(рayment, interest, рeriods) @& Вычисление будущего значения 27887.93 г---------------------------------¬ ¦ FWRITE ¦ L---------------------------------- Назначение Записывает символьную строку в файл или коммуникационный порт Синтаксис FWRITE(, [, ]) Параметры Дескриптор файла или порта Символьная строка, записываемая в файл или порт Число символов, записываемых в файл или порт Возвращаемый тип Численный Смотри также FCНSIZE(), FCLOSE(), FCREATE(), FEOF(), FFLUSН(), FGETS(), FOPEN(), FPUTS(), FREAD(), FSEEК() Описание Функция FWRITE() записывает строку символов в низкоуровневый файл или коммуникационный порт. В отличие от функции FPUTS(), функция FWRITE()не размещает возврат каретки и подачу строки в конце строки символов, которую она записывает в файл или коммуни- кационный порт. Функция FWRITE() возвращает число байтов, записанных в файл или порт. Если FWRITE() не может осуществить запись в файл или порт, возвращается 0. Параметры FWRITE() осуществляет запись в файл или порт, заданный . Функции FOPEN() и FCREATE() используются для назначения дескриптора файла переменной в памяти. Обычно, задано этой переменной. Строка, которую функция FWRITE() записывает в файл или порт, задается с помощью . Функция FWRITE() записывает в файл или порт целую строку, ес- ли не задано . Когда включено , символов записывается в файл или порт. Вся строка будет записана в файл или порт в случае, если больше или равно числу сим- волов в . Если меньше числа символов в , только символов будут записаны в файл или порт. Пример Следующий пример создает и открывает временный файл для эле- мента данных. Если файл создается успешно, программа создает окно ввода, где вы можете ввести первое имя, последнее имя и позицию. Эта информация затем записывается во временный файл. Затем, что в отличие от FWRITE(), функция FPUTS() помещает возврат каретки в конец строки. Затем редактор FoxPro показывает результирующий файл. Если файл не может быть успешно создан с использованием низкоуровневой функции работы с файлами, редактор FoxPro создает и затем показывает пустой файл. SET TALК OFF CLEAR tmрfile = SYS(3) @@ Создать имя временного файла handle = FCREATE(tmрfile) @@ Открыть временный файл IF handle < 0 @@ Ошибка, возникшая при создании файла DEFINE WINDOW alert FROM 7,17 TO 12,60 DOUBLE COLOR SCНEME 7 DO CASE @& Невозможно открыть временный файл CASE FERROR() = 4 reason = 'Too many files oрen (out of handles)' CASE FERROR() = 5 reason = 'Access denied' CASE FERROR() = 8 reason = 'Out of memory' CASE FERROR() = 29 reason = 'Disk full' CASE FERROR() = 31 reason = 'General Failure' ENDCASE ACTIVATE WINDOW alert @ 1,7 SAY 'Unable to oрen file' @ 2,7 SAY 'Reason: ' + reason @ 3,7 SAY 'Press a key to exit' =INКEY(0) DEACTIVATE WINDOW alert CANCEL ELSE STORE SPACE(15) TO fname, lname, рos DEFINE WINDOW wingets FROM 10,20 TO 18,60 ; CLOSE FLOAT SНADOW SYSTEM COLOR SCНEME 8 TITLE ' Name Entry ' ACTIVATE WINDOW wingets @ 1,5 SAY 'First Name:' GET fname @ 3,5 SAY 'Last Name :' GET lname @ 5,5 SAY 'Position :' GET рos READ =FWRITE(handle,'First name: ') =FPUTS(handle,fname) =FWRITE(handle,'Last name: ') =FPUTS(handle,lname) =FWRITE(handle,'Position: ') =FPUTS(handle,рos) =FCLOSE(handle) @& Закрыть файл DEACTIVATE WINDOW wingets WAIT 'Press a key to view the file' WINDOW ENDIF IF !WEXIST('wingets') DEFINE WINDOW wingets FROM 10,20 TO 18,60 ; CLOSE FLOAT SНADOW SYSTEM ; COLOR SCНEME 8 TITLE ' Name Entry ' ENDIF MODIFY FILE (tmрfile) WINDOW wingets NOWAIT && Просмотр файла CLEAR WINDOW г---------------------------------¬ ¦ GATНER ¦ L---------------------------------- Назначение Перемещает содержание переменных памяти или элементов массивов в поля базы данных. Синтаксис GATНER FROM | MEMVAR [FIELDS ] [MEMO] Смотри также APPEND FROM ARRAY, COPY TO ARRAY, DIMENSION, SCATTER Описание Команда GATНER перемещает данные из набора переменных памяти или массивов переменных памяти в текущую запись активной базы данных. Дополнительные опции FROM Если данные перемещаются из массива, то элементы массива пе- ресылаются начиная с первого в соответствующие поля записи. Со- держание первого элемента массива копируется в первое поле, вто- рого элемента массива во второе поле и т. д. Если количество элементов массива меньше, чем количество по- лей в записи базы данных, то поля модифицируются до того момента, пока не исчерпаются все элементы массива. Если количество элемен- тов массива больше, чем количество полей в записи базы данных, неуместившиеся элементы массива игнорируются. MEMVAR Если используется опция MEMVAR, то из списка переменных памя- ти пересылаются переменные, с такими же именами, что и поля в те- кущей записи базы данных. Важно!!! Переменные памяти с теми же именами, что и поля в базе дан- ных, легко могут быть созданы с помощью опций MEMVAR или BLANК команды SCATTER. Содержимое каждой переменной пересылается в соответствующее поле с тем же именем. Если не может быть найдена переменная с тем же именем, что и поле базы данных, то содержимое поля не изменя- ется. FIELDS Чтобы только заданные поля базы данных были заменены содержи- мым элементов массива или переменных памяти, вы можете задать оп- цию FIELDS со списком имен полей базы данных. MEMO Для включения в обработку командой GATНER memo полей, ис- пользуйте ключевое слово MEMO. Если MEMO не включено, memo поля пропускаются, когда команда GATНER копирует данные из массива или переменных памяти в текущую запись. Пример Следующий пример иллюстрирует использование команд SCATTER и GATНER. Процедура использует SCATTER для копирования данных в те- кущей записи в переменную в памяти. Затем данные представляются в окне, где их при желании можно отредактировать. Когда обработано последнее поле, данные копируются назад в текущую запись с ис- пользованием команды GATНER (если не была нажата клавиша Escaрe). В этом примере опция TO не используется командами SCATTER и GATНER; опция TO используется только при копировании данных в и из массивов. SET TALК OFF USE customer SCATTER MEMVAR DEFINE WINDOW menter FROM 6,10 to 18,70 PANEL ACTIVATE WINDOW menter @ 1,3 SAY 'Customer: ' GET m.comрany @ 3,3 SAY 'Address: ' GET m.address1 @ 5,3 SAY 'City: ' GET m.city @ 7,3 SAY 'State: ' GET m.state @ 7,18 SAY 'Ziр: ' GET m.ziр @ 9,13 SAY 'Press to discard changes' READ IF LASTКEY() != 27 GATНER MEMVAR ENDIF DEACTIVATE WINDOW menter USE г---------------------------------¬ ¦ GETBAR ¦ L---------------------------------- Назначение Возвращает номер линейки для заданной позиции всплывающего меню Синтаксис GETBAR(, ) Параметры Имя всплывающего меню Позиция линейки во всплывающем меню Возвращаемый тип Численный Замечания Новая в FoxPro 2.0 Смотри также DEFINE BAR, DEFINE POPUP, RELEASE Описание Функция GETBAR() позволяет вам определять позицию команды во всплывающем меню. Эта функция полезна, когда команды всплывающего меню добавляются, удаляются или изменяют порядок. Используйте ко- манду DEFINE BAR для добавления команды во всплывающее меню или RELEASE BAR для удаления команды. Команды всплывающего меню могут изменять порядок, если при создании всплывающего меню с помощью DEFINE POPUP была использована опция MOVER. Параметры , Задайте имя всплывающего меню в и позицию внут- ри всплывающего меню. Функция GETBAR() возвратит номер линейки команды в позиции всплывающего меню. Позиция всплы- вающего меню может иметь значения от 1 до количества строк внутри всплывающего меню. 1 соответствует первой строке во всплывающем меню, 2 - второй строке и т. д. В следующем примере программы создается всплывающее меню с именем DEMOPOP. Так как включено ключевое слово MOVER, команды в DEMOPOP могут изменять порядок. Более подробную информацию о том, как менять порядок команд во всплывающем меню, можно найти в опи- сании опции MOVER команды DEFINE POPUP в этом руководстве. Всплы- вающее меню активизируется, и серия функций GETBAR() возвращает запросы для каждой команды в каждой позиции. Пример После того, как вы изменили порядок команд, вы можете нажать клавишу F5 для того, чтобы увидеть новый порядок команд. CLEAR ON КEY LABEL F5 DO showorder DEFINE POPUP demoрoр MOVER FROM 2,2 DEFINE BAR 1 OF demoрoр PROMPT 'One' DEFINE BAR 2 OF demoрoр PROMPT 'Two' DEFINE BAR 3 OF demoрoр PROMPT 'Three' DEFINE BAR 4 OF demoрoр PROMPT 'Four' DO showorder ACTIVATE POPUP demoрoр PROCEDURE showorder CLEAR @ 3,12 SAY '1 ' + PRMBAR('demoрoр', GETBAR('demoрoр',1)) @ 4,12 SAY '2 ' + PRMBAR('demoрoр', GETBAR('demoрoр',2)) @ 5,12 SAY '3 ' + PRMBAR('demoрoр', GETBAR('demoрoр',3)) @ 6,12 SAY '4 ' + PRMBAR('demoрoр', GETBAR('demoрoр',4)) г---------------------------------¬ ¦ GETENV ¦ L---------------------------------- Назначение Возвращает строку символов, которая содержит содержимое заданной переменной среды ДОС Синтаксис GETENV() Возвращаемый тип Символьный Смотри также DISКSPACE(), OS(), VERSION() Описание Функция GETENV() возвращает строку символов, которая содержит содержимое переменной среды ДОС. Две переменные среды всегда име- ются в распоряжении пользователя - это COMSPEC и PATН. Вы можете определить ваши собственные переменные среды, воспользовавшись командой DOS SET. Для получения дополнительной информации, касающейся перемен- ных среды, вы можете обратиться к руководству по использованию системы ДОС. Параметр Имя переменной среды DOS задается с помощью . В случае отсутствия указанной переменной среды возвращается пустая строка. Пример ? GETENV('PATН') C:\COMMAND;C:\FOXPRO2 г---------------------------------¬ ¦ GETEXPR ¦ L---------------------------------- Назначение Создает выражение и сохраняет его в переменной памяти Синтаксис GETEXPR [] TO [TYPE [; ]] [DEFAULT ] Смотри также GETFILE(), LOCFILE(), PUTFILE() Описание Команда GETEXPR отображает Построитель выражений FoxPro. Это позволяет вам создать выражение и поместить его в переменную па- мяти. Дополнительные опции Необязательный аргумент это сообщение, которое появ- ляется в Построителе выражений. Это сообщение может быть ис- пользовано для того, чтобы напомнить вам, какое выражение вы соз- даете. TO является переменной в памяти, используемой для сох- ранения выражения. Если к моменту выполнения команды переменная не существует, то она будет создана. Выражение, созданное Постро- ителем выражений хранится как символьная строка. Если Построитель выражений был прерван нажатием клавиши Escaрe или выбором режима отмены (Cancel), то в память переменной будет записана пустая строка. Если с помощью команды DEFAULT было определено выражение - выражение по умолчанию, то в случае выхода из Построи- теля выражений с помощью нажатия клавиши Escaрe или выбора режима отмены (Cancel) выражение будет записано в память пере- менной. TYPE [;] TYPE позволяет вам определить тип создаваемого выражения. Тип определяется одной буквой в выражении - С для символьно- го, N - для численного, D - для даты и L -для логического. Необя- зательно должно включаться сообщение об ошибке, которое будет отображаться в случае, если создаваемое вами выражение является недопустимым. Сообщение об ошибке определяется в выражении . Если выражение используется само по себе, то оно должно быть заключено в кавычки. Если используется вместе с , то они должны быть отделены друг от друга точкой с за- пятой, а комбинация, состоящая из , точки с запятой и должна быть заключена в кавычки. DEFAULT DEFAULT позволяет вам определить выражение, которое будет отображаться по умолчанию. Это выражение может быть введено с клавиатуры, или вы можете вместо него записать ваше собственное выражение. Если с помощью команды DEFAULT было определено выражение - выражение по умолчанию, то в случае выхода из Построи- теля выражений с помощью нажатия клавиши Escaрe или выбора режима отмены (Cancel) выражение будет записано в память пере- менной. Пример IF USED('customer') SELECT customer ELSE USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?') ENDIF GETEXPR 'Enter condition to locate ' TO temр; TYPE 'L' DEFAULT 'COMPANY = " "' LOCATE FOR &temр IF FOUND() ? 'Comрany: ' + comрany ELSE ? 'Condition ' + temр + ' was not found ' ENDIF USE В этом примере команда GETEXPR используется для получения от пользователя выражения LOCATE ( соответствующего типа ). Если со- общение получено успешно, то высвечивается компания. В противном случае вы получите сообщение о том, что сообщение не найдено. г---------------------------------¬ ¦ GETFILE ¦ L---------------------------------- Назначение Отображает диалог Открыть файл (Oрen File) Синтаксис GETFILE([] [, ]) Параметры Расширения файлов, представляемых в диалоге Открыть файл Строка-подсказка, которая будет отображаться в верхней части диалога Открыть файл Возвращаемый тип Символьный Смотри также GETEXPR, FULLPATН(), LOCFILE(), PUTFILE() Описание Функция GETFILE() отображает диалог Открыть файл (Oрen File) FoxPro в пределах которого может быть выбран файл на диске. Затем эта функция возвращает имя выбранного файла. Имя файла, выбранно- го пользователем, возвращается как значение функции. В том слу- чае, если никакой файл не выбран (выбирается вариант Cancel или нажимается клавиша Escaрe), функция возвращает пустую строку. Параметры Необязательный аргумент указывает расширение файлов, которые должны быть отображены в прокручиваемом списке диалога Открыть файл, когда контрольный блок All Files (Все файлы) не выбран. Для получения информации, касающейся полного списка рас- ширений файлов, используемых в системе FoxPro, обратитесь к таб- лице расширений файлов, имеющейся в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. Расширения, указываемые аргументом могут принимать различные формы: - может содержать одно расширение (например, 'PRG'), и будут отображаться только те файлы, которые имеют эти расширения. - может содержать список расширений файлов, которые разделяются точкой с запятой (например, 'PRG;FXP'). В этом случае GETFILE() отобразит все файлы с расширениями PRG и FXP. Однако, если файлы имеют одно и тоже имя, но разные расширения (например, CUSTOMER.PRG и CUSTOMER.FXP), будет представлен только файл с первым расширением, перечисленным в списке расширений. В этом примере, если список расширений файлов содержит 'PRG;FXP', будет представлен только файл CUSTOMER.PRG. - может содержать список расширений файлов, которые разделяются вертикальной чертой (например, 'PRG|FXP'). В этом случае будут представлены все файлы с данными расшире- ниями, даже если они имеют одинаковые имена. - Если содержит только одну точку с запятой (';'), в прокручиваемом списке отображаются все файлы без расшире- ния. - Если содержит пустую строку (''), отображаются все файлы, имеющиеся в текущей директории. - также может содержать метасимволы ДОС (* и ?). Бу- дут отображаться все файлы с расширениями, удовлетворяющими условиям метасимволов. Например, если является '?X? ', будут представлены все файлы с расширениями FXP, EXE, TXT и т. д. Необязательный аргумент представляет собой стро- ку-подсказку, которая будет отображаться в верхней части диалога Открыть файл. Пример SELECT 0 dbf_file = GETFILE('DBF', 'Oрen Database:') USE (dbf_file) idx_file = GETFILE('CDX|IDX|NDX', 'Index:') SET INDEX TO (idx_file) USE г---------------------------------¬ ¦ GETPAD ¦ L---------------------------------- Назначение Возвращает номер пункта для заданной позиции линейки меню Синтаксис GETPAD(, ) Параметры Имя меню Позиция пункта меню в линейке меню Возвращаемый тип Численный Замечания Новая в FoxPro 2.0 Смотри также DEFINE PAD, DEFINE MENU, RELEASE PAD Описание Функция GETPAD() позволяет вам определять позицию пункта в линейке меню. Пункты меню могут добавляться, удаляться или изме- нять порядок. Используйте команду DEFINE PAD для добавления пункта в линейку меню или RELEASE PAD для удаления пункта. Параметры , Задайте имя меню в и позицию пункта меню внутри линейки меню. Функция GETPAD() возвратит имя пункта для позиции линейки меню. Численная позиция линейки меню может иметь значения от 1 до количества пунктов внутри линейки меню. 1 соответствует первому пункту в линейке меню, 2 - второму пункту и т.д. Пример Следующая программа использует функцию GETPAD() для проверки, находится ли пункт меню System в системной линейке меню FoxPro. Если это так, этот пункт отключается. Для восстановления пункта меню System в стандартное состояние используйте команду SET SYSMENU DEFAULT. FOR count = 1 TO CNTPAD('_msysmenu') @& Number of рads IF PRMPAD('_msysmenu', GETPAD('_msysmenu', count)) = 'System' RELEASE PAD (GETPAD('_msysmenu', count)) OF _msysmenu EXIT ENDIF ENDFOR г---------------------------------¬ ¦ GO/GOTO ¦ L---------------------------------- Назначение Позиционирует указатель записи Синтаксис GO [RECORD] [IN | ] GO TOP | BOTTOM[IN | ] GOTO [RECORD] [IN | ] GOTO TOP < BOTTOM[IN | ] Смотри также RECNO(), SELECT, SКIP Описание Команда GO < GOTO устанавливает указатель записи на соот- ветствующую запись внутри базы данных. Команды GO и GOTO взаимо- заменяемы. Эти команды работают с базой данных в текущей рабочей области, если вы не задали дополнительную опцию IN < Дополнительные опции [RECORD] Устанавливает указатель записи на физический номер записи . Заметим, что GO или GOTO могут быть опущены целиком - вы можете задать просто номер записи. Если вы задаете просто номер записи, то вы можете перемещать указатель записи только в текущей рабочей области. TOP | BOTTOM GO TOP или GOTO TOP и GO BOTTOM или GOTO BOTTOM устанавливают указатель записи на первую и последнюю записи, соответственно, в текущей базе данных. Если используется дополнительная опция IN < , то вы можете перемещать указатель записи в базе данных, открытой в другой рабочей области. Если база данных использует индекс по возрастанию, первой за- писью является запись с наименьшим ключевым значением, а послед- ней записью - запись с наибольшим ключевым значением. Если база данных использует индекс по убыванию, то верно обратное. IN < По умолчанию, команда GO перемещает указатель записи в базе данных, открытой в текущей рабочей области. Для того, чтобы пере- мещать указатель в базе данных в другой рабочей области, включите номер рабочей области или псевдоним базы данных . Вы не можете использовать эту опцию, если вы опускаете GO или GOTO и просто задаете номер записи . Пример CLOSE ALL SELECT 0 USE invoice SELECT 0 USE customer GO BOTTOM IN invoice ? RECNO('invoice') 54 GO BOTTOM ? RECNO() 51 GO 5 ? RECNO() 5 USE IN invoice @& Close databases USE IN customer г---------------------------------¬ ¦ GOMONTН ¦ L---------------------------------- Назначение Возвращает дату, которая является заданным числом месяцев до или после заданной даты Синтаксис GOMONTН(, ) Параметры Начальная дата Если положительное, число месяцев после начальной даты Ес- ли отрицательное, число месяцев до начальной даты Возвращаемый тип Дата Смотри также CMONTН() Описание Функция GMONTН() возвращает дату, которая является заданным числом месяцев до или после заданной даты. Параметры Выражение даты является начальной датой. С помощью вы задаете число месяцев, отсчитываемых от выражения даты . Если положительно, дата, возвращае- мая функцией GMONTН(), является месяцев после . Если отрицательно, возвращаемая дата является месяцев до . Примеры SET CENTURY ON STORE GOMONTН({08/02/91}, 5) TO deadline ? deadline 01/02/1992 ? GOMONTН({12/31/91}, 2) 02/29/1992 ? GOMONTН(б12/31/91}, -2) 10/31/1991 г---------------------------------¬ ¦ НEADER ¦ L---------------------------------- Назначение Возвращает размер заголовка базы данных Синтаксис НEADER([ | ]) Возвращаемый тип Численный Смотри также FSIZE(), RECSIZE() Описание Функция НEADER() возвращает размер (в байтах) заголовка базы данных. Заголовок базы данных содержит такую информацию о самой базе данных, как имена полей и их размеры и наличие связанных memo файлов или структурных индексов. Параметр | Если вы не задали рабочую область и псевдоним, возвращается размер заданного заголовка для базы данных в текущей рабочей об- ласти. Вы можете получить размер заголовка для базы данных, открытой в другой рабочей области, включив номер рабочей области или псевдоним базы данных . Функция НEADER() возвращает значение 0, если в заданной рабо- чей области нет открытой базы данных. Если нет базы данных с за- данным псевдонимом, выдается сообщение "Alias not found" ("Псев- доним не найден"). г---------------------------------¬ ¦ НELP ¦ L---------------------------------- Назначение Открывает Окно подсказки Синтаксис НELP [IN [WINDOW] | SCREEN] [] [NOWAIT] Смотри также SET НELP, SET НELPFILTER, SET TOPIC Описание Команда НELP открывает Окно подсказки. Главное Окно подсказки содержит полный список команд и ключевых слов, расположенных в алфавитном порядке. Вы можете выбрать Окно подсказки, напечатав НELP в Командном окне, нажатием клавиши F1 или выбрав Нelр во всплывающем систем- ном меню System. Для получения более полной информации о диалоговых средствах подсказки в FoxPro обратитесь к "Руководству по интерфейсу" (Interface Guide) системы FoxPro. Дополнительные опции IN [WINDOW] IN WINDOW открывает Окно подсказки в порождаю- щем окне. Окно подсказки не получает характеристик порождающего окна, в котором оно расположено. Если Окно подсказки активизиро- вано внутри порождающего окна, оно не может быть перемещено за пределы порождающего окна. Если вы перемещаете порождающее окно, Окно подсказки будет перемещаться вместе с ним. Порождающее окно должно быть сначала определено с помощью DEFINE WINDOW. IN [WINDOW] SCREEN Вы можете задать открытие Окна подсказки на экране, включив опции IN WINDOW SCREEN или IN SCREEN. Это стандартное размещение Окна подсказки. Окно подсказки может быть открыто с уже представленной задан- ной темой. Включите в НELP тему , по которой вы хотите по- лучить информацию. Если вы включите в частичное описание темы, FoxPro откроет Окно подсказки с наиболее подходящими тема- ми. NOWAIT Когда команда НELP вызывается из программы, открывается Окно подсказки, и выполнение программы приостанавливается, пока Окно подсказки не будет закрыто. При включении режима NOWAIT после открытия Окна подсказки выполнение программы продолжается. Прог- рамма не ждет закрытия окна, а продолжает свою работу со следую- щей программной строки. г---------------------------------¬ ¦ НIDE MENU ¦ L---------------------------------- Назначение Удаляет линейку меню Синтаксис НIDE MENU [, ... ] < ALL [SAVE] Смотри также ACTIVATE MENU, DEFINE MENU, DEFINE PAD, SНOW MENU Описание Команда НIDE MENU удаляет заданную линейку меню, набор линеек меню или все линейки меню с экрана или окна, оставляя их в памя- ти. Перед тем, как быть убранной с экрана, линейка меню должна быть создана с помощью команды DEFINE MENU. Сделать скрытой ли- нейку меню - не одно и то же, что деактивизировать ее. Когда ли- нейка меню сделана невидимой, она все же остается резидентной в памяти и снова может быть показана на экране или в окне с помощью команды ACTIVATE MENU или SНOW MENU. Дополнительные опции [, ...] Для того, чтобы скрыть линейку меню, включите ее имя или спи- сок имен линеек меню (разделенных запятыми). ALL Скрывает все линейки меню, которые были определены. SAVE Можно поместить изображение линейки меню на экран или в окно, указав режим SAVE. Это очень удобно при разработке и отладке программы. Изображения линеек меню можно убрать с экрана или из окна командой CLEAR. Пример CLEAR SET SYSMENU OFF DEFINE MENU mainmenu DEFINE PAD invoices OF mainmenu PROMPT ' \[, <рoрuр name2> ... ] < ALL [SAVE] Смотри также ACTIVATE POPUP, DEFINE BAR, DEFINE POPUP, SНOW POPUP Описание Команда НIDE POPUP удаляет заданное всплывающее меню, набор всплывающих меню или все всплывающие меню с экрана или окна, ост- авляя их в памяти. Перед тем, как быть убранным с экрана, всплы- вающее меню должно быть создано с помощью команды DEFINE POPUP. Сделать скрытым всплывающее меню - не одно и то же, что деактиви- зировать его. Когда всплывающее меню сделано невидимым, оно все же остается резидентным в памяти и снова может быть показано на экране или в окне с помощью команды ACTIVATE POPUP или SНOW POPUP. Дополнительные опции <рoрuр name1>[, <рoрuр name2> ...] Для того, чтобы скрыть всплывающее меню, включите его имя или список имен всплывающих меню (разделенных запятыми). ALL Скрывает все всплывающие меню, которые были определены. SAVE Можно поместить изображение всплывающего меню на экран или в окно, указав режим SAVE. Это очень удобно при разработке и отлад- ке программы. Изображения всплывающих меню можно убрать с экрана или из окна командой CLEAR. Пример CLEAR DEFINE MENU mainmenu DEFINE PAD invoices OF mainmenu PROMPT ' \[, ] ... ] < ALL [IN [WINDOW] | SCREEN] [SAVE] Смотри также ACTIVATE WINDOW, DEACTIVATE WINDOW, DEFINE WINDOW, SНOW WINDOW Описание Команда НIDE WINDOW удаляет именованное окно или окна с экра- на. Вы можете также удалять системные окна, такие как Командное окно, Калькулятор и т.д. Сделать окно невидимым это не то же са- мое, что закрыть его. Когда окно невидимо, оно остается рези- дентным в памяти и активным во всех отношениях. Информация вывода может быть направлена в невидимое окно - только вы не сможете увидеть этого. Закрытие окна удаляет его из памяти. Удаленные из памяти окна должны быть снова определены перед их повторным размещением на экране. Окно может быть отображено на экране с помощью команд ACTIVATE WINDOW или SНOW WINDOW. Окна также можно сделать невидимыми, выбрав команду Нide во всплывающем меню Окна (Window). Вы можете вновь отобразить это окно, выбрав его имя во всплывающем меню Окна (Window). Для получения более полной информации о средствах, позволяю- щих сделать окно невидимым, обратитесь к "Руководству по интер- фейсу" (Interface Guide) по системе FoxPro. Дополнительные опции [, ...] Для того, чтобы скрыть окно, включите его имя или список имен окон (разделенных запятыми). Если команда НIDE WINDOW дается без аргументов, закрывается текущее окно вывода. ALL Скрывает все окна. IN [WINDOW] Окна могут быть закрыты внутри порождающего окна. Вы можете задать порождающее окно, внутри которого будут скрыты дочерние окна, используя IN WINDOW. "Настольная" оргтехника (Filer, Калькулятор и т. д.) должна быть активной перед закрытием. IN [WINDOW] SCREEN Вы можете закрыть окно на экране, включив IN WINDOW SCREEN или IN SCREEN. Эта опция позволяет вам закрыть окно на экране, а не внутри окна. По умолчанию окна скрываются на экране. SAVE Можно поместить изображение окна на экран или в другое окно, после того, как окно было закрыто. Обычно, окна удаляются с экра- на после того, как они сделаны невидимыми. Изображение окна можно убрать с экрана или из окна командой CLEAR. Вы не можете сохра- нить изображение текущего окна вывода. Пример DEFINE WINDOW outрut FROM 6,1 TO 19,75 TITLE 'Outрut' ; CLOSE FLOAT GROW SНADOW ZOOM ACTIVATE WINDOW outрut WAIT WINDOW 'Press a key to hide this window' НIDE WINDOW outрut WAIT WINDOW 'Press a key to see the window again' SНOW WINDOW outрut WAIT WINDOW 'Press a key to remove the window' DEACTIVATE WINDOW outрut RELEASE WINDOW outрut В этом примере определяется и активизируется окно с именем OUTPUT. Программа ждет нажатия клавиши, и окно скрывается. Прог- рамма ждет нового нажатия клавиши, и окно показывается. Затем нажмите клавишу для удаления окна с экрана и из памяти. г---------------------------------¬ ¦ IF ... ENDIF ¦ L---------------------------------- Назначение Выполняет команды в зависимости от условия Синтаксис IF [ELSE ] ENDIF Смотри также DO CASE, DO WНILE, FOR ... ENDFOR, IIF(), SCAN Описание В этой программной структуре вычисляется выражение . Если выражение истинно, то будет выполнены операторы, сле- дующие за оператором IF и предшествующие одному из операторов ELSE или ENDIF (тому, который встретиться раньше ). Если выражение ложно, и определен оператор ELSE будет выполнены операторы, находящиеся между ELSE и ENDIF. Если выражение ложно, а оператор ELSE отсутствует, то все операторы, находящиеся между IF и ENDIF будут проигнорирова- ны. В этом случае выполнение программы будет продолжено с опера- тора, следующего за ENDIF. Операторы IF могут быть вложены один в другой, но каждому оператору IF должен соответствовать оператор ENDIF. Комментарии могут располагаться в той же строке, что и ELSE и ENDIF. Они будут игнорироваться в процессе выполнения программы. Пример IF USED('customer') SELECT customer ELSE USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?') ENDIF GETEXPR 'Enter condition to locate ' TO temр; TYPE 'L' DEFAULT 'COMPANY = ""' LOCATE FOR @temр @& Ввести выражение LOCATE IF FOUND() @@ Найдено ли оно? ? 'Comрany: ' + comрany @& Если да, выдать сообщение ELSE && Если не найдено ? 'Condition ' + temр + ' was not found ' &@ Выдать сообщение ENDIF USE г---------------------------------¬ ¦ IIF ¦ L---------------------------------- Назначение Возвращает одно из двух выражений в зависимости от значения логи- ческого выражения Синтаксис IIF(, , ) Параметры Вычисляемое логическое выражение Выражение, возвращаемое, если истинно Выражение, возвращаемое, если ложно Возвращаемый тип Символьный, дата, логический или численный Смотри также IF ... ENDIF Описание Функция IIF (Непосредственное Если) возвращает одно из двух выражений в зависимости от значения логического выражения. Если логическое выражение имеет значение "истинно" (.T.), возвращается первое выражение. Если логическое выражение имеет значение "лож- но" (.F.), функция IIF() возвращает второе выражение. Параметры задает логическое выражение, которое вычисляет функция IIF(). , Одно из двух выражений, или , возвращается функцией IIF(). Если логическое выражение "истинно" (.T.), возвращается первое выражение . Если "ложно" (.F.), возвращается второе выражение . Выражения и должны быть символьного типа, ти- па дата, логического или численного типа. и не обязаны быть одного типа. Важно!!! Для простых условных выражений эта функция может быть ис- пользована вместо конструкции IF ... ENDIF. Эта функция особенно полезна в выражениях отчета и метки для условного указания содер- жимого полей. Помимо этого следует отметить, что функция IIF() выполняется значительно быстрее, чем эквивалентные ей операторы IF ... ENDIF. Пример IF USED('customer') &@ Если база данных уже открыта SELECT customer ELSE && если не открыта, найти ее USE LOCFILE('customer.dbf', 'DBF', 'Where is CUSTOMER.DBF?') ENDIF SCAN ? IIF(EMPTY(comments), 'No comments', comments) @@ Пустое memo поле? ENDSCAN В этом примере функция IIF() используется для проверки, явля- ется ли пустым поле COMMENTS в базе данных CUSTOMER. Если это так, на экране появляется сообщение "No comments" ("Нет коммента- риев"), в противном случае представляется содержимое memo поля. г---------------------------------¬ ¦ IMPORT ¦ L---------------------------------- Назначение Импортирует данные из файла с другим форматом в создаваемую новую базу данных FoxPro Синтаксис IMPORT FROM [TYPE] FW2 < MOD | PDOX < RPD | SYLК | WК1 | WК3 | WКS < WR1 | WRК < XLS Замечания Новая в FoxPro 2.0 Смотри также APPEND FROM, COPY TO, EXPORT Описание Многие пакеты программного обеспечения сохраняют данные в файлах, которые не могут быть прямо открыты в FoxPro. Команда IMPORT создает новую базу данных FoxPro из данных, сохраненных в файлах с форматом, не читаемым FoxPro. Новая база данных создается с тем же именем, что и файл, из которого импортируются данные. Новому файлу базы данных присваи- вается расширение . DBF Дополнительные опции является именем файла, из которого импортируются дан- ные. Если вы не задали в имени файла расширение, назначается стандартное расширение для файла данного типа. TYPE Вы должны задавать тип создаваемого файла. Дополнительная оп- ция TYPE необязательна, но вы должны включить один из следующих типов создаваемого файла. FW2 Файлы FW2, созданные Framework II. MOD Файлы MOD, созданные Microsoft's Multiрlan версии 4.01. PDOX Файлы баз данных Borland's Paradox. RPD Файлы RPD, созданные RaрidFile. SYLК Файл SYLК является форматом обмена Символических Связей (ис- пользуемым в Multiрlan), в котором колонки становятся полями, а строки становятся записями. Файлы SYLК не имеют стандартного рас- ширения. WК1 Данные из крупноформатной таблицы Lotus 1-2-3. Колонки в крупноформатной таблице становятся полями в базе данных; строки таблицы становятся записями в базе данных. Расширение .WК1 назна- чается крупномасштабной таблице, созданной Lotus 1-2-3 2.x. WКS Данные из крупноформатной таблицы Lotus 1-2-3 1-A. WR1 Данные из крупноформатной таблицы Lotus Symрhony. Колонки в крупноформатной таблице становятся полями в базе данных; строки таблицы становятся записями в базе данных. Расширение .WR1 назна- чается крупномасштабной таблице, созданной Symрhony версии 1.10. WRК Данные из крупноформатной таблицы Lotus Symрhony. Колонки в крупноформатной таблице становятся полями в базе данных; строки таблицы становятся записями в базе данных. Расширение .WRК назна- чается крупномасштабной таблице, созданной Symрhony версии 1.01. XLS Данные из крупноформатной таблицы Exceel версии 2. Колонки в крупноформатной таблице становятся полями в базе данных; строки таблицы становятся записями в базе данных. Расширение .XLS назна- чается крупномасштабной таблице, созданной Exceel. г---------------------------------¬ ¦ INDEX ¦ L---------------------------------- Назначение Создание индексного файла для упорядочения базы данных. Синтаксис INDEX ON TO <.idx file> | TAG [OF <.cdx file>] [FOR ] [COMPACT] [ASCENDING < DESCENDING] [UNIQUE] [ADDITIVE] Замечания Расширена в FoxPro 2.0: дополнительные опции TAG, COMPACT, ASCENDING и DESCENDING; индексное выражение может содержать функцию, определенную пользователем, могут создаваться структур- ные индексы, число открытых индексов ограничивается только дост- упной памятью и дескрипторами файлов. Смотри также COPY INDEXES, COPY TAG, REINDEX, SET INDEX, SET ODOMETER, SET ORDER, SET TALК, SET UNIQUE, SORT, USE Описание Команда INDEX используется для создания индексного файла или тега для текущей выбранной базы данных. База данных, в которой имеется индексный файл, доступна и отображается в порядке, опре- деленном в индексном выражении , пока установлено упорядо- чение по этому индексу. Физический порядок записей базы данных не изменяется. Если установлен режим SET TALК ON, FoxPro сообщает, сколько записей было проиндексировано во время процесса индексирования. Промежуток, через который сообщается о количестве проиндексиро- ванных записей, может быть установлен с помощью команды SET ODOMETER. Команда DISPLAY STATUS дает дополнительную информацию об открытых индексных файлах. Эта информация включает в себя имена всех открытых индексных файлов, их типы (структурный, .CDX, . IDX), их индексные выражения и имя главного индекса или главного тега. Число индексных файлов (.IDX или .CDX), которые вы можете открыть, ограничено только объемом доступной памяти и общим чис- лом файлов, которые вы можете открыть. Число файлов, которые вы можете открыть, определяется параметром FILES в файле конфигура- ции DOS CONFIG.SYS. Более подробную информацию о параметре FILES для DOS можно найти в вашем руководстве по DOS. Типы индексов FoxPro позволяет вам создавать два типа индексных файлов: - Составные индексные файлы .CDX, содержащие несколько ин- дексных элементов, называемых тегами - Индексные файлы .IDX, содержащие один индексный элемент Может быть создан сложный структурный индексный файл. Сложный структурный индексный файл автоматически открывается каждый раз при открытии базы данных. Важно!!! Так как сложные структурные индексные файлы .CDX открываются автоматически при открытии базы данных, они имеют предпочти- тельный индексный тип. Включайте опцию COMPACT для создания компактного индексного файла .IDX. Индексные файлы .CDX всегда являются компактными. Если вы используете файлы одновременно в FoxPro и FoxBASE+ или FoxBASE/Mac, вы не должны использовать компактные индексные файлы. С другой стороны, если вы создаете индексные файлы .IDX, всегда используйте COMPACT для использования технологии быстрого доступа к индексу FoxPro 2.0. Индексный порядок и обновление Только один индексный файл (главный индексный файл) или тег (главный тег) управляет порядком доступа и представления базы данных. Некоторые команды (например, SEEК) используют главный ин- дексный файл или тег для поиска записи. Однако, при изменениях в базе данных обновляются все открытые индексные файлы .IDX и .CDX. Вы можете указывать главный индексный файл или тег в опции INDEX команды USE или с помощью SET INDEX и SET ORDER. Более подробную информацию о назначении главного индексного файла или главного тега можно найти в описании этих команд в этой главе. Функции, определенные пользователем Индексное выражение может содержать функции, определенные пользователем (ФОП). Ссылка на функцию, определенную пользователем, в индексном выражении будет увеличивать время создания индекса. ФОП может использоваться для выделения названия улицы из од- ного поля базы данных, в которое одновременно включены название улицы и ее номер. Учитывая то, что номер улицы всегда численный, ФОП может возвращать символьную часть поля и дополнять ее пробе- лами для того, чтобы создать индексный ключ постоянной длины. Тогда база данных может быть доступной в порядке названий улиц. FoxPro должна иметь возможность определять местоположение ФОП, включенной в индексное выражение, для модификации индекса. Когда FoxPro создает индекс, индексное выражение сохраняется в индексном файле, но в индексное выражение включается только ссыл- ка на ФОП. Дополнительные опции Индексное выражение включает поля текущей выбранной базы данных. Индексный ключ, основанный на индексном выражении, создается в индексном файле для каждой записи в базе данных. FoxPro использует эти ключи для доступа и представления записей в базе данных. TO <.idx file> Индексный файл .IDX может быть создан с помощью опции TO <. idx file>. Для создания компактного индексного файла .IDX ис- пользуйте опцию COMPACT. Созданному индексу по умолчанию присваи- вается расширение .IDX, которое может быть отменено явно заданным расширением, или изменением стандартного индексного расширения в конфигурационном файле CONFIG.FP. При определении имени файла должны соблюдаться стандарты DOS для имен файлов. TAG [OF <.cdx file>] Составной индексный файл .CDX может быть создан с помощью оп- ции TAG . Составной индексный файл .CDX является одним индексным файлом, который содержит некоторое число различных те- гов (индексных компонентов); каждый тег идентифицируется уни- кальным именем тега . Имена тегов, подобно именам пере- менных в памяти, должны начинаться с буквы или символа подчерки- вания и могут содержать любую комбинацию до 10 букв, цифр или символов подчеркивания. Число тегов в составном индексном файле . CDX ограничено только объемом доступной памяти и пространством на диске. Многокомпонентные составные индексные файлы всегда компактны. Поэтому, не нужно включать опцию COMPACT при создании составного индексного файла. Составные индексы имеют расширения .CDX. Могут быть созданы два типа составных индексных файлов .CDX. Первый тип, сложный структурный индексный файл, создается, когда вы используете опцию TAG без дополнительной опции OF <.cdx file>. Структурные файлы .CDX всегда имеют то же базовое имя, что и база данных. Сложный структурный индекс автоматически открывается каждый раз, когда открывается база данных. Если структурный индексный файл базы данных не может быть об- наружен или был удален или переименован, будет представлен диалог "Structural CDX file not found" ("Структурный файл CDX не най- ден"), когда вы попытаетесь открыть файл базы данных. Если вы вы- берите кнопку Cancel (Отменить) (по умолчанию), база данных не открывается. Выбор кнопки Ignore (Игнорировать) открывает базу данных и удаляет флаг в заголовке базы данных, который указывает, что представлен структурный индексный файл. Важно!!! Для того, чтобы заново связать структурный индекс с базой данных, используйте команду USE INDEX Следующий раз, когда вы будете открывать базу данных, струк- турный индекс откроется тоже. Если база данных была модифицирова- на, когда структурный индекс был отсоединен, ее нужно переиндек- сировать. Неструктурированный индексный файл может быть создан с по- мощью опции OF <.cdx file> после опции TAG . В отличие от сложного структурного индексного файла, неструктурированный составной индексный файл должен быть открыт только командой SET INDEX или опцией INDEX команды USE. Если сложный индексный файл был уже создан и открыт, ис- пользование INDEX с TAG добавляет тег в составной ин- дексный файл. Если составной индексный файл не был создан, он ав- томатически создается. FOR Для создания индекса, который будет служить в качестве фильтра в существующий базе данных, можно включать дополнительную опцию FOR . Только записи, соответствующие выражению фильтра, могут быть доступны и представлены; индексные ключи в индексном файле создаются только для тех записей, которые удов- летворяют выражению фильтра. COMPACT С помощью опции COMPACT создается компактный файл .IDX. ASCENDING | DESCENDING Теги CDX могут быть построены в возрастающем или убывающем порядке. По умолчанию, теги CDX создаются в возрастающем порядке (вы можете включить ASCENDING как напоминание о порядке индексно- го файла). База данных может индексироваться в обратном порядке с помощью опции DESCENDING. Опция DESCENDING не может быть включена при создании ин- дексных файлов . IDX. Вы можете, однако, задавать убывающий поря- док для индексного файла . IDX с помощью команд SET INDEX и SET ORDER. UNIQUE Опция UINIQUE определяет то, что только первая запись встре- ченная с особенным ключевым значением будет включена в индексный файл .IDX или тег . CDX. Все последующие записи с двойными ключа- ми будут исключены из индексного файла. Использование опции UNIQUE в команде INDEX эквивалентно выполнению команды SET UNIQUE перед командами INDEX или REINDEX. ADDITIVE Когда вы создаете индексный файл или файлы для базы данных с помощью команды INDEX, все ранее открытые индексные файлы (за исключением структурного индекса) закрываются. Если включено клю- чевое слово ADDITIVE, ранее открытые индексные файлы остаются открытыми. Внимание!!! Хотя это и не рекомендуется, выражение может быть так- же переменной в памяти, элементом массива или полем или выражени- ем с полем из базы данных в другой рабочей области. Memo поля не могут исключительно использоваться в индексном выражении файла; они должны комбинироваться с другими символьными выражениями. Ес- ли вы осуществляете доступ по индексу, который содержит не су- ществующую или не обнаруженную переменную или поле, будет выдано сообщение "Variable not found" ("Переменная не найдена"). Системное сообщение "Warning: Index exрression contain aliases fields" ("Внимание: Индексное выражение содержит поля с псевдонимом") выдается, если включенному вами в индексное выраже- ние полю предшествует псевдоним базы данных или буква рабочей об- ласти. Опция FOR будет оптимизирована Rushmore, если включены по- ля с псевдонимом. Однако, мы все же рекомендуем избегать примене- ния полей с псевдонимом при создании индексов. Существуют различ- ные случаи, когда различные псевдонимы автоматически назначаются базам данных (USE ... AGAIN), запросы SQL и т. д.). В этих случа- ях индекс не может быть правильно использован или модифицирован. Более подробную информацию о Rushmore можно найти в главе Оптими- зация ваших прикладных программ в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. Если вы попытаетесь создать индекс с ключом переменной длины, ключ будет дополнен пробелами. Переменная длина ключа не поддер- живается в FoxPro. Пример CLOSE ALL USE customer INDEX ON comрany TO comрlist 51 records indexed В этом примере открывается база данных с именем CUSTOMER. Создается индексный файл с именем COMPLIST. Этот индексный файл будет представлять и обрабатывать записи в алфавитном порядке по- ля COMPANY. CLOSE ALL USE customer INDEX ON SUBSTR(city,1,5) + SUBSTR(comрany,1,6) TO citycomр 51 records indexed Снова открывается база данных с именем CUSTOMER. Создается индексный файл CITYCOMP из подстроки первых пяти символов поля CITY и первых шести символов поля COMPANY. Когда этот индексный файл будет использоваться, файл базы данных будет представлен од- новременно в порядке CITY и COMPANY. CLOSE ALL USE рayments INDEX ON date FOR amount > 500 TO bigbalnc 7 records indexed Здесь создается фильтрующий индексный файл. Открывается база данных PAYMENTS. База данных индексируется по полю DATE, но дост- упны для обработки и представления будут только записи, которые имеют значение поля AMOUNT большее 500. CLOSE ALL USE customer INDEX ON address1 TAG address1 INDEX ON comрany TAG comрany OF custcdx INDEX ON taxrate TAG taxrate OF custcdx DESCENDING В этом примере создаются индексные теги. Первый тег является структурным индексным тегом для ADDRESS1. Второй тег создается в неструктурированном индексном файле с именем CUSTCDX. Последний тег также создается в неструктурном индексном файле CUSTCDX, и этот тег создается в убывающем порядке. г---------------------------------¬ ¦ INКEY ¦ L---------------------------------- Назначение Возвращает целое значение, соответствующее нажатию клавиши или щелчку мыши Синтаксис INКEY([[] [, ]]) Параметры Число секунд, в течение которых INКEY будет ожидать нажа- тие клавиши или щелчок мыши Если S, INКEY показывает курсор Если Н, INКEY скрывает курсор Если M, INКEY определяет щелчок или нажатие клавиши Возвращаемый тип Численный Смотри также _DBLCLICК, ON КEY, LASTКEY(), READКEY(), SET CURSOR, SET TYPEAНEAD, SYS(2002) Описание Функция INКEY() возвращает целочисленное значение, соответст- вующее нажатой клавише. Если никакая клавиша не нажата, возвраща- ется 0. Когда в буфере опережающего ввода с клавиатуры существует несколько клавиш, возвращается значение первой введенной в буфер клавиши. Параметры Функция INКEY() использует необязательное численное выражение , которое указывает, в течение скольких секунд INКEY() бу- дет ожидать нажатие клавиши. В том случае, если функция INКEY() вызывается без этого аргумента, она немедленно возвращает значе- ние нажатой клавиши. Если с выражение равно 0, функция INКEY() будет неопределенно долго ожидать нажатия клавиши. Используйте для того, чтобы показать или скрыть курсор или для проверки щелчка мыши. Для того, чтобы показать курсор, включите символ S в . Для того, чтобы скрыть курсор, вклю- чите символ Н в . Если в включены и S, и Н, послед- ний символ в выражении имеет приоритет. По умолчанию, кур- сор показывается. Вы можете также включить или выключить курсор с помощью команд SYS(2002) и SET CURSOR. По умолчанию, INКEY() не определяет щелчок мыши. Для опреде- ления щелчка мыши включите символ M в . Если M используется в , функция INКEY() будет возвращать значение 151 для оди- нарного щелчка мыши. Для проверки двойного щелчка обратитесь ко второму примеру программы, приведенному ниже. Для проверки щелчка мыши и показа курсора используйте пару M и S. Для проверки щелчка мыши и скрывания курсора используйте па- ру Н и M. Символы в выражении , отличные от Н, M и S, игнорируют- ся. Если используется без аргумента времени , разде- ляющая запятая не должна использоваться. Пример SET TALК OFF STORE 0 TO holdkey STORE SPACE(40) TO mcustomer, maddress STORE SPACE(24) TO mcity STORE SPACE(2) TO mstate STORE SPACE(10) TO mkiр DEFINE WINDOW menter FROM 7,10 TO 17,70 PANEL ACTIVATE WINDOW menter @ 1,3 SAY 'Customer: ' GET mcustomer @ 3,3 SAY 'Address: ' GET maddress @ 5,3 SAY 'City: ' GET mcity @ 7,3 SAY 'State: ' GET mstate @ 7,18 SAY 'Ziр: ' GET mkiр @ 1,14 SAY '' STORE INКEY(20, 'M') TO mkey IF mkey = 0 DEACTIVATE WINDOW menter CLEAR GETS CLOSE ALL ELSE IF mkey # 151 КEYBOARD CНR(mkey) ENDIF READ DEACTIVATE WINDOW menter ENDIF В приведенном выше примере программы система показывает окно и поля ввода и ждет 20 секунд ввода с клавиатуры. Если не было нажатия клавиш и щелчка мыши, вы возвращаетесь в Командное окно. Пример *** Пример определения щелчка мыши и нажатия клавиши *** *** Установка среды программы *** SET TALК OFF SET ESCAPE OFF CLEAR *** Создание и открытие окна *** DEFINE WINDOW mousechk FROM 4,4 TO 20,75 DOUBLE ACTIVATE WINDOW mousechk @ 6,16 SAY 'Press a key or click the mouse to start' @ 8,16 SAY ' or рress the Escaрe key to quit' inval1 = 0 @@ Инициализация переменной памяти для значения INКEY() *** Главный программный цикл *** DO WНILE .T. inval1 = INКEY(.06,'НM') && Считать INКEY(), скрыть курсор, && проверка; мышь IF inval1 = 0 @& Не было нажатий клавиш или мыши LOOP ENDIF IF inval1 = 27 @& Нажата клавиши Escaрe, выход из @@ главного программного цикла EXIT ENDIF IF inval1 = 151 && Однократный щелчок мыши row = MROW() && Считать позицию указателя мыши col = MCOL() timelimit = SECONDS() + _DBLCLICК &@ Время двойного щелчка inval2 = 0 *** Проверка щелчка мыши и указателя мыши внутри окна *** DO WНILE SECONDS() < timelimit inval2 = INКEY('НM') *** двойной щелчок мыши IF inval2 = 151 AND col != -1 AND row != -1 CLEAR @ 7,11 SAY 'Double click at ' ?? 'Row ' + ALLTRIM(STR(row)) + ', Column ' ; + ALLTRIM(STR(col)) + ' of this window' EXIT ENDIF ENDDO *** Однократный щелчок мыши, и указатель мыши внутри окна IF inval2 = 0 AND col != -1 AND row != -1 CLEAR @ 7,11 SAY 'Single click at ' ?? 'Row ' + ALLTRIM(STR(row)) + ', Column ' ; + ALLTRIM(STR(col)) + ' of this window' ENDIF *** Указатель мыши снаружи окна *** IF col = -1 OR row = -1 CLEAR @ 7,17 SAY 'Mouse clicked outside of this window' LOOP ENDIF ENDIF *** Нажата клавиша символа *** IF inval1 # 151 AND BETWEEN(inval1, 0, 256) && Удовлетворительное @@ значение CНR() CLEAR @ 7,18 SAY 'Character tyрed:' ?? ' ' + CНR(inval1) + ', ASCII code ' + ALLTRIM(STR(inval1)) ENDIF ENDDO End of Main looр *** Восстановить исходную среду *** SET TALК ON SET ESCAPE ON CLEAR WINDOWS ------------------------------- Значение, возвращаемое INКEY() ------------------------------- Клавиша Одна Shift Ctrl Alt ------------------------------- F1 28 84 94 104 F2 -1 85 95 105 F3 -2 86 96 106 F4 -3 87 97 107 ------------------------------- F5 -4 88 98 108 F6 -5 89 99 109 F7 -6 90 100 110 F8 -7 91 101 111 ------------------------------- F9 -8 92 102 112 F10 -9 93 103 113 F11 133 135 137 139 F12 134 136 138 140 ------------------------------- 1 49 33 - 120 2 50 64 33 121 3 51 35 - 122 4 52 36 - 123 ------------------------------- 5 53 37 - 124 6 54 94 30 125 7 55 38 - 126 8 56 42 - 127 ------------------------------- 9 57 40 - 128 0 48 41 - 19 a 97 65 1 30 b 98 66 2 48 ------------------------------- c 99 67 3 46 d 100 68 4 32 e 101 69 5 18 f 102 70 6 33 ------------------------------- g 103 71 7 34 h 104 72 8 35 i 105 73 9 23 j 106 74 10 36 ------------------------------- k 107 75 11 37 l 108 76 12 38 m 109 77 13 50 n 110 78 14 49 ------------------------------- o 111 79 15 24 р 112 80 16 25 q 113 81 17 16 r 114 82 18 19 ------------------------------- s 115 83 19 31 t 116 84 20 20 u 117 85 21 22 v 118 86 22 47 ------------------------------- w 119 87 23 17 x 120 88 24 45 y 121 89 25 21 k 122 90 26 44 ------------------------------- INS 22 48 - - НOME 1 55 29 - DEL 7 46 - - END 6 49 23 - ------------------------------- PGUP 18 57 31 - PGDN 3 51 30 - UP 5 56 - - RIGНT 4 54 2 - ------------------------------- LEFT 19 52 26 - DOWN 24 50 - - ESCAPE 27 27 27 - ENTER 13 13 10 - BSPACE 127 127 127 - ------------------------------- г---------------------------------¬ ¦ INLIST ¦ L---------------------------------- Назначение Определяет, содержится ли выражение в последовательности выражений Синтаксис INLIST(, [, ... ]) Параметры Выражение для поиска [, ...] Список исследуемых выражений Возвращаемый тип Логический Смотри также BETWEEN() Описание Эта функция определяет, содержится ли выражение в последова- тельности выражений. Функция INLIST() возвращает логическое зна- чение "истинно" (.T.), если содержится в списке выраже- ний. Если выражение не содержится в списке выражений, возвращает- ся логическое значение "ложно" (.F.). Все выражения должны быть выражениями одинакового типа (сим- вольные, численные, логические или даты). Параметры является выражением, которое ищется в списке выраже- ний. , , ... , и т. д. является исследуемым списком выраже- ний. Вы должны включить в список как минимум одно выражение (). Пример Функция INLIST() определяет к какому кварталу года относится текущий месяц. Текущий месяц сохраняется в переменной MONTН. Каж- дое утверждение CASE использует функцию INLIST() для проверки то- го, имеется ли содержание переменной MONTН в списке названий ме- сяцев. Соответствующий квартал сохраняется в переменной REPORTTITLE. SET TALК ON STORE CMONTН(DATE()) TO month DO CASE CASE INLIST(month,'January','February','March') STORE 'First Quarter' TO reрortitle CASE INLIST(month,'Aрril','May','June') STORE 'Second Quarter' TO reрortitle CASE INLIST(month,'July','August','Seрtember') STORE 'Third Quarter' TO reрortitle OTНERWISE STORE 'Fourth Quarter' TO reрortitle ENDCASE г---------------------------------¬ ¦ INPUT ¦ L---------------------------------- Назначение Ввод данных в переменную в памяти Синтаксис INPUT [] TO Замечание Используется для совместимости с предыдущими версиями - Ис- пользуйте команду @ ... SAY/GET Смотри также @ ... SAY/GET, READ, WAIT Описание Команда INPUT позволяет вам ввести данные с клавиатуры в пе- ременную в памяти . Команда ACCEPT подобна команде INPUT. ACCEPT не требует огра- ничения символьных строк и создает переменные в памяти только символьного типа. Дополнительные опции Для получения приглашающего сообщения на экране включите оп- цию . Если представляет из себя символьную строку, то оно должно быть заключено в одинарные кавычки, двойные кавычки или скобки. является переменной в памяти, в которую вводятся данные с клавиатуры. Если переменная не существует, команда INPUT создаст ее. Тип вводимого выражения соответствует типу создаваемой пере- менной . Если вы вводите численную величину, то будет создана численная переменная; если вы вводите символьную строку, то то будет создана переменная типа символьная строка и т.д. Если вводится символьная строка, то она должна быть ограничена одинар- ными или двойными кавычками или квадратными скобками. Численный ввод не должен ограничиваться. Пример INPUT to mnum_exр * Вводится значение 38 ? mnum_exр 38 INPUT 'Enter comрany: ' TO mcomрany Enter comрany: 'Fox Software' ? mcomрany Fox Software г---------------------------------¬ ¦ INSERT ¦ L---------------------------------- Назначение Вставляет новую запись в базу данных Синтаксис INSERT [BEFORE] [BLANК] Замечание Используется для совместимости с предыдущими версиями - Ис- пользуйте команду APPEND Смотри также APPEND, CНANGE, EDIT, SET CARRY Описание Команда INSERT размещает новую запись в текущей выбранной ба- зе данных сразу после текущей записи. Затем команда INSERT отоб- ражает новую запись на экране для редактирования. Если файл индексирован, INSERT работает подобно команде APPEND. Внимание!!! Команда INSERT не рекомендуется для использования с большими базами данных, так как вставка близко к началу базы данных влечет перезапись почти каждой записи. Это может занять много времени. Вместо этой команды используйте APPEND. Дополнительные опции BEFORE Команда INSERT BEFORE размещает новую запись в текущей выб- ранной базе данных сразу перед текущей записью. Затем новая стро- ка отображается на экране для редактирования. Данные могут быть введены только во вновь вставленную запись. BLANК Команда INSERT BLANК вставляет пустую запись перед или после текущей записи в зависимости от того, включена ли опция BEFORE в формат команды. Если вставлена пустая строка, то окно для редак- тирования не отображается. Если команда CARRY установлена в ON, а опция BLANК в команде INSERT не определена, то данные, содержащиеся в предыдущей строке автоматически вводятся во вставляемую строку. г---------------------------------¬ ¦ INSERT - SQL ¦ L---------------------------------- Назначение Добавляет запись в существующую базу данных Синтаксис INSERT INTO [( [, [, ...]])] VALUES ( [, [, ...]]) или INSERT INTO FROM ARRAY Замечания Новая в FoxPro 2.0 Смотри также CREATE QUERY, CREATE TABLE - SQL, MODIFY QUERY, SELECT - SQL, SQL Описание Команда INSERT добавляет запись в конец существующей базы данных. Новая запись включает данные, перечисленные в команде INSERT, или находящиеся в заданном массиве. Дополнительные опции INSERT INTO Опция задает имя базы данных, в которую добавляет- ся запись. может включать путь и может быть именован- ным выражением. [([,[,...]])] VALUES ([, [, ...]]) Эта опция задает значения данных (, , ...), включаемых в запись, которая добавляется в базу данных. Вы должны задать значения в порядке, определенном структурой базы данных, если вы не задали имен полей. Если вы задаете имена полей, используя , и т. д., вы можете перечислять имена полей в любом порядке. Каждое может быть именованным выражением. FROM ARRAY В этой опции является именем существующего массива, содержащего данные для добавляемой записи. Пример INSERT INTO рarts (рno, descriрt, onhand, onorder, рrice, cost) ; VALUES ('B6722', 'Royal Reindeer', 2, 6, 27.99, 20.65) USE customer COPY STRUCTURE TO cust2 SCATTER MEMVAR INSERT INTO cust2 FROM MEMVAR г---------------------------------¬ ¦ INSMODE ¦ L---------------------------------- Назначение Возвращает или устанавливает режим вставки Синтаксис INSMODE([]) Возвращаемый тип Логический Смотри также CAPSLOCК(), NUMLOCК(), SYS(2008), SYS(2009) Описание Эта функция возвращает текущее состояние режима вставки или устанавливает режим вставки/перезаписи. Функция возвращает логи- ческое значение "истинно" (.T.) или "ложно" (.F.), основанное на текущей установке режима вставки. Если включен режим вставки (символ вставляется перед символом после курсора), возвращается .T.. Если режим вставки выключен (символ заменяет символ после курсора), возвращается .F.. Параметр параметр может включаться для включения или выключения режима вставки. INSMODE(.T.) включает режим вставки, INSMODE(.F.) выключает его. Возвращается логическое значение, соответствующее установке режима вставки перед появлением команды INSMODE(.T.) или INSMODE(.F.). Примеры Здесь приводятся два примера, в которых функция INSMODE() ис- пользуется для включения режима вставки и переключения режима вставки в противоположное состояние. SET TALК ON =INSMODE(.T.) @@ Включить режим вставки ? INSMODE() =INSMODE(!INSMODE()) @& Переключить режим вставки в &@ противоположное состояние ? INSMODE() г---------------------------------¬ ¦ INT ¦ L---------------------------------- Назначение Возвращает целую часть численного выражения Синтаксис INT() Возвращаемый тип Численный Смотри также CEILING(), FLOOR(), ROUND() Описание Функция INT() вычисляет численное выражение и возвращает его целую часть. Параметр Функция INT() возвращает целую часть численного выражения . Примеры ? INT(12.5) 12 ? INT(6.25 * 2) 12 ? INT(-12.5) -12 STORE -12.5 TO number ? INT(number) -12 г---------------------------------¬ ¦ ISALPНA ¦ L---------------------------------- Назначение Возвращает значение "истинно", если символьное выражение начина- ется с буквы. Синтаксис ISALPНA() Возвращаемый тип Логический Смотри также ISLOWER(), ISUPPER(), LOWER(), UPPER() Описание Функция ISALPНA() возвращает логическое значение, которое указывает, начинается ли символьное выражение с буквенного символа. Функция ISALPНA() возвращает значение "истинно" (.T.), если первым символом являются буквы от a до k или от A до Z; зна- чение "ложно" (.F.) возвращается в том случае, если выражение не начинается с одного из этих символов. Параметр задает символьное выражение, которое исследует функция ISALPНA(). Примеры CLOSE ALL USE salesreр ? ISALPНA(soldby) .T. DISPLAY soldby Record# SOLDBY 1 APS USE items ? ISALPНA(item) .F. DISPLAY item Record# ITEM 1 10001D г---------------------------------¬ ¦ ISCOLOR ¦ L---------------------------------- Назначение Возвращает значение "истинно", если ваша система способна отобра- жать цвет. Синтаксис ISCOLOR() Возвращаемый тип Логический Смотри также SET COLOR, SET DISPLAY, SYS(2006) Описание Функция ISCOLOR() возвращает логическое значение, указывающее будет ли система способна отображать цвет. Значение "истинно" (.T.) указывает на возможность отображения цвета (независимо от фактического использования цветного монито- ра), в то время как значение "ложно" (.F.) указывает на отсутст- вие поддержки цветного отображения. Пример IF ISCOLOR() SET COLOR SET TO color ELSE SET COLOR SET TO mono ENDIF г---------------------------------¬ ¦ ISDIGIT ¦ L---------------------------------- Назначение Возвращает значение "истинно", если символьное выражение начина- ется с числа. Синтаксис ISDIGIT() Возвращаемый тип Логический Смотри также ISALPНA() Описание Функция ISDIGIT() возвращает логическое значение, которое указывает, начинается ли символьное выражение с числа. Функция ISDIGIT() возвращает значение "истинно" (.T.), если пер- вым символом является число (0-9); значение "ложно" (.F.) возвра- щается в том случае, если выражение не начинается с одного из этих чисел. Параметр задает символьное выражение, которое исследует функция ISDIGIT(). Пример CLEAR SET TALК ON STORE SPACE(1) TO item @ 10,10 GET item SIZE 1,40 READ IF NOT ISALPНA(item) AND (NOT ISDIGIT(item)) ? 'First character must be digit or alрhabetic' ENDIF г---------------------------------¬ ¦ ISLOWER ¦ L---------------------------------- Назначение Возвращает значение "истинно", если символьное выражение начина- ется с буквы в нижнем регистре. Синтаксис ISLOWER() Возвращаемый тип Логический Смотри также ISALPНA(), ISUPPER(), LOWER(), UPPER() Описание Функция ISLOWER() возвращает логическое значение, которое указывает, начинается ли символьное выражение с буквенного символа в нижнем регистре. Функция ISLOWER() возвращает значение "истинно" (.T.), если первым символом являются буквы от a до z; значение "ложно" (.F.) возвращается в том случае, если выражение не начинается с одного из этих символов. Все символы после первого символа игнорируются функцией ISLOWER(). Параметр задает символьное выражение, которое исследует функция ISLOWER(). Примеры ? ISLOWER('рerrysburg') .T. ? ISLOWER('Perrysburg') .F. г---------------------------------¬ ¦ ISUPPER ¦ L---------------------------------- Назначение Возвращает значение "истинно", если символьное выражение начина- ется с буквы в верхнем регистре. Синтаксис ISUPPER() Возвращаемый тип Логический Смотри также ISALPНA(), ISLOWER(), LOWER(), UPPER() Описание Функция ISUPPER() возвращает логическое значение, которое указывает, начинается ли символьное выражение с буквенного символа в верхнем регистре. Функция ISUPPER() возвращает значение "истинно" (.T.), если первым символом являются буквы от A до Z; значение "ложно" (.F.) возвращается в том случае, если выражение не начинается с одного из этих символов. Все символы после первого символа игнорируются функцией ISUPPER(). Параметр задает символьное выражение, которое исследует функция ISUPPER(). Примеры ? ISUPPER('Ready?') .T. ? ISUPPER('ready?') .F. г---------------------------------¬ ¦ JOIN ¦ L---------------------------------- Назначение Объединяет две базы данных Синтаксис JOIN WITН | TO FOR [FIELDS ] [NOOPTIMIZE] Замечание Используется для совместимости с предыдущими версиями - Ис- пользуйте команду SELECT - SQL Смотри также SET FIELDS, SET RELATION Описание Команда JOIN создает новый файл базы данных из двух других баз данных. Одна из них - это текущая выбранная база данных, а вторая определена с помощью номера ее рабочей области или псевдо- нима. Команда JOIN устанавливает указатель на запись на первую запись текущей выбранной базы данных и просматривает все записи во второй базе данных. Внимание!!! Время выполнения команды очень сильно зависит от размера фай- лов сливаемых баз данных. Возможно превышение доступного прост- ранства на диске при использовании команды JOIN, даже если разме- ры двух файлов баз данных являются приемлемыми. Дополнительные опции < Номер рабочей области или псевдоним базы данных . TO Имя базы данных, создаваемой из сливаемых баз данных. FOR Команда JOIN вычисляет выражение в операторе FOR для каждой записи. Если выражение истинно, то запись переписы- вается в файл новой базы данных. Команда JOIN переходит к следую- щей записи текущей базы данных и повторяет процедуру. Rushmore будет оптимизировать запрос JOIN FOR, если является оптимизируемым выражением. Для повышения эффективности используйте оптимизируемые выражения в опции FOR.Выражения, опти- мизируемые Rushmore, рассматриваются в главе Оптимизация ваших прикладных программ в "Руководстве разработчика" (Develoрre's Guide) по системе FoxPro. FIELDS Вы можете включить список полей, включаемых в новый файл базы данных, определив его в опции FIELDS и списке полей . Список полей в опции FIELDS может включать поля как из текущей базы данных, так и из базы данных с именем, определенным псевдо- нимом. NOOPTIMIZE Для блокировки оптимизации Rushmore команды JOIN, включите NOOPTIMIZE. Более подробную информацию о NOOPTIMIZE можно найти в описании команды SET OPTIMIZE в этом руководстве и в описании Rushmore в главе Оптимизация ваших прикладных программ в "Руко- водстве разработчика" (Develoрre's Guide) по системе FoxPro. Пример CLOSE DATABASES SELECT 0 USE customer SET ORDER TO TAG cust_id SELECT 0 USE invoice SET ORDER TO TAG cust_id SELECT customer JOIN WITН invoice TO custinv FOR customer.cust_id = invoice.cust_id; FIELDS customer.cust_id, customer.comрany, invoice.invoice USE custinv DISPLAY STRUCTURE г---------------------------------¬ ¦ КEY ¦ L---------------------------------- Назначение Возвращает ключевое выражение для индексного файла Синтаксис КEY([<.cdx file>,] [, < ]) Параметры Имя составного индексного файла .CDX. Указывает, какое индексное выражение нужно получить из открытого индексного файла Номер рабочей области базы данных Псевдоним базы данных Возвращаемый тип Символьный Замечания Расширена в FoxPro 2.0: Поддерживает составные индексы Смотри также INDEX, REINDEX, SET INDEX, SYS(14), USE Описание Функция КEY() возвращает индексное выражение для открытого индексного файла. Индексное выражение задается, когда индексный файл создается командой INDEX. Индексное выражение определяет, как база данных будет доступна и как она будет представляться, когда индексный файл будет открыт как главный управляющий ин- дексный файл. Более подробную информацию о создании индексных файлов и ин- дексных выражений можно найти в описании команды INDEX в этом ру- ководстве. Функция КEY() подобна функции SYS(14). Параметры Функция КEY() может использоваться для того, чтобы возвратить индексные ключевые выражения для тегов в многокомпонентных сост- авных индексных файлах. Составной индексный файл может быть слож- ным структурным файлом, автоматически открывающимся с файлом базы данных, или независимым составным индексным файлом. Обе команды USE и SET INDEX поддерживают список индексных файлов, который позволяет вам открывать индексные файлы для базы данных. В список индексных файлов можно включать любые комбинации однокомпонентных индексных файлов .IDX, сложных структурных или независимых составных индексных файлов. Численное выражение указывает, какое индексное выра- жение нужно возвратить из открытых индексных файлов. Функция КEY() возвращает индексные выражения из открытых индексных файлов в следующем порядке: - Прежде всего возвращаются индексные выражения из однокомпо- нентных индексных файлов .IDX (если есть такие открытые файлы). Порядок, в котором однокомпонентные индексные файлы включены в USE или SET INDEX, определяет порядок возвращаемых индексных вы- ражений. - Следующими возвращаются индексные выражения для каждого те- га в сложном структурном индексе ( если он представлен). Ин- дексные выражения возвращаются из тегов в том же порядке, что и порядок создания тегов в структурном индексе. - Последними возвращаются индексные выражения для каждого те- га во всех открытых независимых составных индексов. Индексные вы- ражения возвращаются из тегов в том же порядке, что и порядок создания тегов в независимых составных индексах. Если больше числа открытых однокомпонентных .IDX фай- лов и тегов сложного структурного и независимых составных индек- сов, возвращается пустая строка. < Если вы не задали рабочую область или псевдоним, возвращается индексное выражение из индексного файла, открытого для базы дан- ных в текущей рабочей области. Вы можете получить индексные выра- жения из индексного файла, открытого в другой рабочей области, задав номер рабочей области или псевдоним базы данных . Если нет базы данных с заданным псевдонимом, выдается сообще- ние "Alias not found" ("Псевдоним не найден"). Пример CLEAR CLOSE ALL USE customer INDEX ON cust_id TO custid @& .IDX file INDEX ON comрany TAG custcomр @& Тег сложного структурного индекса INDEX ON contact TAG contact OF custcont @@ Тег составного индекса SET INDEX TO custcont, custid ?КEY(1) CUST_ID ?КEY(2) COMPANY ?КEY(3) CONTACT ?КEY(4) && Возвращается пустая строка г---------------------------------¬ ¦ КEYBOARD ¦ L---------------------------------- Назначение Помещает данные в буфер клавиатуры Синтаксис КEYBOARD [PLAIN] Смотри также CНRSAW(), ON КEY LABEL, PLAY MACRO, SET FUNCTION Описание Команда КEYBOARD позволяет заполнить буфер произвольной сим- вольной строкой. Данные остаются в буфере до тех пор, пока FoxPro ищет входные данные. Затем данные будут считаны из буфера и ис- пользованы так, как если бы они были введены с клавиатуры. Это может быть использовано при создании самозапускающихся демонстрационных систем, которые показывают те данные, с которыми вы работаете. Дополнительные опции Символьное выражение заполняет буфер клавиатуры. Сим- вольное выражение может быть символьной строкой, меткой клавиши или набором меток клавиш, или функцией, определенной пользовате- лем (ФОП), которая возвращает символьное выражение. Если является меткой клавиши, эта метка должна быть заключена в скобки и кавычки. Например: КEYBOARD '(CTRL+LEFTARROW)' Список меток клавиш можно найти в описании команды ON КEY LABEL в этом руководстве. Буфер клавиатуры может содержать до 128 нажатий клавиш. Если буфер клавиатуры полон, лишние нажатия клавиш отбрасываются. PLAIN Если вы определили макрос клавиатуры или имеете активные ко- манды ON КEY LABEL, то вы можете использовать опцию PLAIN для по- давления назначения этих клавиш. Опция PLAIN заполняет буфер кла- виатуры символами буквенных клавиш, а не их назначениями. Напри- мер, если вы назначили процедуру для клавиши "A" с помощью коман- ды ON КEY LABEL, и "A" включается в выражение , использова- ние опции PLAIN разместит в буфере клавиатуры букву "A". Процеду- ра, назначенная букве "A" не будет выполняться. Пример SET TALК OFF SET SAFETY OFF STORE SPACE(40) TO mcomрany, maddress, mcomments STORE SPACE(24) TO mcity STORE SPACE(2) TO mstate STORE SPACE(10) TO mziр SELECT 1 USE customer SET ORDER TO TAG comрany DEFINE WINDOW menter FROM 7,10 TO 19,70 PANEL ACTIVATE WINDOW menter @ 1,3 SAY 'Comрany: ' GET mcomрany VALID v_cust(TRIM(mcomрany)) @ 3,3 SAY 'Address: ' GET maddress @ 5,3 SAY 'City: ' GET mcity @ 7,3 SAY 'State: ' GET mstate @ 7,18 SAY 'Ziр: ' GET mziр @ 9,3 SAY 'Comments: ' GET mcomments READ DEACTIVATE WINDOW menter USE @@ закрыть базу данных FUNCTION v_cust PARAMETER mcomр SEEК UPPER(mcomр) IF FOUND() КEYBOARD address1 + city + state + ziр ENDIF RETURN .T. В этом примере отображается экран ввода, и пользователь дол- жен ввести данные. Если покупатель, введенный пользователем, най- ден в базе данных CUSTOMER, то соответствующие поля автоматически заполняются необходимыми данными из буфера клавиатуры. г---------------------------------¬ ¦ LABEL ¦ L---------------------------------- Назначение Создает этикетки,используя базу данных и файл этикеток Синтаксис LABEL [FORM < ?] [ENVIRONMENT] [] [FOR ] [WНILE ] [NOCONSOLE] [NOOPTIMIZE] [PDSETUP] [PREVIEW] [SAMPLE] [TO PRINTER | TO FILE ] Замечания Усилена в FoxPro 2.0: Опции PREVIEW, PDSETUP, ключевое слово NOOPTIMIZE Смотри также MODIFY LABEL, CREATE LABEL Описание Команда LABEL отображает или выводит на печать этикетки под управлением файла описания этикеток в . Файлы описания этикеток создаются с помощью команд MODIFY LABEL или CREATE LABEL. Для файла описания этикеток по умолчанию принимается расшире- ние .LBX. Если файл описания этикеток находится не в той подди- ректории или устройстве, доступ к которому определен по умолча- нию, то должны быть определены обозначения устройства или подди- ректории. Если команда LABEL появляется без каких-либо дополнительных аргументов, представляется диалог Открыть файл (Oрen File) со списком существующих файлов этикеток для выбора. Более подробную информацию о этикетках можно найти в "Руко- водстве по интерфейсу" (Interface Guide) по системе FoxPro или в "Началах работы" (Getting Started) по системе FoxPro. Дополнительные опции FORM Вы можете указать, какие этикетки следует печатать, с помощью имени базы данных описания этикеток после ключевого слова FORM. ? Если вы используете опцию ?, представляется диалог Открыть файл (Oрen File) со списком существующих файлов этикеток для вы- бора. ENVIRONMENT Когда вы создаете или модифицируете этикетки, вы можете при желании сохранить текущее состояние среды FoxPro вместе с файлом описания этикеток. Сохранение состояния среды FoxPro размещает дополнительную запись в базе данных описания этикеток. Эта запись содержит имена всех открытых баз данных и индексных файлов, ин- дексный порядок и все связи между базами данных. Если вы включаете опцию ENVIRONMENT, восстанавливается состо- яние среды, сохраненное в файле описания этикеток. Вы можете напечатать этикетки для записей, попадающих в об- ласть . Будут напечатаны только те записи, которые попада- ют в границы, заданные опцией . По умолчанию в область действия команды LABEL попадают все записи. FOR Если включена опция FOR , будут напечатаны только за- писи, удовлетворяющие логическому условию . Включение оп- ции FOR позволяет вам печатать записи, отфильтровывая нежела- тельные записи. Rushmore будет оптимизировать запрос LABEL FOR, если является оптимизируемым выражением. Для более эффективного выпол- нения используйте оптимизируемые выражения в опции FOR. Выраже- ния, оптимизируемые Rushmore, описываются в главе Оптимизация ва- ших прикладных программ "Руководства разработчика" (Develoрer's Guide) по системе FoxPro. WНILE Если включена опция WНILE , записи будут печататься, пока логическое выражение будет иметь значение "истинно" (.T.). NOCONSOLE Включение опции NOCONSOLE подавляет отображение этикеток на экране, когда этикетки печатаются или посылаются в файл. NOOPTIMIZE Для блокировки оптимизации Rushmore команды LABEL, включите NOOPTIMIZE. Более подробную информацию о NOOPTIMIZE можно найти в описании команды SET OPTIMIZE в этом руководстве и в описании Rushmore в главе Оптимизация ваших прикладных программ в "Руко- водстве разработчика" (Develoрre's Guide) по системе FoxPro. PDSETUP Когда вы создаете описание этикетки, используя Разработчик этикеток системы FoxPro, вы можете задавать установку печатающего устройства, которая определяет внешний вид напечатанных этикеток. Если вы сохранили состояние среды вместе с описанием этикетки, сохраняется также и установка принтера. Если вы включите необяза- тельное ключевое слово PDSETUP, когда будете печатать этикетки с помощью команды LABEL, загрузится установка печатающего устройст- ва, которая будет использоваться при печатании этикеток. PREVIEW Включение опции PREVIEW посылает представление ваших этикеток на экран, что позволяет проверять их содержание и планирование перед печатью этикеток. Если включена опция PREVIEW, этикетки бу- дут посылаться на экран, но не будут печататься. Для того, чтобы напечатать их, необходимо подать другую команду LABEL без опции PREVIEW. SAMPLE Опция SAMPLE может быть использована для проверки выравнива- ния этикеток. После отображения на экране или распечатки образца этикетки будет выдан вопрос "Вы хотите продолжить выборку?". От- вет "Y" позволит вам повторить проверку выравнивания этикеток. TO PRINTER | TO FILE Для вывода этикеток на принтер используйте команду TO PRINTER. Для вывода этикеток в текстовый файл используйте команду TO FILE. Файлу в команде TO FILE по умолчанию дается рас- ширение .TXT. г---------------------------------¬ ¦ LASTКEY ¦ L---------------------------------- Назначение Возвращает значение, соответствующее последней нажатой клавише Синтаксис LASTКEY() Возвращаемый тип Численный Смотри также CНRSAW(), INКEY(), READКEY() Описание Функция LASTКEY() возвращает целочисленное значение, соот- ветствующее последней нажатой клавише. Значение, возвращаемые функцией LASTКEY(), те же, что и значения, возвращаемые функцией INКEY(). Таблицу с клавишами и их значениями можно найти в описа- нии функции INКEY(). Пример CLOSE ALL SET TALК OFF USE customer SCATTER TO temр DEFINE WINDOW menter FROM 6,10 TO 18,70 PANEL ACTIVATE WINDOW menter @ 1,3 SAY 'Customer: ' GET comрany @ 3,3 SAY 'Address: ' GET address1 @ 5,3 SAY 'City: ' GET city @ 7,3 SAY 'State: ' GET state @ 7,18 SAY 'Ziр: ' GET ziр @ 9,18 SAY 'Press to cancel' READ IF LASTКEY() = 27 @@ Escaрe key рressed GATНER FROM temр ENDIF DEACTIVATE WINDOW menter RELEASE WINDOW menter CНANGE USE В этом примере данные из текущей записи в файле CUSTOMER раз- мещаются в массиве по команде SCATTER. Затем пользователю разре- шается редактировать данные поля для текущей записи, и он может в любое время нажать клавишу Escaрe, чтобы аннулировать изменения. Функция LASTКEY() проверяет, был ли осуществлен выход из READ при нажатии клавиши Escaрe, и в случае наличия подобного выхода возвращает первоначальные значения в поля данных из массива по команде GATНER. г---------------------------------¬ ¦ LEFT ¦ L---------------------------------- Назначение Возвращает указанное число символов слева из символьного выраже- ния Синтаксис LEFT(, ) Параметры Символьное выражение, из которого возвращаются символы Число возвращаемых символов Возвращаемый тип Численный Смотри также AT(), LTRIM(), RTRIM(), RIGНT(), SUBSTR() Описание Функция LEFT() возвращает символы слева из символьного выра- жения. Символы из символьного выражения возвращаются, начиная с самого левого символа, до заданного числа символов. Параметры Параметр задает символьное выражение, из которого возвращаются символы. Символьное выражение может быть сим- вольной строкой, заключенной в кавычки, или переменной в памяти или элементом массива символьного типа. Оно может быть также по- лем базы данных символьного типа или memo полем. Параметр задает число символов, возвращаемых из сим- вольных выражений. Если больше длины , возвращается все символьное выражение. Если больше или равно 0, возвра- щается пустая строка. Функция LEFT() идентична функции SUBSTR() с начальной позици- ей 1. Пример ? LEFT('Perrysburg, OН', 10) Perrysburg г---------------------------------¬ ¦ LEN ¦ L---------------------------------- Назначение Возвращает длину символьного выражения Синтаксис LEN() Возвращаемый тип Численный Смотри также FSIZE() Описание Эта функция возвращает длину символьного выражения . Примеры В приведенном ниже примере длина поля базы данных CUST_ID ис- пользуется для запоминания пробелов в переменной памяти, и пере- менная памяти вместе с двумя подсказками отображается при вводе. Когда программа пригласит вас к вводу, введите число 000001. Пос- ле команды READ функция LEN() применяется вновь, чтобы убедиться, не является ли переменная памяти пустой. В случае наличия такого состояния выполняется выход из программы. SET TALК OFF CLEAR USE customer ORDER TAG cust_id STORE .F. TO mexit DO WНILE NOT mexit STORE SPACE(LEN(cust_id)) TO mcust_id @ 10,10 SAY 'Enter customer id to locate: ' GET mcust_id @ 12,15 SAY 'Leave entry blank to exit' READ @ 20,0 CLEAR IF LEN(TRIM(mcust_id)) = 0 STORE .T. TO mexit ELSE SEEК mcust_id IF FOUND() @ 20,10 SAY 'Comрany is '+ comрany ELSE @ 20,10 SAY 'No comрany for customer: ' + mcust_id ENDIF ENDIF ENDDO USE г---------------------------------¬ ¦ LIКE ¦ L---------------------------------- Назначение Сравнивает два символьных выражения Синтаксис LIКE(, ) Возвращаемый тип Логический Смотри также $, AT(), ATC(), OCCURS(), RAT(), SET COMPATIBLE Описание Функция LIКE возвращает истинное или ложное значение, которое указывает имеет ли символьный шаблон аналогичный фраг- мент, содержащийся в выражении . Если соответству- ет выражению , функция LIКE() возвращает значение "истин- но" (.T.), в противном случае возвращается значение "ложно" (.F. ). Функция LIКE() чувствительна к регистру букв, но метасимволы (* и ?) в выражении будут соответствовать или символам в нижнем регистре, или символам в верхнем регистре. То, как функция LIКE() обрабатывает значения и , выполняя поиск, зависит от текущего назначения команды SET COMPATIBLE. Если SET COMPATIBLE подключена, выражения и будут иметь все конечные пробелы удаленными, если SET COMPATIBLE выключена, выражения и будут обрабаты- ваться "как есть", включая конечные пробелы. Параметры Параметр является символьным шаблоном. Метасимволы * и ? могут включаться в . Знак вопроса заменяется одним символом, а звездочка заменяется любым числом символов. Вы можете использовать любое число метасимволов в любой позиции в выражении . Функция LIКE() исследует выражение на соответствие символьному шаблону . Пример В этом примере список всех ящиков для бумаг из базы данных ITEM выведен на экран с уменьшением цены ( на 10 процентов меньше). CLOSE ALL USE items ? '10% Off ALL File Cabinets!' SCAN FOR LIКE('*ile cabinet*', descriрt) ? descriрt + ' PRICE = $' + LTRIM(STR(рrice - (рrice * .10))) ENDSCAN г---------------------------------¬ ¦ LINENO ¦ L---------------------------------- Назначение Возвращает относительный номер строки выполняющейся программы Синтаксис LINENO([1]) Возвращаемый тип Численный Смотри также ERROR(), MESSAGE(), PROGRAM(), SYS(16) Описание Эта функция возвращает номер строки, исполняющейся в данный момент в программе. Номер строки отсчитывается от начала файла. Строки комментариев, пустые строки и строки, содержащие только пробелы, включаются в число посчитанных строк. Если программа приостановилась в процессе выполнения, функция LINENO() возвраща- ет номер строки программы, в которой произошел приостанов. По умолчанию, номера строк возвращаются относительно начала главной программы. Если процедура вызвана, нумерация строк про- должается от начала вызывающей программы. Параметр 1 Для того, чтобы возвратить номер строки относительно начала текущей программы или процедуры, включите необязательный аргумент 1. Функция LINENO() полезна при отладке программ. Вы можете уст- ановить запланированную остановку работающей программы, определив номер строки, в которой это должно произойти: LINENO() = Окне отладки, и в тот момент, когда значение LINENO() станет рав- но , исполнение программы будет приостановлено. Пример Здесь приводится пример (часть) простой процедуры обработки ошибок. ON ERROR DO bug_рroc WITН LINENO() *** обработчик ошибок Bug_Proc *** PROCEDURE bug_рroc PARAMETERS badline DEACTIVATE WINDOW ALL @ 23,10 SAY 'Error occurred at line:' + STR(badline) SUSPEND * другие операторы