ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 9

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є         FOR ... ENDFOR          є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Выполняет операторы внутри цикла определенное количество раз
    Синтаксис
FOR  =  TO  [STEP ]
    
  [EXIT]
  [LOOP]
ENDFOR | NEXT
    Смотри также
DO CASE, DO WHILE, 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 TALK OFF
USE customer
GO TOP
STORE 2 TO I
STORE 10 TO J
STORE 2 TO K
FOR mcount = I TO J STEP K
        GOTO mcount
        DISPLAY UPPER (company)
ENDFOR
USE  && закрыть базу данных

    В первом примере счетчик цикла меняется от  1  до  10.  Во  втором
примере  показано  использование  опции  STEP  с  отрицательным шагом.
Переменная цикла меняется от 10 до 1. В последнем примере показано то,
что  начальное и конечное значение переменной цикла,  а также значение
шага могут быть заданы с помощью  переменных.  В  этом  примере  будут
отображены  все  записи  базы  данных  CUSTOMER,  номера которых имеют
значение от 2 до 10.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              FOUND              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает значение "истинно",  если последняя команда CONTINUE, FIND,
LOCATE или SEEK успешно выполнилась
    Синтаксис
FOUND([ | ])
    Параметры
  Номер рабочей области для базы данных
  Псевдоним базы данных
    Возвращаемый тип
Логический
    Смотри также
CONTINUE, EOF(), LOCATE, SEEK

    Описание
    Функция FOUND()    возвращает    логическое    значение,   которое
указывает на то,  что успешно выполнилась последняя команда  поиска  в
базе данных CONTINUE,  FIND, LOCATE или SEEK, или на то, что указатель
перемещен как результат отношения между базами данных.
    Логическое значение  "истинно"  (.T.)  возвращается  в том случае,
если поиск  выполнен  успешно.  Значение  "ложно"  (.F.)  возвращается
тогда,  когда  последняя команда поиска неуспешна.

    Параметр
 | 
    Существует значение FOUND() для каждой рабочей области. Если вы не
задали рабочую область и псевдоним,  FOUND() возвращает  значение  для
файла базы  данных  в  текущей  рабочей  области.  Вы  можете получить
значение FOUND() для базы данных,  открытой в другой рабочей  области.
Для получения  значения  FOUND()  в  заданной рабочей области включите
номер рабочей области  или псевдоним базы данных .
    Если в заданной рабочей области нет открытой базы данных,  FOUND()
возвращает значение "ложно" (.F.).  Если нет базы  данных  с  заданным
псевдонимом, выдается  сообщение  "Alias  not  found"  ("Псевдоним  не
найден").

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

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Примеры              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

SET TALK 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 TALK OFF
CLOSE ALL
USE customer
STORE 0 TO mcount
LOCATE FOR city = 'Perrysburg'
DO WHILE FOUND()
        mcount = mcount + 1
        CONTINUE
ENDDO
WAIT WINDOW 'Total customers from Perrysburg: ' ;
        + LTRIM(STR(mcount)) NOWAIT
USE && закрыть базу данных

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              FPUTS              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Записывает символьную  строку,  возврат каретки и подачу строки в файл
или коммуникационный порт
    Синтаксис
FPUTS(,  [, ])
    Параметры
  Дескриптор файла или порта
   Символьная строка, записываемая в файл или порт
  Число символов, записываемых в файл или порт
    Возвращаемый тип
Численный
    Смотри также
FCHSIZE(), FCLOSE(),  FCREATE(),  FEOF(),  FFLUSH(), FGETS(), FOPEN(),
FREAD(), FSEEK(), FWRITE()

    Описание
    Функция FPUTS()   записывает   строку   символов   в   файл    или
коммуникационный порт,  который был открыт функцией FOPEN(). В отличие
от функции FWRITE(),  функция  FPUTS()  размещает  возврат  каретки  и
подачу  строки в конце строки символов,  которую она записывает в файл
или коммуникационный порт.
    Функция FPUTS()  возвращает  число  байтов,  записанных в файл или
порт. Если FPUTS() не  может  осуществить  запись  в  файл  или  порт,
возвращается 0.

    Параметры

    FPUTS() осуществляет  запись  в  файл или порт,  заданный .
Функции FOPEN() и FCREATE() используются  для  назначения  дескриптора
файла переменной в памяти. Обычно,  задано этой переменной.


    Строка, которую  функция  FPUTS()  записывает  в  файл  или  порт,
задается с помощью .


    Функция FPUTS() записывает в файл или порт целую строку,  если  не
задано .  Когда включено ,  символов записывается
в файл или порт.  Вся строка  будет записана в файл или  порт  в
случае, если    больше или равно числу символов в .  Если
 меньше числа символов в ,  только  символов будут
записаны в файл или порт.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    Следующий пример  создает  и открывает временный файл для элемента
данных. Если файл создается успешно, программа создает окно ввода, где
вы можете ввести первое имя,  последнее имя и позицию.  Эта информация
затем  записывается  во  временный  файл.  Затем,  что  в  отличие  от
FWRITE(), функция  FPUTS()  помещает  возврат  каретки в конец строки.
Затем редактор FoxPro показывает результирующий  файл.  Если  файл  не
может быть  успешно  создан  с  использованием  низкоуровневой функции
работы с файлами,  редактор FoxPro создает и затем  показывает  пустой
файл.

SET TALK OFF
CLEAR
tmpfile = SYS(3)          && Создать имя временного файла
handle = FCREATE(tmpfile) && Открыть временный файл

IF handle < 0             && Ошибка, возникшая при создании файла
   DEFINE WINDOW alert FROM 7,17 TO 12,60 DOUBLE COLOR SCHEME 7

   DO CASE                && Невозможно открыть временный файл
     CASE FERROR() = 4
       reason = 'Too many files open (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 open file'
   @ 2,7 SAY 'Reason: ' + reason
   @ 3,7 SAY 'Press a key to exit'
   =INKEY(0)
   DEACTIVATE WINDOW alert
   CANCEL
ELSE
   STORE SPACE(15) TO fname, lname, pos
   DEFINE WINDOW wingets FROM 10,20 TO 18,60 ;
     CLOSE FLOAT SHADOW SYSTEM COLOR SCHEME 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 pos
   READ
   =FWRITE(handle,'First name: ')
   =FPUTS(handle,fname)
   =FWRITE(handle,'Last name: ')
   =FPUTS(handle,lname)
   =FWRITE(handle,'Position: ')
   =FPUTS(handle,pos)
   =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 SHADOW SYSTEM ;
    COLOR SCHEME 8 TITLE ' Name Entry '
ENDIF

MODIFY FILE (tmpfile) WINDOW wingets NOWAIT && Просмотр файла
CLEAR WINDOW

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              FREAD              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает заданное число байтов из файла или коммуникационного порта
    Синтаксис
FREAD(, )
    Параметры
  Дескриптор файла или порта
  Число возвращаемых байтов
    Возвращаемый тип
Символьный
    Смотри также
FCHSIZE(), FCLOSE(),  FCREATE(),  FEOF(),  FFLUSH(), FGETS(), FOPEN(),
FPUTS(), FSEEK(), FWRITE()

    Описание
    Функция FREAD()  возвращает  в  качестве  символьной  строки серию
байтов из файла или коммуникационного порта.

    Параметры

    Функция FREAD() возвращает данные из файла  или  коммуникационного
порта, заданного  с  помощью  .  Включите  дескриптор файла или
порта в .


    Число байтов, возвращаемых функцией FREAD() определяется  и
позицией указателя файла. FREAD() начинает возвращать данные с текущей
позиции указателя  и останавливается после возврата  байтов или
при встрече конца файла.  Если  встретился  конец  файла,  может  быть
возвращено менее  байтов.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

*** Должен существовать файл TEST.TXT ***
STORE FOPEN('test.txt') TO file_handle && Открыть файл

STORE FSEEK(file_handle, 0, 2) TO ifp_size && Переместить указатель
                                           && на конец файла

STORE FSEEK(file_handle, 0) TO ifp_top && Переместить указатель
                                       && на начало файла

IF ifp_size <= 0 && Является ли файл пустым ?
        WAIT WINDOW 'This file is empty!' NOWAIT

ELSE && Если нет
  l_string = FREAD(file_handle, ifp_size) && Сохранить содержание
                                          && в памяти
ENDIF

= FCLOSE(file_handle) && Закрыть файл

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              FSEEK              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Перемещает указатель файла в файле,  открытом низкоуровневой  функцией
работы с файлами
    Синтаксис
FSEEK(,  [, ])
    Параметры
  Дескриптор файла
  Число байтов для перемещения указателя файла
  Если 0,  то  указатель файла перемещается относительно начала
         файла (по умолчанию)
         Если 1,  то указатель файла перемещается относительно текущей
         позиции указателя
         Если 2,  то  указатель  файла перемещается относительно конца
         файла
    Возвращаемый тип
Численный
    Смотри также
FCHSIZE(), FCLOSE(),FCREATE(),  FEOF(),  FFLUSH(),  FGETS(),  FOPEN(),
FPUTS(), FREAD(), FWRITE()

    Описание
    Функция FSEEK() используется для  перемещения  указателя  файла  в
пределах файла.
    После перемещения  указателя  файла,  функция  FSEEK()  возвращает
текущую позицию  указателя файла относительно начала файла.  Указатель
файла может быть также  перемещен  с  помощью  низкоуровневых  функций
работы с файлами FREAD() и FWRITE().

    Параметры

    Функция FSEEK()  перемещает  указатель  файла в файле,  задаваемом
. Включайте  дескриптор  файла  в  .  Дескриптор   файла
возвращается (и  обычно  сохраняется  в переменной в памяти) функциями
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

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    Следующая функция,  определенная пользователем, использует FSEEK()
для получения  размера  файла.  Если  вы  не  включаете  параметров  в
функцию, определенную  пользователем,  возвращается  -2.  Если файл не
найден, возвращается -1.

FUNCTION fsize2
PARAMETERS mfile && Проверяемый файл
PRIVATE mhandle,fsize

IF PARAMETERS() = 0
        RETURN -2 && Возвратить -2, если параметр не передан
ELSE

        IF !FILE(mfile)
                RETURN -1 && Возвратить -1, если файл не существует
        ENDIF
ENDIF
mhandle = FOPEN(mfile)     && Открыть файл
fsize = FSEEK(mhandle,0,2) && Определить размер файла,
                           && присвоить его fsize
=FCLOSE(mhandle)           && Закрыть файл
RETURN fsize               && Возвратить значение

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              FSIZE              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает размер поля базы данных
    Синтаксис
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

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            FULLPATH             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает полное путевое имя для файла
    Синтаксис
FULLPATH([,  | ])
    Параметры
  Имя файла
        Указывает,  что FULLPATH() исследует  маршрут DOS  перед
              исследования маршрута FoxPro
  Имя второго файла
    Возвращаемый тип
Символьный
    Замечания
Расширена в FoxPro 2.0: Относительный путь между двумя файлами
    Смотри также
DBF(), FILE(), LOCFILE(), SYS(2014)

    Описание
    Функция FULLPATH() возвращает полное путевое имя DOS для файла или
полный путь, относительно другого файла.

    FULLPATH(), когда используется с SYS(2014),  может  использоваться
для того,  чтобы  сделать прикладные программы переносимыми.  То есть,
задавая местоположение текущей программы  и  местоположение  остальных
файлов, FULLPATH()  и  SYS(2014) используются для получения правильных
путей для этих файлов.  Так как пути файлов определяются,  файлы могут
быть доступны программе.

    Дополнительные опции

    Маршрут FoxPro  исследуется  для  файла  с  именем  .
Обязательно включайте расширение имени файла  (если  оно  есть).  Если
файл находится в маршруте FoxPro,  возвращается полное путевое имя для
этого файла.  Маршрут FoxPro может быть установлен с  помощью  команды
SET PATH.
    Если файл не найден в маршруте FoxPro,  полное путевое  имя  файла
возвращается, как  будто  файл  был  найден  в  текущей  по  умолчанию
директории. Директория по умолчанию может  быть  задана  командой  SET
DEFAULT.


    Если включается ,  то исследуется маршрут DOS (а не  маршрут
FoxPro) для заданного файла.   может иметь любое значение.  Если
файл не найден в маршруте DOS,  полное путевое имя файла возвращается,
как   будто  файл  был  найден  в  текущей  по  умолчанию  директории.
Директория по умолчанию может быть задана командой SET


    Может быть  включено необязательное второе имя файла .
Обязательно включайте расширение имени файла (если оно есть).  В  этом
случае функция  FULLPATH()  возвратит  полное  путевое  имя  для  относительно .

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    В этом примере исследуется,  как использовать функции FULLPATH() и
SYS(2014) для определения местоположения базы данных, используемой при
создании экрана.
    Когда вы  создаете  экран  с  помощью компоновщика экранов FoxPro,
информация о  созданном  экране  сохраняется  в  базе  данных   экрана
(которую мы назовем SCREEN.SCX). Поля в другой базе данных (которую мы
назовем DATA.DBF)   могут   использоваться   в   создаваемом   экране.
Местоположение базы  данных  DATA сохраняется в базе данных SCREEN при
сохранении экрана.
    В этом  примере используется следующая структура директорий.  База
данных SCREEN  размещается  в  поддиректории  SC  корневой  директории
устройства C:  (C:\SC\SCREEN.SCX).  База  данных  DATA  размещается  в
поддиректории DB директории SC.  "Домашней" директорией в этом примере
будет поддиректория FP директории DB.

    C:
    і
    і
    ГД SC ДД SCREEN.SCX
    і  і
    і  і
    і  ГД DB ДД DATA.DBF
    і  і  і
    і  і  і
    і  і  АД FP ДД "Домашняя" директория
    і  і
    і  і
    і  АД TX
    і
    АД WK


    База данных  SCREEN  сохраняет  местоположение  базы  данных  DATA
относительно базы данных SCREEN - DB\DATA.DBF
    Программа может генерировать команду USE для открытия базы  данных
DATA. Она должна определить местоположение DATA из путевой информации,
сохраненной в базе данных SCREEN. Программа может использовать функцию
FULLPATH():

FULLPATH('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:\WK\                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             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Определяет начало подпрограммы
    Синтаксис
FUNCTION 
    Смотри также
PARAMETERS, PARAMETERS(),    RETURN,   PRIVATE,   PROCEDURE,   PUBLIC,
RRETURN, SET PROCEDURE, SET UDFPARMS, UDFs
    Описание
    Во многих программах встречаются часто повторяющиеся подпрограммы.
Определение этих общеупотребительных подпрограмм как отдельных функций
уменьшает размер и сложность программ,  упрощает  их  сопровождение  и
повышает производительность.
    Оператор FUNCTION  находится внутри  программы.  Он
определяет  начало  каждой  функции  в  программе и идентифицирует имя
функции.  Имя функции  может  включать  до  10  символов.  Оно  должно
начинаться с  буквы  или символа подчеркивания и может содержать любую
комбинацию букв, чисел и символов подчеркивания.
    После первой  строки,  содержащей  FUNCTION ,  идет
серия команд,  определяющих функцию. Вы не обязаны включать в качестве
последнего оператора функции оператор RETURN, так как он автоматически
выполняется после последнего оператора функции.
    Следующая команда  FUNCTION  или  конец  файла сигнализирует конец
функции.
    Когда функция  выполняется с оператором DO ,  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 MONTH (qdate) > 9
                RETURN 'Fourth Quarter'
        CASE MONTH (qdate) > 6
                RETURN 'Third Quarter'
        CASE MONTH (qdate) > 3
                RETURN 'Second Quarter'
        OTHERWISE
                RETURN 'First Quarter'
ENDCASE

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є               FV                є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает будущее значение капиталовложения
    Синтаксис
FV(, , )
    Параметры
  Равный периодический процесс
  Доля периодической выгоды
  Число периодов произведенных платежей
    Возвращаемый тип
Численный
    Смотри также
CALCULATE, PV()

    Описание
    Финансовая функция    FV()     возвращает     будущее     значение
капиталовложения. Функция FV() вычисляет будущее значение серии равных
периодических платежей,  что приводит к постоянной совместной  выгоде.
Будущее значение равно сумме всех платежей и созданной выгоде.

    Параметры

     (который   может  быть  отрицательным  или  положительным)
представляет собой равный периодический платеж. FV() предполагает, что
платежи  делаются в конце каждого периода.


    Доля периодической выгоды задается численным  выражением  .
Если доля   выгоды   ежегодна,   но  платежи  производятся  помесячно,
разделите ежегодную долю выгоды на 12.


     задает число периодов произведенных платежей.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

STORE 500 TO payment             && Ежемесячный платеж
STORE .075/12 TO interest        && 7.5% ежегодной доли выгоды
STORE 48 TO periods              && Четыре года (48 месяцев)
? FV(payment, interest, periods) && Вычисление будущего значения

27887.93

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             FWRITE              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Записывает символьную строку в файл или коммуникационный порт
    Синтаксис
FWRITE(,  [, ])
    Параметры
  Дескриптор файла или порта
   Символьная строка, записываемая в файл или порт
  Число символов, записываемых в файл или порт
    Возвращаемый тип
Численный
    Смотри также
FCHSIZE(), FCLOSE(),  FCREATE(),  FEOF(),  FFLUSH(), FGETS(), FOPEN(),
FPUTS(), FREAD(), FSEEK()

    Описание
    Функция FWRITE() записывает строку символов в низкоуровневый  файл
или  коммуникационный  порт.  В  отличие  от функции FPUTS(),  функция
FWRITE()не размещает возврат каретки и подачу строки  в  конце  строки
символов, которую она записывает в файл или коммуникационный порт.
    Функция FWRITE() возвращает число байтов,  записанных в  файл  или
порт.  Если  FWRITE()  не  может  осуществить  запись в файл или порт,
возвращается 0.

    Параметры

    FWRITE() осуществляет запись в файл или  порт,  заданный  .
Функции  FOPEN()  и  FCREATE() используются для назначения дескриптора
файла переменной в памяти. Обычно,  задано этой переменной.


    Строка, которую  функция  FWRITE()  записывает  в  файл  или порт,
задается с помощью .


    Функция FWRITE() записывает в файл или порт целую строку,  если не
задано .  Когда включено ,  символов записывается
в  файл  или порт.  Вся строка  будет записана в файл или порт в
случае,  если  больше или равно числу символов в  .  Если
 меньше числа символов в ,  только  символов будут
записаны в файл или порт.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    Следующий пример  создает  и открывает временный файл для элемента
данных. Если файл создается успешно, программа создает окно ввода, где
вы можете ввести первое имя,  последнее имя и позицию.  Эта информация
затем  записывается  во  временный  файл.  Затем,  что  в  отличие  от
FWRITE(), функция  FPUTS()  помещает  возврат  каретки в конец строки.
Затем редактор FoxPro показывает результирующий  файл.  Если  файл  не
может быть  успешно  создан  с  использованием  низкоуровневой функции
работы с файлами,  редактор FoxPro создает и затем  показывает  пустой
файл.

SET TALK OFF
CLEAR
tmpfile = SYS(3)          && Создать имя временного файла
handle = FCREATE(tmpfile) && Открыть временный файл

IF handle < 0             && Ошибка, возникшая при создании файла
   DEFINE WINDOW alert FROM 7,17 TO 12,60 DOUBLE COLOR SCHEME 7

   DO CASE                && Невозможно открыть временный файл
     CASE FERROR() = 4
       reason = 'Too many files open (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 open file'
   @ 2,7 SAY 'Reason: ' + reason
   @ 3,7 SAY 'Press a key to exit'
   =INKEY(0)
   DEACTIVATE WINDOW alert
   CANCEL
ELSE
   STORE SPACE(15) TO fname, lname, pos
   DEFINE WINDOW wingets FROM 10,20 TO 18,60 ;
     CLOSE FLOAT SHADOW SYSTEM COLOR SCHEME 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 pos
   READ
   =FWRITE(handle,'First name: ')
   =FPUTS(handle,fname)
   =FWRITE(handle,'Last name: ')
   =FPUTS(handle,lname)
   =FWRITE(handle,'Position: ')
   =FPUTS(handle,pos)
   =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 SHADOW SYSTEM ;
    COLOR SCHEME 8 TITLE ' Name Entry '
ENDIF

MODIFY FILE (tmpfile) WINDOW wingets NOWAIT && Просмотр файла
CLEAR WINDOW

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             GATHER              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Перемещает содержание  переменных памяти или элементов массивов в поля
базы данных.
    Синтаксис
GATHER FROM  | MEMVAR
        [FIELDS ]
        [MEMO]
    Смотри также
APPEND FROM ARRAY, COPY TO ARRAY, DIMENSION, SCATTER

    Описание
    Команда GATHER  перемещает  данные из набора переменных памяти или
массивов переменных памяти в текущую запись активной базы данных.

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

MEMVAR
    Если используется  опция  MEMVAR,  то  из списка переменных памяти
пересылаются переменные,  с такими же именами,  что и поля  в  текущей
записи базы данных.

    Важно!!!
    Переменные памяти с теми же именами,  что и поля  в  базе  данных,
легко  могут  быть  созданы  с  помощью опций MEMVAR или BLANK команды
SCATTER.

    Содержимое каждой переменной пересылается в соответствующее поле с
тем же именем.  Если не может быть найдена переменная с тем же именем,
что и поле базы данных, то содержимое поля не изменяется.

FIELDS 
    Чтобы только  заданные  поля  базы данных были заменены содержимым
элементов массива или переменных памяти, вы можете задать опцию FIELDS
со списком имен полей базы данных.

MEMO
    Для включения в обработку командой GATHER memo полей,  используйте
ключевое  слово MEMO.  Если MEMO не включено,  memo поля пропускаются,
когда команда GATHER копирует данные из массива или переменных  памяти
в текущую запись.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    Следующий пример   иллюстрирует  использование  команд  SCATTER  и
GATHER.  Процедура использует SCATTER для копирования данных в текущей
записи в переменную в памяти.  Затем данные представляются в окне, где
их при желании можно отредактировать. Когда обработано последнее поле,
данные  копируются  назад  в  текущую  запись с использованием команды
GATHER (если не была нажата клавиша Escape).  В этом примере опция  TO
не используется  командами  SCATTER  и  GATHER;  опция TO используется
только при копировании данных в и из массивов.

SET TALK OFF
USE customer
SCATTER MEMVAR
DEFINE WINDOW menter FROM 6,10 to 18,70 PANEL
ACTIVATE WINDOW menter
@ 1,3  SAY 'Customer: ' GET m.company
@ 3,3  SAY 'Address: '  GET m.address1
@ 5,3  SAY 'City: '     GET m.city
@ 7,3  SAY 'State: '    GET m.state
@ 7,18 SAY 'Zip: '      GET m.zip
@ 9,13 SAY 'Press  to discard changes'
READ

IF LASTKEY() != 27
        GATHER MEMVAR
ENDIF
DEACTIVATE WINDOW menter
USE

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             GETBAR              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает номер линейки для заданной позиции всплывающего меню
    Синтаксис
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 KEY LABEL F5 DO showorder

DEFINE POPUP demopop MOVER FROM 2,2
DEFINE BAR 1 OF demopop PROMPT 'One'
DEFINE BAR 2 OF demopop PROMPT 'Two'
DEFINE BAR 3 OF demopop PROMPT 'Three'
DEFINE BAR 4 OF demopop PROMPT 'Four'

DO showorder
ACTIVATE POPUP demopop

PROCEDURE showorder

CLEAR
@ 3,12 SAY  '1 ' + PRMBAR('demopop', GETBAR('demopop',1))
@ 4,12 SAY  '2 ' + PRMBAR('demopop', GETBAR('demopop',2))
@ 5,12 SAY  '3 ' + PRMBAR('demopop', GETBAR('demopop',3))
@ 6,12 SAY  '4 ' + PRMBAR('demopop', GETBAR('demopop',4))

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             GETENV              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает строку  символов,  которая  содержит  содержимое   заданной
переменной среды ДОС
    Синтаксис
GETENV()
    Возвращаемый тип
Символьный
    Смотри также
DISKSPACE(), OS(), VERSION()

    Описание
    Функция GETENV()  возвращает  строку  символов,  которая  содержит
содержимое переменной среды ДОС. Две переменные среды всегда имеются в
распоряжении пользователя - это COMSPEC и PATH.  Вы можете  определить
ваши собственные переменные среды, воспользовавшись командой DOS SET.
    Для получения  дополнительной  информации,  касающейся  переменных
среды,  вы  можете  обратиться  к руководству по использованию системы
ДОС.

    Параметр

    Имя переменной среды DOS  задается  с  помощью  .  В  случае
отсутствия указанной переменной среды возвращается пустая строка.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

? GETENV('PATH')

C:\COMMAND;C:\FOXPRO2

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             GETEXPR             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Создает выражение и сохраняет его в переменной памяти
    Синтаксис
GETEXPR [] TO 
        [TYPE  [; ]]
        [DEFAULT ]
    Смотри также
GETFILE(), LOCFILE(), PUTFILE()

    Описание
    Команда GETEXPR  отображает  Построитель  выражений  FoxPro.   Это
позволяет вам создать выражение и поместить его в переменную памяти.

    Дополнительные опции

    Необязательный аргумент  это сообщение,  которое появляется
в Построителе выражений.  Это сообщение может  быть  использовано  для
того, чтобы напомнить вам, какое выражение вы создаете.

TO 
     является переменной в памяти, используемой для сохранения
выражения. Если к моменту выполнения команды переменная не существует,
то она будет  создана.  Выражение,  созданное  Построителем  выражений
хранится как символьная строка. Если Построитель выражений был прерван
нажатием клавиши Escape или  выбором  режима  отмены  (Cancel),  то  в
память переменной будет записана пустая строка. Если с помощью команды
DEFAULT было определено выражение  - выражение по умолчанию, то
в случае  выхода  из  Построителя  выражений с помощью нажатия клавиши
Escape или выбора  режима  отмены  (Cancel)  выражение    будет
записано в память переменной.

TYPE  [;]
    TYPE позволяет вам  определить  тип  создаваемого  выражения.  Тип
определяется одной буквой в выражении  - С для символьного, N -
для численного,  D - для даты  и  L  -для  логического.  Необязательно
должно  включаться  сообщение об ошибке,  которое будет отображаться в
случае,  если  создаваемое  вами  выражение   является   недопустимым.
Сообщение об ошибке определяется в выражении .
    Если выражение  используется само по себе,  то  оно  должно
быть заключено в кавычки.  Если  используется вместе с ,
то они должны  быть  отделены  друг  от  друга  точкой  с  запятой,  а
комбинация,  состоящая  из  ,  точки с запятой и  должна
быть заключена в кавычки.

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

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

IF USED('customer')
        SELECT customer
ELSE
        USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?')
ENDIF
GETEXPR 'Enter condition to locate ' TO temp;
        TYPE 'L' DEFAULT 'COMPANY = " "'
LOCATE FOR &temp
IF FOUND()
        ? 'Company: ' + company
ELSE
        ? 'Condition ' + temp + ' was not found '
ENDIF
USE

    В этом  примере  команда  GETEXPR  используется  для  получения от
пользователя  выражения  LOCATE  (  соответствующего  типа   ).   Если
сообщение  получено  успешно,  то высвечивается компания.  В противном
случае вы получите сообщение о том, что сообщение не найдено.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             GETFILE             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Отображает диалог Открыть файл (Open File)
    Синтаксис
GETFILE([] [, ])
    Параметры
  Расширения файлов, представляемых в диалоге Открыть файл
  Строка-подсказка,  которая будет отображаться в верхней части
         диалога Открыть файл
    Возвращаемый тип
Символьный
    Смотри также
GETEXPR, FULLPATH(), LOCFILE(), PUTFILE()

    Описание
    Функция GETFILE()  отображает  диалог  Открыть  файл  (Open  File)
FoxPro в пределах которого может быть выбран файл на диске.  Затем эта
функция   возвращает  имя  выбранного  файла.  Имя  файла,  выбранного
пользователем,  возвращается как значение функции.  В том случае, если
никакой  файл  не  выбран  (выбирается  вариант  Cancel или нажимается
клавиша Escape), функция возвращает пустую строку.

    Параметры

    Необязательный аргумент  указывает расширение файлов, кото-
рые  должны  быть  отображены  в прокручиваемом списке диалога Открыть
файл,  когда контрольный блок All Files (Все файлы) не выбран. Для по-
лучения  информации,  касающейся  полного  списка  расширений  файлов,
используемых в системе FoxPro, обратитесь к таблице расширений файлов,
имеющейся  в "Руководстве разработчика" (Developer'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', 'Open Database:')
USE (dbf_file)

idx_file = GETFILE('CDX|IDX|NDX', 'Index:')
SET INDEX TO (idx_file)
USE

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             GETPAD              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает номер пункта для заданной позиции линейки меню
    Синтаксис
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 pads
        IF PRMPAD('_msysmenu', GETPAD('_msysmenu', count)) = 'System'
                RELEASE PAD (GETPAD('_msysmenu', count)) OF _msysmenu
                EXIT
        ENDIF
ENDFOR

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            GO/GOTO              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Позиционирует указатель записи
    Синтаксис
GO [RECORD] [IN  | ]
GO TOP | BOTTOM[IN  | ]

GOTO [RECORD] [IN  | ]
GOTO TOP | BOTTOM[IN  | ]
    Смотри также
RECNO(), SELECT, SKIP

    Описание
    Команда 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

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             GOMONTH             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает дату, которая является заданным числом месяцев до или после
заданной даты
    Синтаксис
GOMONTH(, )
    Параметры
  Начальная дата
  Если положительное, число месяцев после начальной даты
        Если отрицательное, число месяцев до начальной даты
    Возвращаемый тип
Дата
    Смотри также
CMONTH()

    Описание
    Функция GMONTH() возвращает дату, которая является заданным числом
месяцев до или после заданной даты.

    Параметры

    Выражение даты  является начальной датой.


    С помощью    вы  задаете  число  месяцев,  отсчитываемых  от
выражения даты .  Если  положительно,  дата,  возвращаемая
функцией GMONTH(),  является  месяцев после .  Если 
отрицательно, возвращаемая дата является  месяцев до .

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Примеры              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

SET CENTURY ON
STORE GOMONTH({08/02/91}, 5) TO deadline
? deadline

01/02/1992

? GOMONTH({12/31/91}, 2)

02/29/1992

? GOMONTH({12/31/91}, -2)

10/31/1991

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             HEADER              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает размер заголовка базы данных
    Синтаксис
HEADER([ | ])
    Возвращаемый тип
Численный
    Смотри также
FSIZE(), RECSIZE()

    Описание
    Функция HEADER()  возвращает  размер  (в  байтах)  заголовка  базы
данных. Заголовок базы данных содержит такую информацию о  самой  базе
данных, как  имена  полей и их размеры и наличие связанных memo файлов
или структурных индексов.

    Параметр
 | 
    Если вы не задали рабочую область и псевдоним, возвращается размер
заданного заголовка  для  базы  данных  в текущей рабочей области.  Вы
можете получить размер заголовка для базы данных,  открытой  в  другой
рабочей  области,  включив  номер рабочей области  или псевдоним
базы данных .
    Функция HEADER()  возвращает  значение 0,  если в заданной рабочей
области нет открытой базы данных.  Если нет  базы  данных  с  заданным
псевдонимом,  выдается  сообщение  "Alias  not  found"  ("Псевдоним не
найден").

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              HELP               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Открывает Окно подсказки
    Синтаксис
HELP
  [IN [WINDOW]  | SCREEN]
  []
  [NOWAIT]
    Смотри также
SET HELP, SET HELPFILTER, SET TOPIC

    Описание
    Команда HELP открывает  Окно  подсказки.  Главное  Окно  подсказки
содержит  полный  список  команд  и  ключевых  слов,  расположенных  в
алфавитном порядке.
    Вы можете выбрать Окно подсказки, напечатав HELP в Командном окне,
нажатием клавиши F1 или выбрав  Help  во  всплывающем  системном  меню
System.
    Для получения  более  полной  информации  о  диалоговых  средствах
подсказки в FoxPro обратитесь к "Руководству по интерфейсу" (Interface
Guide) системы FoxPro.

    Дополнительные опции
IN [WINDOW] 
    IN WINDOW  открывает  Окно  подсказки  в  порождающем
окне.  Окно  подсказки не получает характеристик порождающего окна,  в
котором оно расположено.  Если Окно  подсказки  активизировано  внутри
порождающего   окна,   оно   не   может  быть  перемещено  за  пределы
порождающего  окна.  Если  вы  перемещаете  порождающее   окно,   Окно
подсказки будет  перемещаться  вместе  с ним.  Порождающее окно должно
быть сначала определено с помощью DEFINE WINDOW.

IN [WINDOW] SCREEN
    Вы можете задать открытие Окна подсказки на экране,  включив опции
IN WINDOW SCREEN  или  IN  SCREEN.  Это  стандартное  размещение  Окна
подсказки.


    Окно подсказки может быть открыто с  уже  представленной  заданной
темой. Включите  в  HELP  тему ,  по которой вы хотите получить
информацию. Если вы включите в  частичное описание темы, FoxPro
откроет Окно подсказки с наиболее подходящими темами.

NOWAIT
    Когда команда  HELP  вызывается  из  программы,  открывается  Окно
подсказки,   и  выполнение  программы  приостанавливается,  пока  Окно
подсказки не будет закрыто. При включении режима NOWAIT после открытия
Окна  подсказки  выполнение программы продолжается.  Программа не ждет
закрытия окна,  а продолжает  свою  работу  со  следующей  программной
строки.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            HIDE MENU            є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Удаляет линейку меню
    Синтаксис
HIDE MENU [,  ... ] | ALL
  [SAVE]
    Смотри также
ACTIVATE MENU, DEFINE MENU, DEFINE PAD, SHOW MENU

    Описание
    Команда HIDE MENU удаляет заданную линейку меню, набор линеек меню
или все линейки меню с экрана или окна,  оставляя их в  памяти.  Перед
тем,  как  быть убранной с экрана,  линейка меню должна быть создана с
помощью команды DEFINE MENU.  Сделать скрытой линейку меню - не одно и
то же,  что деактивизировать ее. Когда линейка меню сделана невидимой,
она все же остается резидентной в памяти и снова может  быть  показана
на экране или в окне с помощью команды ACTIVATE MENU или SHOW MENU.

    Дополнительные опции
[,  ...]
    Для того,  чтобы  скрыть линейку меню,  включите ее имя или список
имен линеек меню (разделенных запятыми).

ALL
    Скрывает все линейки меню, которые были определены.

SAVE
    Можно поместить изображение линейки меню  на  экран  или  в  окно,
указав   режим  SAVE.  Это  очень  удобно  при  разработке  и  отладке
программы.  Изображения линеек меню можно убрать с экрана или из  окна
командой CLEAR.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

CLEAR
SET SYSMENU OFF
DEFINE MENU mainmenu
DEFINE PAD invoices  OF mainmenu PROMPT ' \[,  ... ] | ALL
  [SAVE]
    Смотри также
ACTIVATE POPUP, DEFINE BAR, DEFINE POPUP, SHOW POPUP

    Описание
    Команда HIDE   POPUP  удаляет  заданное  всплывающее  меню,  набор
всплывающих меню или все всплывающие меню с экрана или окна,  оставляя
их в памяти.  Перед тем,  как быть убранным с экрана, всплывающее меню
должно быть создано с помощью команды DEFINE  POPUP.  Сделать  скрытым
всплывающее  меню - не одно и то же,  что деактивизировать его.  Когда
всплывающее меню сделано невидимым,  оно все же остается резидентным в
памяти  и  снова  может  быть  показано на экране или в окне с помощью
команды ACTIVATE POPUP или SHOW POPUP.

    Дополнительные опции
[,  ...]
    Для того,  чтобы скрыть всплывающее меню,  включите  его  имя  или
список имен всплывающих меню (разделенных запятыми).

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, SHOW WINDOW

    Описание
    Команда HIDE WINDOW удаляет именованное окно или окна с экрана. Вы
можете  также  удалять  системные  окна,  такие  как  Командное  окно,
Калькулятор  и  т.д.  Сделать  окно невидимым это не то же самое,  что
закрыть его.  Когда окно невидимо, оно остается резидентным в памяти и
активным во всех отношениях. Информация вывода может быть направлена в
невидимое окно - только вы не сможете увидеть этого.
    Закрытие окна  удаляет  его  из  памяти.  Удаленные из памяти окна
должны быть снова определены перед их повторным размещением на экране.
Окно  может быть отображено на экране с помощью команд ACTIVATE WINDOW
или SHOW WINDOW.
    Окна также  можно  сделать  невидимыми,  выбрав  команду  Hide  во
всплывающем меню Окна (Window).  Вы можете вновь отобразить это  окно,
выбрав его имя во всплывающем меню Окна (Window).
    Для получения более полной  информации  о  средствах,  позволяющих
сделать окно  невидимым,  обратитесь  к  "Руководству  по  интерфейсу"
(Interface Guide) по системе FoxPro.

    Дополнительные опции
[,  ...]
    Для того, чтобы скрыть окно, включите его имя или список имен окон
(разделенных запятыми).
    Если команда  HIDE  WINDOW  дается  без  аргументов,   закрывается
текущее окно вывода.

ALL
    Скрывает все окна.

IN [WINDOW] 
    Окна могут быть закрыты внутри порождающего окна. Вы можете задать
порождающее окно,  внутри  которого  будут   скрыты   дочерние   окна,
используя IN WINDOW.  "Настольная" оргтехника (Filer, Калькулятор и т.
д.) должна быть активной перед закрытием.

IN [WINDOW] SCREEN
    Вы можете закрыть окно на экране,  включив IN WINDOW SCREEN или IN
SCREEN. Эта опция позволяет вам закрыть окно на экране,  а  не  внутри
окна. По умолчанию окна скрываются на экране.

SAVE
    Можно поместить изображение окна на экран или в другое окно, после
того,  как  окно было закрыто.  Обычно,  окна удаляются с экрана после
того,  как они сделаны невидимыми.  Изображение окна  можно  убрать  с
экрана или из окна командой CLEAR.  Вы не можете сохранить изображение
текущего окна вывода.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

DEFINE WINDOW output FROM 6,1 TO 19,75 TITLE 'Output' ;
        CLOSE FLOAT GROW SHADOW ZOOM
ACTIVATE WINDOW output
WAIT WINDOW 'Press a key to hide this window'
HIDE WINDOW output
WAIT WINDOW 'Press a key to see the window again'
SHOW WINDOW output
WAIT WINDOW 'Press a key to remove the window'
DEACTIVATE WINDOW output
RELEASE WINDOW output

    В этом примере определяется и активизируется окно с именем OUTPUT.
Программа ждет нажатия клавиши,  и  окно  скрывается.  Программа  ждет
нового нажатия клавиши, и окно показывается. Затем нажмите клавишу для
удаления окна с экрана и из памяти.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є          IF ... ENDIF           є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Выполняет команды в зависимости от условия
    Синтаксис
IF 
                
        [ELSE
                ]
ENDIF
    Смотри также
DO CASE, DO WHILE, 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 temp;
        TYPE 'L' DEFAULT 'COMPANY = ""'
LOCATE FOR &temp && Ввести выражение LOCATE
IF FOUND()       && Найдено ли оно?
        ? 'Company: ' + company  && Если да, выдать сообщение
ELSE                             && Если не найдено
        ? 'Condition ' + temp + ' was not found ' && Выдать сообщение
ENDIF
USE

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є               IIF               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает одно  из  двух  выражений   в   зависимости   от   значения
логического выражения
    Синтаксис
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              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Импортирует данные из файла с другим форматом в создаваемую новую базу
данных FoxPro
    Синтаксис
IMPORT FROM 
        [TYPE] FW2 | MOD | PDOX | RPD | SYLK
        | WK1 | WK3 | WKS | WR1 | WRK | XLS
    Замечания
Новая в FoxPro 2.0
    Смотри также
APPEND FROM, COPY TO, EXPORT

    Описание
    Многие пакеты  программного обеспечения сохраняют данные в файлах,
которые не могут быть прямо открыты в FoxPro.  Команда IMPORT  создает
новую базу  данных FoxPro из данных,  сохраненных в файлах с форматом,
не читаемым FoxPro.
    Новая база  данных  создается  с  тем  же именем,  что и файл,  из
которого импортируются данные.  Новому файлу базы данных присваивается
расширение .DBF

    Дополнительные опции

     является  именем  файла,  из которого импортируются данные.
Если вы не задали в имени файла  расширение,  назначается  стандартное
расширение для файла данного типа.

TYPE
    Вы должны задавать тип создаваемого  файла.  Дополнительная  опция
TYPE необязательна,  но  вы  должны  включить  один из следующих типов
создаваемого файла.

FW2
    Файлы FW2, созданные Framework II.

MOD
    Файлы MOD, созданные Microsoft's Multiplan версии 4.01.

PDOX
    Файлы баз данных Borland's Paradox.

RPD
    Файлы RPD, созданные RapidFile.

SYLK
    Файл SYLK    является   форматом   обмена   Символических   Связей
(используемым в Multiplan),  в котором колонки  становятся  полями,  а
строки   становятся   записями.   Файлы  SYLK  не  имеют  стандартного
расширения.

WK1
    Данные из   крупноформатной   таблицы   Lotus   1-2-3.  Колонки  в
крупноформатной  таблице  становятся  полями  в  базе  данных;  строки
таблицы становятся записями в базе данных. Расширение .WK1 назначается
крупномасштабной таблице, созданной Lotus 1-2-3 2.x.

WKS
    Данные из крупноформатной   таблицы   Lotus   1-2-3 1-A.

WR1
    Данные из   крупноформатной   таблицы   Lotus Symphony.  Колонки  в
крупноформатной  таблице  становятся  полями  в  базе  данных;  строки
таблицы становятся записями в базе данных. Расширение .WR1 назначается
крупномасштабной таблице, созданной Symphony версии 1.10.

WRK
    Данные из   крупноформатной   таблицы   Lotus Symphony.  Колонки  в
крупноформатной  таблице  становятся  полями  в  базе  данных;  строки
таблицы становятся записями в базе данных. Расширение .WRK назначается
крупномасштабной таблице, созданной Symphony версии 1.01.

XLS
    Данные из крупноформатной  таблицы  Exceel  версии  2.  Колонки  в
крупноформатной  таблице  становятся  полями  в  базе  данных;  строки
таблицы становятся записями в базе данных. Расширение .XLS назначается
крупномасштабной таблице, созданной Exceel.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              INDEX              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Создание индексного файла для упорядочения базы данных.
    Синтаксис
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  TALK,  SET  UNIQUE,  SORT, USE

    Описание
    Команда INDEX используется для создания индексного файла или  тега
для  текущей  выбранной  базы данных.  База данных,  в которой имеется
индексный файл,  доступна и отображается  в  порядке,  определенном  в
индексном выражении  ,  пока  установлено  упорядочение по этому
индексу. Физический  порядок записей базы данных не изменяется.
    Если установлен  режим  SET  TALK  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.

    Индексный порядок и обновление
    Только один  индексный  файл  (главный  индексный  файл)  или  тег
(главный тег) управляет порядком доступа и представления базы  данных.
Некоторые команды  (например,  SEEK) используют главный индексный файл
или тег для поиска  записи.  Однако,  при  изменениях  в  базе  данных
обновляются все  открытые  индексные  файлы  .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  expression  contain aliases
fields" ("Внимание:  Индексное выражение содержит поля с псевдонимом")
выдается, если   включенному   вами   в   индексное   выражение   полю
предшествует псевдоним  базы  данных  или   буква   рабочей   области.
Опция FOR   будет   оптимизирована  Rushmore,  если  включены  поля  с
псевдонимом. Однако, мы все же рекомендуем избегать применения полей с
псевдонимом при создании индексов.  Существуют различные случаи, когда
различные псевдонимы автоматически назначаются базам данных  (USE  ...
AGAIN), запросы  SQL  и  т.  д.).  В этих случаях индекс не может быть
правильно использован или модифицирован.  Более подробную информацию о
Rushmore можно  найти  в главе Оптимизация ваших прикладных программ в
"Руководстве разработчика" (Developer's Guide) по системе FoxPro.
    Если вы попытаетесь создать индекс с ключом переменной длины, ключ
будет дополнен пробелами.  Переменная длина ключа не поддерживается  в
FoxPro.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

CLOSE ALL
USE customer
INDEX ON company TO complist
51 records indexed

    В этом  примере  открывается  база  данных  с   именем   CUSTOMER.
Создается индексный файл с именем COMPLIST.  Этот индексный файл будет
представлять и обрабатывать записи в алфавитном порядке поля COMPANY.

CLOSE ALL
USE customer
INDEX ON SUBSTR(city,1,5) + SUBSTR(company,1,6) TO citycomp
51 records indexed

    Снова открывается  база  данных  с  именем   CUSTOMER.   Создается
индексный файл  CITYCOMP из подстроки первых пяти символов поля CITY и
первых шести символов поля COMPANY.  Когда этот индексный  файл  будет
использоваться, файл  базы  данных  будет  представлен  одновременно в
порядке CITY и COMPANY.

CLOSE ALL
USE payments
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 company TAG company OF custcdx
INDEX ON taxrate TAG taxrate OF custcdx DESCENDING

    В этом  примере  создаются  индексные  теги.  Первый  тег является
структурным индексным тегом  для  ADDRESS1.  Второй  тег  создается  в
неструктурированном индексном  файле  с именем CUSTCDX.  Последний тег
также создается в неструктурном индексном файле CUSTCDX,  и  этот  тег
создается в убывающем порядке.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              INKEY              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает целое значение,  соответствующее нажатию клавиши или щелчку
мыши
    Синтаксис
INKEY([[] [, ]])
    Параметры
  Число секунд,  в течение которых INKEY  будет  ожидать нажатие
клавиши или щелчок мыши
  Если S, INKEY показывает курсор
        Если H, INKEY скрывает курсор
        Если M, INKEY определяет щелчок или нажатие клавиши
    Возвращаемый тип
Численный
    Смотри также
_DBLCLICK, ON KEY,  LASTKEY(),  READKEY(),  SET CURSOR, SET TYPEAHEAD,
SYS(2002)

    Описание
    Функция INKEY() возвращает целочисленное значение, соответствующее
нажатой клавише. Если никакая клавиша не нажата, возвращается 0. Когда
в буфере опережающего ввода с клавиатуры существует несколько  клавиш,
возвращается значение первой введенной в буфер клавиши.

    Параметры

    Функция INKEY()   использует  необязательное  численное  выражение
,  которое указывает,  в течение скольких секунд  INKEY()  будет
ожидать нажатие клавиши. В том случае, если функция INKEY() вызывается
без  этого  аргумента,  она  немедленно  возвращает  значение  нажатой
клавиши.  Если  с  выражение    равно  0,  функция INKEY() будет
неопределенно долго ожидать нажатия клавиши.


    Используйте  для того,  чтобы показать или скрыть курсор или
для проверки щелчка мыши.  Для того,  чтобы показать курсор,  включите
символ S в .  Для того, чтобы скрыть курсор, включите символ H в
. Если в  включены и S,  и H, последний символ в выражении
 имеет приоритет.  По умолчанию,  курсор показывается. Вы можете
также включить или выключить курсор с помощью команд SYS(2002)  и  SET
CURSOR.
    По умолчанию,  INKEY() не определяет щелчок мыши.  Для определения
щелчка мыши включите символ M в .  Если M используется в ,
функция INKEY() будет возвращать значение 151  для  одинарного  щелчка
мыши. Для  проверки  двойного  щелчка  обратитесь  ко  второму примеру
программы, приведенному ниже.
    Для проверки  щелчка мыши и показа курсора используйте пару M и S.
Для проверки щелчка мыши и скрывания курсора используйте пару H и M.
    Символы в выражении ,  отличные от H,  M и S,  игнорируются.
Если  используется без  аргумента  времени  ,  разделяющая
запятая не должна использоваться.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

SET TALK 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 mzip
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 'Zip: '      GET mzip
@ 1,14 SAY ''
STORE INKEY(20, 'M') TO mkey
IF mkey = 0
        DEACTIVATE WINDOW menter
        CLEAR GETS
        CLOSE ALL
ELSE
        IF mkey # 151
                KEYBOARD CHR(mkey)
        ENDIF
        READ
        DEACTIVATE WINDOW menter
ENDIF

    В приведенном выше примере программы  система  показывает  окно  и
поля ввода  и ждет 20 секунд ввода с клавиатуры.  Если не было нажатия
клавиш и щелчка мыши, вы возвращаетесь в Командное окно.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

*** Пример определения щелчка мыши и нажатия клавиши ***
*** Установка среды программы ***
SET TALK 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 press the Escape key to quit'
inval1 = 0  && Инициализация переменной памяти для значения INKEY()
*** Главный программный цикл ***
DO WHILE .T.
   inval1 = INKEY(.06,'HM') && Считать  INKEY(), скрыть курсор,
                            && проверка; мышь
   IF inval1 = 0            && Не было нажатий клавиш или мыши
      LOOP
   ENDIF
   IF inval1 = 27           && Нажата клавиши Escape, выход из
                            && главного программного цикла
      EXIT
   ENDIF
  IF inval1 = 151          && Однократный щелчок мыши
      row = MROW()            && Считать позицию указателя мыши
      col = MCOL()
      timelimit = SECONDS() + _DBLCLICK && Время двойного щелчка
      inval2 = 0
      *** Проверка щелчка мыши и указателя мыши внутри окна ***
      DO WHILE SECONDS() < timelimit
         inval2 = INKEY('HM')
         *** двойной щелчок мыши
         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) && Удовлетворительное
                                              && значение CHR()
     CLEAR
     @ 7,18 SAY 'Character typed:'
     ?? ' ' + CHR(inval1) + ', ASCII code ' + ALLTRIM(STR(inval1))
  ENDIF
ENDDO          End of Main loop
*** Восстановить исходную среду ***
SET TALK ON
SET ESCAPE ON
CLEAR WINDOWS

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Значение, возвращаемое INKEY()
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Клавиша Одна  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
p       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
z       122   90     26     44
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
INS     22    48     -      -
HOME    1     55     29     -
DEL     7     46     -      -
END     6     49     23     -
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
PGUP    18    57     31     -
PGDN    3     51     30     -
UP      5     56     -      -
RIGHT   4     54     2      -
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
LEFT    19    52     26     -
DOWN    24    50     -      -
ESCAPE  27    27     27     -
ENTER   13    13     10     -
BSPACE  127   127    127    -
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             INLIST              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Определяет, содержится ли выражение в последовательности выражений
    Синтаксис
INLIST(, [,  ... ])
    Параметры
                 Выражение для поиска
[,  ...]  Список исследуемых выражений
    Возвращаемый тип
Логический
    Смотри также
BETWEEN()

    Описание
    Эта функция    определяет,    содержится    ли     выражение     в
последовательности  выражений.  Функция INLIST() возвращает логическое
значение "истинно" (.T.),  если  содержится в списке выражений.
Если выражение   не   содержится   в  списке  выражений,  возвращается
логическое значение "ложно" (.F.).
    Все выражения   должны   быть   выражениями    одинакового    типа
(символьные, численные, логические или даты).

    Параметры

     является выражением, которое ищется в списке выражений.

, , ...
    ,  и т.  д.  является исследуемым списком выражений.
Вы должны включить в список как минимум одно выражение ().

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    Функция INLIST()  определяет  к  какому  кварталу  года  относится
текущий месяц.  Текущий  месяц сохраняется в переменной MONTH.  Каждое
утверждение CASE  использует  функцию  INLIST()  для  проверки   того,
имеется ли  содержание  переменной  MONTH  в  списке названий месяцев.
Соответствующий квартал сохраняется в переменной REPORTTITLE.

SET TALK ON
STORE CMONTH(DATE()) TO month
DO CASE
        CASE INLIST(month,'January','February','March')
                STORE 'First Quarter' TO reportitle
        CASE INLIST(month,'April','May','June')
                STORE 'Second Quarter' TO reportitle
        CASE INLIST(month,'July','August','September')
                STORE 'Third Quarter' TO reportitle
        OTHERWISE
                STORE 'Fourth Quarter' TO reportitle
ENDCASE

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              INPUT              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Ввод данных в переменную в памяти
    Синтаксис
INPUT [] TO 
    Замечание
Используется для  совместимости  с  предыдущими версиями - Используйте
команду @ ... SAY/GET
    Смотри также
@ ... SAY/GET, READ, WAIT

    Описание
    Команда INPUT   позволяет   вам   ввести  данные  с  клавиатуры  в
переменную в памяти .
    Команда ACCEPT   подобна   команде   INPUT.   ACCEPT   не  требует
ограничения символьных строк и  создает  переменные  в  памяти  только
символьного типа.

    Дополнительные опции

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


     является переменной в памяти, в которую вводятся данные с
клавиатуры. Если переменная не существует, команда INPUT создаст ее.
    Тип вводимого выражения соответствует типу создаваемой  переменной
.  Если  вы  вводите  численную  величину,  то  будет  создана
численная переменная;  если вы вводите символьную строку,  то то будет
создана  переменная  типа  символьная  строка  и  т.д.  Если  вводится
символьная строка,  то  она  должна  быть  ограничена  одинарными  или
двойными кавычками или квадратными скобками.  Численный ввод не должен
ограничиваться.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

INPUT to mnum_exp
* Вводится значение 38
? mnum_exp

38

INPUT 'Enter company: ' TO mcompany

Enter company: 'Fox Software'

? mcompany

Fox Software

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             INSERT              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Вставляет новую запись в базу данных
    Синтаксис
INSERT [BEFORE] [BLANK]
    Замечание
Используется для  совместимости  с  предыдущими версиями - Используйте
команду APPEND
    Смотри также
APPEND, CHANGE, EDIT, SET CARRY

    Описание
    Команда INSERT размещает новую запись  в  текущей  выбранной  базе
данных  сразу  после  текущей записи.  Затем команда INSERT отображает
новую запись на экране для редактирования.
    Если файл индексирован, INSERT работает подобно команде APPEND.

    Внимание!!!
    Команда INSERT  не  рекомендуется  для  использования  с  большими
базами данных,  так  как  вставка  близко  к началу базы данных влечет
перезапись почти каждой записи. Это может занять много времени. Вместо
этой команды используйте APPEND.

    Дополнительные опции
BEFORE
    Команда INSERT  BEFORE  размещает новую запись в текущей выбранной
базе  данных  сразу  перед  текущей  записью.   Затем   новая   строка
отображается  на экране для редактирования.  Данные могут быть введены
только во вновь вставленную запись.

BLANK
    Команда INSERT  BLANK  вставляет  пустую  запись  перед  или после
текущей записи в зависимости от  того,  включена  ли  опция  BEFORE  в
формат   команды.   Если   вставлена   пустая   строка,  то  окно  для
редактирования не отображается.
    Если команда  CARRY  установлена  в  ON,  а  опция BLANK в команде
INSERT не определена,  то данные,  содержащиеся  в  предыдущей  строке
автоматически вводятся во вставляемую строку.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є          INSERT - SQL           є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Добавляет запись в существующую базу данных
    Синтаксис
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 parts (pno, descript, onhand, onorder, price, 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             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает или устанавливает режим вставки
    Синтаксис
INSMODE([])
    Возвращаемый тип
Логический
    Смотри также
CAPSLOCK(), NUMLOCK(), SYS(2008), SYS(2009)

    Описание
    Эта функция   возвращает  текущее  состояние  режима  вставки  или
устанавливает режим вставки/перезаписи.  Функция возвращает логическое
значение  "истинно"  (.T.)  или  "ложно" (.F.),  основанное на текущей
установке режима вставки.
    Если включен  режим  вставки  (символ  вставляется  перед символом
после курсора),  возвращается .T.. Если режим вставки выключен (символ
заменяет символ после курсора), возвращается .F..

    Параметр

    параметр   может  включаться  для  включения  или выключения
режима вставки.  INSMODE(.T.)  включает  режим  вставки,  INSMODE(.F.)
выключает его.   Возвращается   логическое  значение,  соответствующее
установке режима вставки перед  появлением  команды  INSMODE(.T.)  или
INSMODE(.F.).

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Примеры              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    Здесь приводятся   два   примера,   в  которых  функция  INSMODE()
используется для  включения  режима  вставки  и  переключения   режима
вставки в противоположное состояние.

SET TALK ON
=INSMODE(.T.)  && Включить режим вставки
? INSMODE()

=INSMODE(!INSMODE()) && Переключить режим вставки в
                     && противоположное состояние
? INSMODE()

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є               INT               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает целую часть численного выражения
    Синтаксис
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

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             ISALPHA             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает значение "истинно",  если символьное выражение начинается с
буквы.
    Синтаксис
ISALPHA()
    Возвращаемый тип
Логический
    Смотри также
ISLOWER(), ISUPPER(), LOWER(), UPPER()

    Описание
    Функция ISALPHA()   возвращает   логическое   значение,    которое
указывает, начинается  ли  символьное  выражение    с буквенного
символа.  Функция ISALPHA() возвращает значение "истинно" (.T.),  если
первым  символом  являются  буквы  от  a до z или от A до Z;  значение
"ложно" (.F.) возвращается в том случае,  если выражение не начинается
с одного из этих символов.

    Параметр

     задает  символьное  выражение,  которое  исследует  функция
ISALPHA().

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Примеры              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

CLOSE ALL
USE salesrep
? ISALPHA(soldby)

.T.

DISPLAY soldby

Record# SOLDBY
      1 APS

USE items
? ISALPHA(item)

.F.

DISPLAY item

Record# ITEM
      1 10001D

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             ISCOLOR             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает значение  "истинно",  если ваша система способна отображать
цвет.
    Синтаксис
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             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает значение "истинно",  если символьное выражение начинается с
числа.
    Синтаксис
ISDIGIT()
    Возвращаемый тип
Логический
    Смотри также
ISALPHA()

    Описание
    Функция ISDIGIT()   возвращает   логическое   значение,    которое
указывает,  начинается ли символьное выражение  с числа. Функция
ISDIGIT() возвращает значение "истинно" (.T.),  если  первым  символом
является  число  (0-9);  значение  "ложно"  (.F.)  возвращается  в том
случае, если выражение не начинается с одного из этих чисел.

    Параметр

     задает  символьное  выражение,  которое  исследует  функция
ISDIGIT().

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

CLEAR
SET TALK ON
STORE SPACE(1) TO item
@ 10,10 GET item SIZE 1,40
READ

IF NOT ISALPHA(item) AND (NOT ISDIGIT(item))
        ? 'First character must be digit or alphabetic'
ENDIF

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             ISLOWER             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает значение "истинно",  если символьное выражение начинается с
буквы в нижнем регистре.
    Синтаксис
ISLOWER()
    Возвращаемый тип
Логический
    Смотри также
ISALPHA(), ISUPPER(), LOWER(), UPPER()

    Описание
    Функция ISLOWER()    возвращает   логическое   значение,   которое
указывает,  начинается ли символьное  выражение    с  буквенного
символа  в  нижнем  регистре.  Функция  ISLOWER()  возвращает значение
"истинно" (.T.),  если первым символом  являются  буквы  от  a  до  z;
значение  "ложно"  (.F.) возвращается в том случае,  если выражение не
начинается с одного из этих символов.
    Все символы после первого символа игнорируются функцией ISLOWER().

    Параметр

     задает  символьное  выражение,  которое  исследует  функция
ISLOWER().

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Примеры              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

? ISLOWER('perrysburg')

.T.

? ISLOWER('Perrysburg')

.F.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             ISUPPER             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает значение "истинно",  если символьное выражение начинается с
буквы в верхнем регистре.
    Синтаксис
ISUPPER()
    Возвращаемый тип
Логический
    Смотри также
ISALPHA(), ISLOWER(), LOWER(), UPPER()

    Описание
    Функция ISUPPER()   возвращает   логическое   значение,    которое
указывает,  начинается  ли  символьное  выражение   с буквенного
символа в верхнем  регистре.  Функция  ISUPPER()  возвращает  значение
"истинно"  (.T.),  если  первым  символом  являются  буквы  от A до Z;
значение "ложно" (.F.) возвращается в том случае,  если  выражение  не
начинается с одного из этих символов.
    Все символы после первого символа игнорируются функцией ISUPPER().

    Параметр

     задает  символьное  выражение,  которое  исследует  функция
ISUPPER().

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Примеры              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

? ISUPPER('Ready?')

.T.

? ISUPPER('ready?')

.F.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              JOIN               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Объединяет две базы данных
    Синтаксис
JOIN WITH  | 
        TO 
        FOR 
        [FIELDS ]
        [NOOPTIMIZE]
    Замечание
Используется для  совместимости  с  предыдущими версиями - Используйте
команду SELECT - SQL
    Смотри также
SET FIELDS, SET RELATION

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

    Внимание!!!
    Время выполнения  команды  очень  сильно зависит от размера файлов
сливаемых баз данных.  Возможно превышение доступного пространства  на
диске при  использовании  команды JOIN,  даже если размеры двух файлов
баз данных являются приемлемыми.

    Дополнительные опции
 | 
    Номер рабочей области  или псевдоним базы данных .

TO 
    Имя базы данных, создаваемой из сливаемых баз данных.

FOR 
    Команда JOIN вычисляет выражение  в операторе FOR для каждой
записи. Если выражение  истинно, то запись переписывается в файл
новой базы данных.  Команда JOIN переходит к следующей записи  текущей
базы данных и повторяет процедуру.
    Rushmore будет  оптимизировать  запрос  JOIN  FOR,   если   
является   оптимизируемым   выражением.  Для  повышения  эффективности
используйте   оптимизируемые   выражения   в   опции    FOR.Выражения,
оптимизируемые  Rushmore,  рассматриваются  в  главе Оптимизация ваших
прикладных программ в "Руководстве разработчика"  (Developre's  Guide)
по системе FoxPro.

FIELDS 
    Вы можете включить список полей,  включаемых  в  новый  файл  базы
данных, определив  его  в  опции  FIELDS  и списке полей .
Список полей в опции FIELDS может включать поля как  из  текущей  базы
данных, так и из базы данных с именем, определенным псевдонимом.

NOOPTIMIZE
    Для блокировки  оптимизации  Rushmore   команды   JOIN,   включите
NOOPTIMIZE.  Более  подробную  информацию  о  NOOPTIMIZE можно найти в
описании команды SET OPTIMIZE в этом руководстве и в описании Rushmore
в   главе   Оптимизация   ваших  прикладных  программ  в  "Руководстве
разработчика" (Developre'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 WITH invoice TO custinv FOR customer.cust_id = invoice.cust_id;
        FIELDS customer.cust_id, customer.company, invoice.invoice
USE custinv
DISPLAY STRUCTURE

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є               KEY               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает ключевое выражение для индексного файла
    Синтаксис
KEY([<.cdx file>,] [,  | ])
    Параметры
  Имя составного индексного файла .CDX.
     Указывает,  какое  индексное  выражение  нужно получить из
            открытого индексного файла
     Номер рабочей области базы данных
     Псевдоним базы данных
    Возвращаемый тип
Символьный
    Замечания
Расширена в FoxPro 2.0: Поддерживает составные индексы
    Смотри также
INDEX, REINDEX,  SET INDEX,  SYS(14), USE

    Описание
    Функция KEY()  возвращает  индексное   выражение   для   открытого
индексного файла.  Индексное выражение задается,  когда индексный файл
создается командой INDEX.  Индексное выражение  определяет,  как  база
данных будет доступна и как она будет представляться,  когда индексный
файл будет открыт как главный управляющий индексный файл.
    Более подробную информацию о создании индексных файлов и индексных
выражений можно найти в описании команды  INDEX  в  этом  руководстве.
Функция KEY() подобна функции SYS(14).

    Параметры

    Функция KEY()  может  использоваться  для  того,  чтобы возвратить
индексные ключевые выражения для тегов в  многокомпонентных  составных
индексных файлах.   Составной   индексный   файл  может  быть  сложным
структурным файлом,  автоматически открывающимся с файлом базы данных,
или независимым составным индексным файлом.


    Обе команды USE и SET INDEX поддерживают список индексных  файлов,
который позволяет  вам  открывать  индексные файлы для базы данных.  В
список индексных    файлов    можно    включать    любые    комбинации
однокомпонентных индексных   файлов   .IDX,  сложных  структурных  или
независимых составных индексных файлов.
    Численное выражение   указывает,  какое индексное выражение
нужно возвратить  из  открытых   индексных   файлов.   Функция   KEY()
возвращает индексные   выражения   из   открытых  индексных  файлов  в
следующем порядке:
    - Прежде     всего    возвращаются    индексные    выражения    из
однокомпонентных индексных  файлов  .IDX  (если  есть  такие  открытые
файлы). Порядок, в котором однокомпонентные индексные файлы включены в
USE или  SET  INDEX,   определяет   порядок   возвращаемых   индексных
выражений.
    - Следующими возвращаются индексные выражения для каждого  тега  в
сложном структурном   индексе   (   если  он  представлен).  Индексные
выражения возвращаются из тегов  в  том  же  порядке,  что  и  порядок
создания тегов в структурном индексе.
    - Последними возвращаются индексные выражения для каждого тега  во
всех  открытых  независимых  составных  индексов.  Индексные выражения
возвращаются из тегов в том же порядке, что и порядок создания тегов в
независимых составных индексах.
    Если  больше числа открытых однокомпонентных .IDX файлов  и
тегов сложного   структурного   и   независимых   составных  индексов,
возвращается пустая строка.

 | 
    Если вы  не  задали  рабочую  область или псевдоним,  возвращается
индексное выражение из индексного файла,  открытого для базы данных  в
текущей  рабочей  области.  Вы  можете получить индексные выражения из
индексного файла,  открытого в другой  рабочей  области,  задав  номер
рабочей области  или псевдоним базы данных .
    Если нет базы данных с заданным  псевдонимом,  выдается  сообщение
"Alias not found" ("Псевдоним не найден").

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

CLEAR
CLOSE ALL
USE customer
INDEX ON cust_id TO custid  &&  .IDX file
INDEX ON company TAG custcomp && Тег сложного структурного индекса
INDEX ON contact TAG contact OF custcont && Тег составного индекса

SET INDEX TO custcont, custid

?KEY(1)

CUST_ID

?KEY(2)

COMPANY

?KEY(3)

CONTACT

?KEY(4) && Возвращается пустая строка

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            KEYBOARD             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Помещает данные в буфер клавиатуры
    Синтаксис
KEYBOARD  [PLAIN]
    Смотри также
CHRSAW(), ON KEY LABEL, PLAY MACRO, SET FUNCTION

    Описание
    Команда KEYBOARD позволяет заполнить буфер произвольной символьной
строкой. Данные остаются в буфере до тех пор, пока FoxPro ищет входные
данные.  Затем данные будут считаны из буфера и использованы так,  как
если бы они были введены с клавиатуры.
    Это может   быть   использовано   при  создании  самозапускающихся
демонстрационных систем,  которые показывают те данные,  с которыми вы
работаете.

    Дополнительные опции

    Символьное выражение  заполняет буфер клавиатуры. Символьное
выражение может быть символьной строкой,  меткой клавиши  или  набором
меток клавиш,  или функцией, определенной пользователем (ФОП), которая
возвращает символьное выражение.
    Если    является  меткой  клавиши,  эта  метка  должна  быть
заключена в скобки и кавычки. Например:

KEYBOARD '(CTRL+LEFTARROW)'

    Список меток клавиш можно найти в описании команды ON KEY LABEL  в
этом руководстве.
    Буфер клавиатуры может содержать до 128 нажатий клавиш. Если буфер
клавиатуры полон, лишние нажатия клавиш отбрасываются.

PLAIN
    Если вы определили макрос клавиатуры или имеете  активные  команды
ON  KEY  LABEL,  то  вы можете использовать опцию PLAIN для подавления
назначения  этих  клавиш.  Опция  PLAIN  заполняет  буфер   клавиатуры
символами буквенных клавиш,  а не их назначениями.  Например,  если вы
назначили процедуру для клавиши "A" с помощью команды ON KEY LABEL,  и
"A" включается в выражение , использование опции PLAIN разместит
в буфере клавиатуры букву "A".  Процедура,  назначенная букве  "A"  не
будет выполняться.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

SET TALK OFF
SET SAFETY OFF
STORE SPACE(40) TO mcompany, maddress, mcomments
STORE SPACE(24) TO mcity
STORE SPACE(2) TO mstate
STORE SPACE(10) TO mzip

SELECT 1
USE customer
SET ORDER TO TAG company

DEFINE WINDOW menter FROM 7,10 TO 19,70 PANEL
ACTIVATE WINDOW menter

@ 1,3 SAY 'Company: '   GET mcompany VALID v_cust(TRIM(mcompany))
@ 3,3  SAY 'Address: '  GET maddress
@ 5,3  SAY 'City: '     GET mcity
@ 7,3  SAY 'State: '    GET mstate
@ 7,18 SAY 'Zip: '      GET mzip
@ 9,3  SAY 'Comments: ' GET mcomments
READ

DEACTIVATE WINDOW menter
USE && закрыть базу данных

FUNCTION v_cust
PARAMETER mcomp
SEEK UPPER(mcomp)

IF FOUND()
        KEYBOARD address1 + city + state + zip
ENDIF
RETURN .T.

    В этом  примере  отображается  экран ввода,  и пользователь должен
ввести данные. Если покупатель, введенный пользователем, найден в базе
данных  CUSTOMER,  то  соответствующие  поля автоматически заполняются
необходимыми данными из буфера клавиатуры.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              LABEL              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Создает этикетки,используя базу данных и файл этикеток
    Синтаксис
LABEL [FORM  | ?]
        [ENVIRONMENT]
        [] [FOR ] [WHILE ]
        [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   появляется  без  каких-либо  дополнительных
аргументов,  представляется диалог Открыть файл (Open File) со списком
существующих файлов этикеток для выбора.
    Более подробную информацию о этикетках можно найти в  "Руководстве
по  интерфейсу"  (Interface  Guide)  по  системе FoxPro или в "Началах
работы" (Getting Started) по системе FoxPro.

    Дополнительные опции
FORM 
    Вы можете указать,  какие этикетки  следует  печатать,  с  помощью
имени базы данных описания этикеток  после ключевого слова FORM.

?
    Если вы используете опцию ?,  представляется диалог  Открыть  файл
(Open File) со списком существующих файлов этикеток для выбора.

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


    Вы можете напечатать этикетки для записей,  попадающих  в  область
.  Будут  напечатаны  только  те  записи,  которые  попадают  в
границы, заданные опцией .
    По умолчанию в область действия команды LABEL попадают все записи.

FOR 
    Если включена опция FOR ,  будут напечатаны только  записи,
удовлетворяющие  логическому  условию  .  Включение  опции  FOR
позволяет вам печатать записи, отфильтровывая нежелательные записи.
    Rushmore будет  оптимизировать  запрос  LABEL  FOR,  если  
является оптимизируемым выражением.  Для более эффективного выполнения
используйте   оптимизируемые   выражения   в   опции  FOR.  Выражения,
оптимизируемые  Rushmore,  описываются  в  главе   Оптимизация   ваших
прикладных  программ "Руководства разработчика" (Developer's Guide) по
системе FoxPro.

WHILE 
    Если включена опция WHILE ,  записи будут печататься,  пока
логическое выражение  будет иметь значение "истинно" (.T.).

NOCONSOLE
    Включение опции   NOCONSOLE   подавляет  отображение  этикеток  на
экране, когда этикетки печатаются или посылаются в файл.

NOOPTIMIZE
    Для блокировки   оптимизации   Rushmore  команды  LABEL,  включите
NOOPTIMIZE.  Более подробную информацию о  NOOPTIMIZE  можно  найти  в
описании команды SET OPTIMIZE в этом руководстве и в описании Rushmore
в  главе  Оптимизация  ваших  прикладных   программ   в   "Руководстве
разработчика" (Developre'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.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             LASTKEY             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает значение, соответствующее последней нажатой клавише
    Синтаксис
LASTKEY()
    Возвращаемый тип
Численный
    Смотри также
CHRSAW(), INKEY(), READKEY()

    Описание
    Функция LASTKEY()     возвращает      целочисленное      значение,
соответствующее  последней  нажатой  клавише.  Значение,  возвращаемые
функцией LASTKEY(),  те же,  что  и  значения,  возвращаемые  функцией
INKEY(). Таблицу  с  клавишами  и их значениями можно найти в описании
функции INKEY().

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

CLOSE ALL
SET TALK OFF
USE customer
SCATTER TO temp
DEFINE WINDOW menter FROM 6,10 TO 18,70 PANEL
ACTIVATE WINDOW menter
@ 1,3 SAY 'Customer: ' GET company
@ 3,3 SAY 'Address: ' GET address1
@ 5,3 SAY 'City: '  GET city
@ 7,3 SAY 'State: ' GET state
@ 7,18 SAY 'Zip: ' GET zip
@ 9,18 SAY 'Press  to cancel'
READ
IF LASTKEY() = 27  && Escape key pressed
   GATHER FROM temp
ENDIF
DEACTIVATE WINDOW menter
RELEASE WINDOW menter
CHANGE
USE

    В этом   примере   данные  из  текущей  записи  в  файле  CUSTOMER
размещаются  в  массиве  по  команде   SCATTER.   Затем   пользователю
разрешается редактировать данные поля для текущей записи, и он может в
любое время  нажать  клавишу  Escape,  чтобы  аннулировать  изменения.
Функция  LASTKEY()  проверяет,  был  ли  осуществлен выход из READ при
нажатии клавиши Escape, и в случае наличия подобного выхода возвращает
первоначальные значения в поля данных из массива по команде GATHER.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є               LEFT              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает указанное число символов слева из символьного выражения
    Синтаксис
LEFT(, )
    Параметры
  Символьное выражение, из которого возвращаются символы
  Число возвращаемых символов
    Возвращаемый тип
Численный
    Смотри также
AT(), LTRIM(), RTRIM(), RIGHT(), SUBSTR()

    Описание
    Функция LEFT()  возвращает символы слева из символьного выражения.
Символы из символьного выражения возвращаются, начиная с самого левого
символа, до заданного числа символов.

    Параметры

    Параметр    задает   символьное   выражение,   из   которого
возвращаются символы.   Символьное   выражение      может   быть
символьной строкой, заключенной в кавычки, или переменной в памяти или
элементом массива символьного типа.  Оно может быть также  полем  базы
данных символьного типа или memo полем.


    Параметр  задает число символов,  возвращаемых из символьных
выражений. Если      больше   длины   ,  возвращается  все
символьное выражение.  Если  больше или  равно  0,  возвращается
пустая строка.
    Функция LEFT() идентична функции SUBSTR() с начальной позицией 1.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

? LEFT('Perrysburg, OH', 10)

Perrysburg

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є               LEN               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает длину символьного выражения
    Синтаксис
LEN()
    Возвращаемый тип
Численный
    Смотри также
FSIZE()

    Описание
    Эта  функция  возвращает длину символьного выражения .

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Примеры              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    В приведенном   ниже   примере  длина  поля  базы  данных  CUST_ID
используется  для  запоминания  пробелов  в   переменной   памяти,   и
переменная  памяти  вместе с двумя подсказками отображается при вводе.
Когда программа пригласит вас к вводу,  введите  число  000001.  После
команды  READ  функция  LEN() применяется вновь,  чтобы убедиться,  не
является  ли  переменная  памяти  пустой.  В  случае  наличия   такого
состояния выполняется выход из программы.

SET TALK OFF
CLEAR
USE customer ORDER TAG cust_id
STORE .F. TO mexit
DO WHILE 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
        SEEK mcust_id
        IF FOUND()
           @ 20,10 SAY 'Company is '+ company
        ELSE
           @ 20,10 SAY 'No company for customer: ' + mcust_id
        ENDIF
    ENDIF
ENDDO
USE

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              LIKE               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Сравнивает два символьных выражения
    Синтаксис
LIKE(, )
    Возвращаемый тип
Логический
    Смотри также
$, AT(), ATC(), OCCURS(), RAT(), SET COMPATIBLE

    Описание
    Функция LIKE  возвращает  истинное  или  ложное значение,  которое
указывает имеет ли символьный  шаблон    аналогичный  фрагмент,
содержащийся в выражении . Если  соответствует выражению
, функция  LIKE()  возвращает  значение  "истинно"   (.T.),   в
противном случае  возвращается значение "ложно" (.F.).  Функция LIKE()
чувствительна к  регистру  букв,  но  метасимволы  (* и ?) в выражении
 будут соответствовать или  символам  в  нижнем  регистре,  или
символам в верхнем регистре.
    То, как  функция  LIKE()  обрабатывает значения  и ,
выполняя поиск, зависит от текущего назначения команды SET COMPATIBLE.
Если  SET  COMPATIBLE  подключена,  выражения   и  будут
иметь все конечные пробелы удаленными,  если SET COMPATIBLE выключена,
выражения   и  будут обрабатываться "как есть",  включая
конечные пробелы.

    Параметры

    Параметр  является символьным шаблоном.  Метасимволы * и  ?
могут включаться в .  Знак вопроса заменяется одним символом, а
звездочка заменяется любым числом  символов.  Вы  можете  использовать
любое число метасимволов в любой позиции в выражении .


    Функция LIKE()  исследует  выражение      на   соответствие
символьному шаблону .

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    В этом  примере  список  всех ящиков для бумаг из базы данных ITEM
выведен на экран с уменьшением цены ( на 10 процентов меньше).

CLOSE ALL
USE items
? '10% Off ALL File Cabinets!'
SCAN FOR LIKE('*ile cabinet*', descript)
        ? descript + '  PRICE = $' + LTRIM(STR(price - (price * .10)))
ENDSCAN

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             LINENO              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает относительный номер строки выполняющейся программы
    Синтаксис
LINENO([1])
    Возвращаемый тип
Численный
    Смотри также
ERROR(), MESSAGE(), PROGRAM(), SYS(16)

    Описание
    Эта функция возвращает номер строки, исполняющейся в данный момент
в  программе.  Номер  строки  отсчитывается  от  начала файла.  Строки
комментариев,  пустые строки  и  строки,  содержащие  только  пробелы,
включаются в число посчитанных строк. Если программа приостановилась в
процессе выполнения,  функция   LINENO()   возвращает   номер   строки
программы, в которой произошел приостанов.
    По умолчанию,  номера  строк  возвращаются   относительно   начала
главной программы.    Если    процедура   вызвана,   нумерация   строк
продолжается от начала вызывающей программы.

    Параметр
1
    Для того,  чтобы  возвратить  номер  строки  относительно   начала
текущей программы или процедуры, включите необязательный аргумент 1.
    Функция LINENO()  полезна  при   отладке   программ.   Вы   можете
установить  запланированную остановку работающей программы,  определив
номер строки, в которой это должно произойти:

LINENO() = 

Окне отладки,  и в тот момент,  когда значение LINENO()  станет  равно
, исполнение программы будет приостановлено.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є            Пример               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ

    Здесь приводится   пример   (часть)  простой  процедуры  обработки
ошибок.

ON ERROR DO bug_proc WITH LINENO()

*** обработчик ошибок Bug_Proc ***

PROCEDURE bug_proc
PARAMETERS badline
DEACTIVATE WINDOW ALL
@ 23,10 SAY 'Error occurred at line:' + STR(badline)
SUSPEND

* другие операторы
    


?????? ???????????