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



 

Часть 4

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              ALEN               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает число элементов, строк или столбцов в массиве.
    Синтаксис
ALEN( [, ])
    Параметры
 одно- или двумерный массив
  Если 0, то ALEN возвращает число элементов
        Если 1, то ALEN возвращает число строк
        Если 2, то ALEN возвращает число столбцов
    Тип возвращаемого значения
Числовой
    Замечания
Новая для FoxPro 2.0
    Смотри также
ADEL(), ADIR(), AFIELDS(), ASCAN(), AELEMENT(), AINS(),
ASORT(), ASUBSCRIPT(), DIMENSION, STORE

    Описание
    Эта функция возвращает число элементов, строк или столбцов в массиве.

    Параметры
    
     задает имя массива,  информацию о котором возвращает функ-
ция ALEN().

    
    Вы можете  включать  в эту функцию необязательный аргумент ,
равный 0,  1 или 2.  Если вы не задали этот аргумент,  то по умолчанию
его значение принимается равным 0.  Явно задавая 0,  вы опять получите
число элементов в массиве .
    Если вы  задали  1,  то  ALEN()  возвратит  число  строк в массиве
. Если массив был создан  с  одним  индексом  (одномерный),  то
ALEN() возвратит этот индекс. Если массив был создан с двумя индексами
(двумерный), то ALEN() возвратит первый индекс.
    Если вы  задали  2,  то  ALEN() возвратит число столбцов в массиве
.  Если массив был создан с  одним  индексом  (одномерный),  то
ALEN() возвратит 0,  т.е. нет столбцов. Если массив был создан с двумя
индексами (двумерный), то ALEN() возвратит второй индекс.

    Примеры
DIMENSION x(5)
DIMENSION y(3,7)

? ALEN(x)
5
? ALEN(x,0)
5
? ALEN(x,1)
5
? ALEN(x,2)
0
? ALEN(y)
21
? ALEN(y,1)
3
? ALEN(y,2)
7

SELECT DISTINCT state FROM customers INTO ARRAY states
? ALEN(states)
6
    В следующем примере из базы данных CUSTOMER  в  массив  переменных
памяти COMPANIES копируется поле COMPANY. Массив COMPANIES инициализи-
руется с одной строкой и одним столбцом. ALEN() возвращает число строк
базы данных,  и поэтому COMPANIES может быть динамически перераспреде-
лен, если это необходимо, в соответствии с числом этих компаний. Затем
командой COPY TO ARRAY поле COMPANY копируется в массив COMPANIES.
IF USED('customer')
        SELECT customer
ELSE
        USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?')
ENDIF

DIMENSION companies(1,1)
COUNT TO m.count

IF m.count > ALEN(companies)
        *** Массив слишком мал, надо увеличить ***
        DIMENSION companies(m.count,1)
ENDIF

COPY TO ARRAY companies FIELD Company

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              ALIAS              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает псевдоним заданной рабочей области
    Синтаксис
ALIAS([])
    Тип возвращаемого значения
Символьный
    Смотри также
DBF(), SELECT()

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

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

    Примеры
CLOSE ALL
SELECT A
USE states
SELECT B
USE customer ALIAS cust
? ALIAS()
CUST
? ALIAS('states')
STATES

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             ALLTRIM             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает строку символов с удаленными ведущими и завершающими пробе-
лами.
    Синтаксис
ALLTRIM()
    Тип возвращаемого значения
Символьный
    Смотри также
LTRIM(), RTRIM(), TRIM()

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

    Параметр 
    Этот параметр задает строку, из которой будут удаляться пробелы.

    Пример
USE customer
@ 5,0 SAY 'Name of Contact person: ' GET person DEFAULT SPACE(20)
LOCATE FOR contact = ALLTRIM(person)
READ
? RECNO()
24
DISPLAY contact, company
Record# CONTACT  COMPANY
   24    Mike Tine  DataTach, Inc.
    В этом примере в случае, если пользователь должен включать пробелы
перед именем лица, вступающего в контакт (здесь это имя Mike Tine) или
после него, функция ALLTRIM, будет удалять их, гарантируя, что команда
LOCATE соответствующим образом сочетается с именем.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             APPEND              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Добавляет записи к выбранной базе данных
    Синтаксис
APPEND [BLANK]
    Смотри также
APPEND FROM ARRAY, BROWSE, CHANGE, EDIT, REPLACE, SET CARRY

    Описание
    Существует две формы команды APPEND.  Обе эти формы выполняют  до-
бавление  новых  записей в конец выбранной на текущий момент базы дан-
ных.  Если вы выдали команду APPEND или APPEND BLANK, а файл базы дан-
ных к этому моменту открыт не был,  то появляееся диалоговое поле Open
File (открыть файл).  Выберите базу данных, к которой вы желаете доба-
вить записи.
    Команда APPEND открывает окно редактирования,  так что  вы  можете
вводить в новые записи данные. Любые индексы, открытые во время выпол-
нения команды APPEND, по мере добавления новых записей обновляются.

    Опция BLANK
    Команда APPEND  BLANK добавляет в конец выбранной базы данных одну
пустую запись.  Окно редактирования при этом не открывается. Вы можете
отредактировать  новую  запись  при  помощи команд BROWSE,  CHANGE или
EDIT.  Любые индексы,  открытые в момент выполнения APPEND BLANK,  при
добавлении новых записей обновляются.
    При добавлении пустой записи выполняется инициализация каждого по-
ля этой записи пробелами.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є           APPEND FROM           є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Добавление записей в конец базы данных из другого файла
    Синтаксис
APPEND FROM  | ?
        [FIELDS ]
        [FOR ]
        [TYPE] [DELIMITED [WITH TAB | WITH  | WITH BLANK]
        | DIF | FW2 | MOD | PDOX | RPD | SDF | SYLK
        | WK1 | WK3 | WKS | WR1 | WRK | XLS ]
    Замечания
Расширена в FoxPro 2.0 :  Поддерживаются дополнительные  типы  файлов,
базы данных могут быть открыты в других рабочих областях,  поддержива-
ется дополнительные форматы данных из ASCII файлов.
    Смотри также
COPY FILE, COPY TO, IMPORT, EXPORT

    Описание
    Данная форма  команды APPEND добавляет в конец выбранной базы дан-
ных записи из .
    Предполагается, что    является  файлом базы данных FoxPro с
расширением .DBF.  Если , из которого должны добавляться записи,
не  имеет  расширения  .DBF,  то вы должны явно задать его расширение.
Если этот файл не является файлом базы данных FoxPro, то вы должны за-
дать тип TYPE файла, из которого производится добавление.
    Если вы добавляете из файла базы данных FoxPro,  то база данных из
которой  производится  добавление  может быть открыта в другой рабочей
области. Можно производить добавление и без открытия базы  данных,  но
при этом файл должен быть доступен на диске.
    Если вы используете  предложение  ?,  вместо  того,  чтобы  задать
 в явном виде, то появится диалоговое поле Open File, и вы полу-
чите возможность выбрать файл .

    Опции
    FIELDS 
    Команда APPEND FROM поддерживает необязательно  задаваемый  список
полей  .  Такая  форма команды позволяет добавлять к базе
данных только поля с указанными в нем именами.

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

    TYPE
    Это предложение должно использоваться,  если FROM-файл не является
базой данных FoxPro.  Предложение TYPE служит для задания других типов
файлов.  Вы  можете использовать команду APPEND FROM с широким набором
различных типов файлов,  включая  разделенные  специальными  символами
текстовые файлы ASCII.
    При добавлении из файлов, не имеющих обычное расширение по умолча-
нию, вы должны задавать расширение файла явно. Например, для электрон-
ных таблиц Lotus 1-2-3 версий 2.х обычно используется файл с  расшире-
нием .WK1.  При добавлении из файла электронной таблицы с расширением,
отличным от .WK1, вы должны явно указывать это расширение.
    Важно !!!
    При добавлении из электронных таблиц,  ее данные должны хранится в
порядке старшинства  строк,  а не в порядке старшинства столбцов.  Это
обеспечивает соответствие  добавляемых  данных   электронной   таблицы
структуре файла базы данных.

    DELIMITED [WITH TAB | WITH  | WITH BLANK]
     Файл типа DELIMITED представляет собой текстовый ASCII-файл,
каждая запись которого заканчивается возвратом каретки и переводом
строки. Поля обычно разделяются запятыми, а символьные поля допол-
нительно берутся в двойные кавычки. Например,
     "555", 9999999, "TELEPHONE"
    Однако, для задания файлов,  которые должны содержать поля, разде-
ляемые не запятыми,  а одним пробелом или  символом  табуляции,  можно
использовать  опции  DELIMITED WITH BLANK или DELIMITED WITH TAB соот-
ветсвенно,  а для указания на то,  что символьные поля разделяются  не
двойными кавычками,  а какими-либо другими символами,  может использо-
ваться опция DELIMITED WITH  (<разделитель>). Для всех фай-
лов DELIMITED предполагается использование расширения .TXT.
    Вы можете импортировать даты из разделенных  файлов,  если  только
они  в  нем находятся в нужном формате.  По умолчанию они имеют формат
'mm/dd/yy'. Позиция столетия не является обязательной - FoxPro при им-
порте  автоматически включает номер столетия.  Если столетие в дате не
задано (например '12/25/91'),  то предполагается  двадцатое  столетие.
Разделителями в дате могут быть любые нечисловые символы,  за исключе-
нием разделителя, разделяющего поля в разделенном файле.
    Даты других форматов могут импортироваться без всяких ограничений,
если их формат соответствует доступному формату даты в SET  DATE.  Для
импорта дат  не  в  формате по умолчанию,  перед использованием APPEND
FROM задайте нужный формат командой SET DATE.  Для проверки успешности
импортирования дат,  используйте функцию CTOD(). Если даты обрабатыва-
ются этой функцией, то они будет импортированы так как нужно.

    DIF
    В случае  DIF файла (Data Interchange Format (Формат Обмена Данны-
ми) используемый VisiCalc) вектора (столбцы) становятся полями, а кор-
тежи (строки) становятся записями. Предполагается, что DIF файлы имеют
расширение .DIF.

    FW2
    FW2 файлы, создаваемые Framework II. Предполагается, что FW2 файлы
имеют расширение .FW2.

    MOD
    MOD файлы,  создаваемые  Multiplan  версии  4.01  фирмы Microsoft.
Предполагается, что MOD файлы имеют расширение .MOD.

    PDOX
    Файлы базы  данных  Paradox  версии 3.5 фирмы Borland могут добав-
лятся в файлы базы данных FoxPro при включении этой опции. Предполага-
ется, что файлы Paradox имеют расширение .DB.

    RPD
    RPD файлы создаются RapidFile версии 1.2.  Предполагается, что RPD
файлы имеют расширение .RPD.

    SDF
    Файл SDF  (System Data Format (Системный Формат Данных)) представ-
ляет собой текстовый ASCII-файл,  в котором все записи имеют  фиксиро-
ванную длину и заканчиваются возвратом каретки и переводом строки. По-
ля не разделяются.  Для файлов формата SDF  предполагается  расширение
.TXT.

    SYLK
    SYLK файлы  имеют  формат  обмена  Symbolic  Link  (используются в
MultiPlan фирмы Microsoft).  При импорте из них столбцы становятся по-
лями, а строки записями. SYLK файлы не имеют расширения по умолчанию.

    WK1
    Эта опция используется при импорте  из  электронных  таблиц  Lotus
1-2-3. В базе данных FoxPro столбцы электронной таблицы становятся по-
лями, а ее строки становятся записями. Для электронных таблиц, создан-
ных Lotus 1-2-3 версии 2.х предполагается расширение .WK1.

    WK3
    Эта опция используется при импорте  из  электронных  таблиц  Lotus
1-2-3. В базе данных FoxPro столбцы электронной таблицы становятся по-
лями, а ее строки становятся записями. Для электронных таблиц, создан-
ных Lotus 1-2-3 версии 3.х предполагается расширение .WK3.

    WKS
    Эта опция используется при импорте  из  электронных  таблиц  Lotus
1-2-3. В базе данных FoxPro столбцы электронной таблицы становятся по-
лями, а ее строки становятся записями. Для электронных таблиц, создан-
ных Lotus 1-2-3 версии 1-A предполагается расширение .WKS.

    WR1
    Эта опция используется при импорте  из  электронных  таблиц  Lotus
Symphony . В базе данных FoxPro столбцы электронной таблицы становятся
полями,  а ее строки становятся записями. Для электронных таблиц, соз-
данных  Lotus  Symphony  версии  1.1 или 1.2 предполагается расширение
.WR1.

    WRK
    Эта опция  используется  при  импорте  из электронных таблиц Lotus
Symphony . В базе данных FoxPro столбцы электронной таблицы становятся
полями,  а ее строки становятся записями. Для электронных таблиц, соз-
данных Lotus Symphony версии 1.0 предполагается расширение .WRК.

    XLS
    Эта опция используется при импорте из электронных таблиц Microsoft
Excel версии 2.0 .  В базе данных FoxPro столбцы  электронной  таблицы
становятся  полями,  а ее строки становятся записями.  Для электронных
таблиц, созданных Excel предполагается расширение .XLS.

    Пример
USE customer
COPY STRUCTURE TO backup
USE backup
APPEND FROM customer FOR state = 'OH'
COPY TO temp TYPE DELIMITED
APPEND FROM temp TYPE DELIMITED
    В данном  примере  открывается база данных CUSTOMER,  ее структура
копируется в файл BACKUP,  и BACKUP открывается для ввода записей. За-
тем FoxPro добавляет в него все записи из базы данных CUSTOMER с STATE
равным 'OH'. Затем эти записи копируются в новый файл типа DELIMITED с
именем TEMP.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є        APPEND FROM ARRAY        є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Добавление к базе данных записей из массива
    Синтаксис
APPEND FROM ARRAY 
        [FOR ]
        [FIELDS ]
    Смотри также
APPEND BLANK, COPY TO ARRAY, DIMENSION, GATHER, SCATTER,

    Описание
    Команда APPEND FROM ARRAY добавляет к выбранной на текущий  момент
базе данных запись из массива переменных памяти.  Поля памяти memo иг-
норируются командой APPEND FROM ARRAY. В сетевой версии FoxPro/LAN ко-
манда APPEND FROM ARRAY блокирует заголовок базы данных до осуществле-
ния добавления записей.

    Опции
    
     - это имя массива,  содержащего копируемые в новую  запись
данные.

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

    FIELDS  (<список полей>)
    Если список полей  включается,  то только  заданные  в
нем поля  базы данных будут обновлены данными из массива.  Первое поле
списка обновляется содержимым первого элемента  массива,  второе  поле
списка содержимым второго элемента массива и т.д.

    Одномерные массивы
    В случае одномерного массива содержимое его первого элемента  ста-
нет первым полем новой добавляемой записи, содержимое второго элемента
станет вторым полем, и так далее.
    В том случае,  если одномерный массив имеет больше элементов,  чем
база данных полей,  то все лишние элементы игнорируются.  Если же база
даннын  имеет больше полей,  чем массив элементов,  то все лишние поля
инициализируются значениями по умолчанию.  В таблице приводятся значе-
ния по умолчанию для различных типов полей:
 Тип поля    Значение по умолчанию
 Символьный  Пробелы
 Числовой    0
 Даты        Пустая дата
 Логический  ложь (.F.)

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

    Соответствие типов данных
    FoxPro способен заполнять поля базы данных даже при несоответствии
типа данных элемента массива и поля базы данных.  В некоторых  случаях
поле заменяется элементом массива, в других, оно инициализируется зна-
чением по умолчанию.  Смотри таблицу значений по  умолчанию  для  поля
каждого типа.
    Следующая таблица иллюстрирует в каких случаях  происходит  замена
при несоответствии типов данных.  "Да" указывает на производимую заме-
ну, "Нет" указывает, что поле инициализируется значением по умолчанию.
  Тип элемента               Тип поля
                 Символьный   Числовой  Даты  Логический
  Символьный        Да          Нет      Нет     Нет
  Числовой          Да          Да       Нет     Да
  Даты              Да          Да       Да      Нет
  Логический        Да          Нет      Нет     Да
    Например, если элемент массива содержит значение логической истины
(.Т.) или лжи (.F.), и соответствующее ему поле в только что добавлен-
ной записи  имеет  символьный тип,  FoxPro заменит это поле на Т или F
соответственно.

    Пример
CLOSE ALL
SET TALK OFF
CLEAR
SELECT 0
USE customer
SCATTER TO custarray BLANK       && Создать пустой массив

FOR count = 1 TO ALEN(custarray) && Число строк в массиве
        @ count, 2 SAY FIELD(count) ;
                GET custarray(count) && Высветить поля и ввести инфор-
                                     && мацию
ENDFOR

READ

IF READKEY() != 12             &&  Если Escape не нажата
        APPEND FROM ARRAY custarray    && Добавить запись из массива
ENDIF
USE
CLEAR
    Данный пример иллюстрирует добавление записи в базу данных. Откры-
вается база данных CUSTOMER и команда SCATTER создает массив CUSTARRAY
с пустыми элементами для каждого поля в базе данных. Цикл FOR ... LOOP
выводит каждое поле. Команда READ активизирует поля GET.
    Если для  выхода  из  редактирования клавиша Escape не нажата,  то
команда APPEND FROM ARRAY добавляет новую запись. После этого происхо-
дит обновление  каждого  поля этой записи информацией из массива пере-
менных памяти CUSARRAY.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є           APPEND MEMO           є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Заполнение поля типа MEMO из файла
    Синтаксис
APPEND MEMO  FROM  [OVERWRITE]
    Смотри также
COPY MEMO

    Описание
    Команда APPEND  MEMO  позволяет выполнять импорт данных из файла в
поле памяти типа MEMO.
    При считывании данных из файла все содержимое файла дописывается к
концу поля памяти типа memo текущей записи.  Если же memo поле не  су-
ществует  или  не  является полем типа memo,  то выдается сообщение об
ошибке. Ошибка также возникает, если не найден указанный .

    Опции
    
    Заполняемое memo поле.

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

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

    Пример
USE Customer
COPY MEMO comments TO test.txt
APPEND MEMO comments FROM test.txt
APPEND MEMO comments FROM test.txt OVERWRITE
    В данном примере содержимое поля памяти COMMENTS копируется в файл
TEST.TXT. Затем содержимое TEST.TXT добавляется к полю памяти. И нако-
нец,  содержимое TEST.TXT используется для замещения текущего содержи-
мого поля памяти.

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

     Описание
    Функция ASC() возвращает код ASCII,  эквивалентный первому символу
в символьном  выражении.  Каждый  символ  имеет  эквивалентный ему код
ASCII, лежащий в пределах от 0 до 256.  Список  ASCII  кодов  и  соот-
ветствующих им   символов   приведен   в   "Руководстве  Разработчика"
("Developer's Guide") и доступен в пункте ASCII Chart.

    Параметр 
    Символьное выражение  задает строку, для первого символа ко-
торой возвращается значение ASCII.  Все символы,  следующие за первым,
игнорируются.

    Примеры
USE Salesrep
? soldby
APS
? ASC(soldby)
65
? ASC("A")
65
? ASC("a")
97

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              ASCAN              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Осуществление поиска выражения в массиве переменных памяти
    Синтаксис
ASCAN(,  [, [, ]])
    Параметры
 массив переменных памяти в котором проводится поиск
  искомое выражение
 элемент, с которого начинается поиск
 число просматриваемых элементов
    Тип возвращаемого значения
Числовой
    Замечания
Новая для FoxPro 2.0
    Смотри также
ACOPY(), ADEL(), ADIR(), AFIELDS(), AELEMENT(), AINS(), ASORT(),
ASUBSCRIPT(), DIMENSION, SET EXACT

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

    Параметры
    ,
    Параметр  определяет имя  массива  в  котором  будет  осущест-
вляться поиск выражения .

    
    По умолчанию  просматривается  весь  массив.  Включение  параметра
 задает  номер  элемента массива,  с которого начинается поиск.
Элемент  включается в поиск.

    
    Параметр   задает  число просматриваемых элементов массива.
Поиск начинается с элемента  и просматриваются   следую-
щих за ним элементов.
    Если необязательные числовые выражения  и  не  зада-
ны, то  поиск  начинается с первого элемента массива и продолжается до
последнего элемента.
    Важно !!!
    Ссылки на элементы двумерных массивов осуществляются двумя  спосо-
бами.  В  первом случае,  используются два индекса,  задающие строку и
столбец в которых  находится  элемент  массива;  во  втором,  задается
единственный  номер элемента.  Эти и другие функции,  манипулирующие с
элементами массивов,  требуют задание номера элемента (в нашем  случае
это  параметры  и ).  Используйте функцию AELEMENT() для
получения номера элемента двумерного массива по его индексам строки  и
столбца.
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є       Пример Программы          є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
*** Выбор или открытие базы данных customer ***
IF USED('customer')
        SELECT customer
ELSE
        USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?')
ENDIF

COUNT TO m.count

*** Определение достаточно большого массива для данных ***
DIMENSION companies[m.count,1]

COPY TO ARRAY companies FIELD company  && Заполнение массива

m.name = 'DataTech Inc.'
m.pos  = ASCAN(companies, m.name)  && Поиск компании

IF m.pos != 0
        *** Компания найдена и удаляется из массива ***
        = ADEL(companies, m.pos)
        m.count = m.count - 1
ENDIF
DISPLAY MEMORY LIKE companies

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              ASIN               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает (в радианах) арксинус числового выражения
    Синтаксис
ASIN()
    Тип возвращаемого значения
Числовой
    Смотри также
RTOD(), SET DECIMALS, SIN()

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

    Параметр 
    Эта тригонометрическая функция возвращает значение arcsin ,
указываемое в радианах и лежащее в интервале от "-пи"/2 до "+пи"/2 (от
-1,57079 до 1,57079). Значение  может изменяться от +1 до -1.
    Вы можете преобразовать угол, возвращаемый функцией ASIN(), в гра-
дусы, используя функцию RTOD(). Число десятичных разрядов, указываемое
в результате, определяется командой SET DECIMALS.

    Примеры
? RTOD(ASIN(0))
0.00
STORE 1 to arcangle
? RTOD(ASIN(arcangle))
90.00
? RTOD(ASIN(SQRT(2)/2))
45.00

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              ASORT              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Сортирует массив переменных памяти в возрастающем и убывающем порядке
    Синтаксис
ASORT( [,  [, [, ]]])
    Параметры
 массив переменных памяти в котором проводится сортировка
 используясь отдельно, задает номер элемента, с которого начи-
        нается сортировка
        используясь вместе с , задает номер строки, с которой
        начинается сортировка
 число элементов или строк для сортировки
 порядок сортировки. 0 - возрастающий, 1 - убывающий.
    Тип возвращаемого значения
Числовой
    Замечания
Новая для FoxPro 2.0
    Смотри также
ACOPY(), ADEL(), ADIR(), AFIELDS(), AELEMENT(), AINS(), ASCAN()

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

    Параметры
    
    Включает имя сортируемого массива.

    
    По умолчанию,  массивы сортируются, начиная с их первого элемента.
Включая необязательное числовое выражение , вы можете самостоя-
тельно задавать номер элемента,  с которого начинать сортировку.  Если
массив одномерный,  то  он  начинает сортироваться,  начиная с 
элемента; элемент с номером    включается  в  сортировку.  Если
массив двумерный,  то   определяет столбец и строку,  в которой
находится начальный элемент сортировки и порядок сортировки строк.
    Важно !!!
    Ссылки на элементы двумерных массивов осуществляются двумя  спосо-
бами.  В  первом случае,  используются два индекса,  задающие строку и
столбец в которых  находится  элемент  массива;  во  втором,  задается
единственный  номер элемента.  Эти и другие функции,  манипулирующие с
элементами массивов,  требуют задание номера элемента (в нашем  случае
это  параметры  и ).  Используйте функцию AELEMENT() для
получения номера элемента двумерного массива по его индексам строки  и
столбца.
    Следующий пример помогает проиллюстрировать, как начальный элемент
 определяет порядок сортировки строк в двумерном массиве.  Соз-
дается маленький массив MARRAY,  который  сортируется  дважды.  Первая
сортировка  начинается  с первого элемента MARRAY - строки сортируются
на основе значений, содержащихся в первом столбце массива. Вторая сор-
тировка  начинается  с четвертого элемента MARRAY - строки сортируются
на основе значений,  содержащихся во втором  столбце  массива.  Первая
сортировка начинается с первой строки.  Вторая,  со второй строки. Для
вывода содержимого массива используйте команду  DISPLAY  MEMORY;  ниже
приводятся таблицы, иллюстрирующие результаты сортировок.
DIMENSION marray(3,2)
marray(1) = 'G'
marray(2) = 'A'
marray(3) = 'C'
marray(4) = 'Z'
marray(5) = 'B'
marray(6) = 'N'
    Массив выглядит следующим образом.
(Строка,Столбец) 1  2
        1        G  A
        2        C  Z
        3        B  N
    Затем массив сортируется функцией ASORT() начиная с  первого  эле-
мента (1,1).  Элементы  первого столбца будут располагаться в порядке,
определяемом перестановкой строк массива.
    Новый порядок будет следующим.
=ASORT(marray,1)
(Строка,Столбец) 1  2
        1        B  N
        2        C  Z
        3        G  A
    Затем массив  сортируется функцией ASORT() начиная со второго эле-
мента (2,2).  Элементы второго столбца будут располагаться в  порядке,
определяемом перестановкой строк массива.  Новый порядок будет следую-
щим.
=ASORT(marray,4)
(Строка,Столбец) 1  2
        1        B  N
        2        G  A
        3        C  Z

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

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

    Пример
    В этом примере из базы данных CUSTOMER в массив переменных  памяти
COMPANIES  копируются  копируются  поля CUST_ID и COMPANY.  Затем этот
массив сортируется на основе значений во  втором  столбце,  начиная  с
четвертой строки (другими словами,  сортируется начиная с 8 элемента).
Затем программа выводит список с элементами,  полученными  из  второго
столбца (наименования компаний) массива COMPANIES.
*** Выбор или открытие базы данных customer ***
IF USED('customer')
        SELECT customer
ELSE
        USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?')
ENDIF

COUNT TO m.count
*** Определение достаточно большого массива для данных ***
DIMENSION companies[m.count,2]

COPY TO ARRAY companies FIELD cust_id,company  && Заполнения массива

*** Заметим: первые три строки не сортируются ***

= ASORT(companies, AELEMENT(companies,4,2))  && Сортировка массива

@ 5,30 SAY 'List of Companies:'
@ 7,30 GET m.choice ;
        FROM companies ;
        RANGE 2 ;
        SIZE 10,30 ;
        DEFAULT 1

READ  && Вывод и GET данных отсортированных компаний

CLEAR
USE
ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є           ASUBSCRIPT            є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Получает индекс строки или столбца элемента по его номеру
    Синтаксис
ASUBSCRIPT(, , )
    Параметры
 одно- или двумерный массив
 номер элемента
 если 1, то ASUBSCRIPT() возвращает индекс строки
        если 2, то ASUBSCRIPT() возвращает индекс столбца
    Тип возвращаемого значения
Числовой
    Замечания
Новая для FoxPro 2.0
    Смотри также
ADEL(), ACOPY(), ADIR(), AFIELDS(), AINS(), ASCAN(),
ALEN(), ASORT(), DIMENSION, DISPLAY MEMORY

    Описание
    Ссылки на  элементы  двумерных массивов переменных памяти осущест-
вляются двумя способами.  В первом случае,  используются два  индекса,
задающие строку и столбец в которых находится элемент массива; во вто-
ром, задается единственный номер элемента.  Эта функция возвращает ин-
декс строки или столбца элемента по номеру элемента.
    В следующем примере создается массив 2х3 (2 строки и  3  столбца).
Функция DISPLAY  MEMORY  выводит  содержимое массива в порядке номеров
элементов.

    Пример
DIMENSION x(2,3)
DISPLAY MEMORY LIKE x

X       Pub   A
(   1,   1)    L   .F.  (элемент номер 1)
(   1,   2)    L   .F.  (элемент номер 2)
(   1,   3)    L   .F.  (элемент номер 3)
(   2,   1)    L   .F.  (элемент номер 4)
(   2,   2)    L   .F.  (элемент номер 5)
(   2,   3)    L   .F.  (элемент номер 6)
    Элементы могут  адресоваться  как по их индексам,  так и по номеру
элемента - команды STORE 'INVOICE' TO X(2,1) и STORE 'INVOICE' TO X(4)
приведут к занесению строки символов 'INVOICE' в один и тот же элемент
массива.
    В одномерных  массивах номер элемента совпадает с его единственным
индексом.  Поэтому функция ASUBSCRIPT()  с  одномерными  массивами  не
используется (хотя может).

    Параметры , , 
    Если  является одномерным массивом,  то в   задается
номер элемента,  а в  1.  ASUBSCRIPT() возвращает число, равное
, если выражение  меньше или  равно  числу  элементов  в
массиве.
    Если является двумерным  массивом,  то  обязательно  должны
включать номер  элемента  в  и устанавливать  в 0 или 1.
Задание 1 в  приведет к вычислению индекса строки элемента, а 2
к вычислению индекса столбца.
    Важно !!!
    Ссылки на  элементы двумерных массивов осуществляются двумя спосо-
бами.  В первом случае,  используются два индекса,  задающие строку  и
столбец  в  которых  находится  элемент массива;  во втором,  задается
единственный номер элемента.  Эти и другие функции,  манипулирующие  с
элементами  массивов,  требуют задание номера элемента (в нашем случае
это параметр  ).  Используйте функцию AELEMENT() для  получения
номера элемента двумерного массива по его индексам строки и столбца.
    Более подробная информация о строках и  столбцах  массивов  приво-
дится  при описании команды DIMENSION.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є               AT                є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает начальную позицию одного символьного в другом
    Синтаксис
AT(,  [, ])
    Параметры
 символьное выражение для поиска
 символьное выражение в котором осуществляется поиск
  задает какое по счету появление  в  фиксировать
        (поиск до -го появления)
Смотри также
ATC(), LEFT(), RAT(), RIGHT(), SUBSTR()

    Описание
    Функция AT() выполняет поиск  для .  Затем она возв-
ращает,  как целое число, ту позицию, на которой найдено . Если
 не найдено в , возвращается нулевое значение.
    Функция AT() осуществляет поиск с  учетом  регистра  (заглавные  и
строчные буквы различаются).  Для проведения поиска без учета регистра
используйте функцию ATC().

    Параметры
    , 
    FoxPro осуществляет поиск символьного выражения  в символь-
ном выражении . Если  содержит в себе символьное выраже-
ние ,  то возвращается позиция  начала  этого  появления.  Если
 не найдено,  то возвращается 0. Символьные выражения  и
 могут быть полями памяти.

    
    Если используется  необязательное  числовое  выражение ,  то
функция AT() осуществляет  поиск  до  -го  появления    в
. По умолчанию,  AT() ищет первое появление  (=1).
Добавление  позволяет вам управлять этим процессом.

    Примеры
STORE 'Now is the time for all good men ...' TO string
STORE 'is the' TO find_str
? AT(find_str,string)
5
STORE 'IS' TO find_str
? AT(find_str,string)
0
USE items
STORE 'file' to string
LIST ALL item,descript FOR AT(string,descript) > 0

STORE 'AB' TO find_str
STORE 'ABABAB' TO string
? AT(find_str,string,2)
3

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              ATAN               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает (в радианах) арктангенс числового выражения
    Синтаксис
ATAN()
    Тип возвращаемого значения
Числовой
    Смотри также
ATN2(), RTOD(), SET DECIMALS, TAN()

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

    Параметр 
    Эта тригонометрическая  функция  возвращает  значение  арктангенса
числового выражения ,  указываемое в радианах и лежащее в интер-
вале между "-пи"/2 и "+пи"/2 (от -1,57079 до  1,57079).    может
представлять собой любое значение.
    Численное значение, возвращаемое функцией ATAN() указывается в ра-
дианах;  используя функцию RTOD(),  вы можете преобразовать это значе-
ние,  выразив его в градусах.  Число десятичных разрядов, возвращаемое
функцией ATAN(), определяется командой SET DECIMALS.

    Примеры
? ATAN(0)
0.00
STORE PI()/2 to angle
? ATAN(angle)
1.00
? ATAN(PI()/2)
1.00
? ATAN(DTOR(90))
1.00

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є               ATС               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает начальную позицию одного символьного в другом
    Синтаксис
ATС(,  [, ])
    Параметры
 символьное выражение для поиска
 символьное выражение в котором осуществляется поиск
  задает какое по счету появление  в  фиксировать
        (поиск до -го появления)
    Смотри также
AT(), ATCLINE(), LEFT(), RAT(), RIGHT(), SUBSTR()

    Описание
    Функция ATC() выполняет поиск  для . Затем она возв-
ращает,  как целое число, ту позицию, на которой найдено . Если
 не найдено в , возвращается нулевое значение.
    Функция ATC() осуществляет поиск без учета регистра  (заглавные  и
строчные буквы не различаются). Для проведения поиска с учетом регист-
ра используйте функцию AT().

    Параметры
    , 
    FoxPro осуществляет поиск символьного выражения  в символь-
ном выражении . Если  содержит в себе символьное выраже-
ние ,  то возвращается позиция  начала  этого  появления.  Если
 не найдено,  то возвращается 0. Символьные выражения  и
 могут быть полями памяти.

    
    Если используется  необязательное  числовое  выражение ,  то
функция ATС() осуществляет поиск  до  -го  появления    в
. По умолчанию, ATС() ищет первое появление  (=1).
Добавление  позволяет вам управлять этим процессом.

    Примеры
STORE 'Now is the time for all good men ...' TO string
STORE 'IS THE' TO find_str
? ATC(find_str,string)
5
STORE 'IS' TO find_str
? ATC(find_str,string)
5
? ATC('now',string)
1

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             ATCLINE             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает номер  строки  в которой найдено первое появление заданного
символьного выражения. Поиск осуществляется без учета регистра.
    Синтаксис
ATCLINE(, )
    Параметры
 символьное выражение для поиска
 символьное выражение в котором осуществляется поиск
    Смотри также
AT(), ATC(), ATLINE(), MLINE(), SET MEMOWIDTH

    Описание
    Функция ATCLINE() осуществляет поиск  для первого экземпля-
ра ,  а затем возвращает, как целое число, номер строки, на ко-
торой оно было найдено. Если  не встречается в , возвра-
щается  нулевое  значение.  В  отличие  от  описываемой  ниже  функции
ATLINE() функция ATCLINE() не чувствительна к регистру  символов.  Для
проведения поиска с учетом регистра используйте функцию ATLINE().
    Внимание !!!
    Номер строки, возвращаемой функцией ATCLINE(), зависит от значения
, установленного командой SET MEMOWIDTH,  даже если и  не явля-
ется полем памяти.  Для более подробной информации об этом мы отсылаем
вас к описанию команды SET MEMOWIDTH.

    Параметры , 
    ATCLINE() ищет  в .  ATCLINE() возвращает, как целое
число, номер строки, где  была найдена.
    Строка, содержащая  соответствующее  символьное  выражение,  может
быть возвращена как строка символов функцией MLINE(). Длина возвращае-
мой строки зависит от установки команды SET MEMOWIDTH.
    Важно !!!
    ATCLINE() предоставляет удобный способ поиска в полях памяти.

    Примеры
CLOSE ALL
USE customer
GO TOP
CLEAR
STORE 'CALL' TO findstring

LOCATE FOR ATCLINE(findstring, comments) != 0
? company
? contact
? MLINE(comments, ATCLINE(findstring, comments))
   В следующем примере  показана  зависимость  возвращаемого  функцией
ATCLINE() значения от ширины поля памяти.
STORE '1234567890ABCDEFGHIJ' TO string
SET MEMOWIDTH TO 20
? ATCLINE ('AB', string)
1
SET MEMOWIDTH TO 10
? ATCLINE('AB', string)
2

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             ATLINE              є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает номер  строки  в которой найдено первое появление заданного
символьного выражения.
    Синтаксис
ATCLINE(, )
    Параметры
 символьное выражение для поиска
 символьное выражение в котором осуществляется поиск
    Смотри также
AT(), ATC(), ATСLINE(), MLINE(), SET MEMOWIDTH

    Описание
    Функция ATLINE() осуществляет поиск  для первого экземпляра
, а затем возвращает, как целое число, номер строки, на которой
оно было найдено.  Если  не встречается в , возвращается
нулевое значение.  В отличие от  описываемой  выше  функции  ATСLINE()
функция ATLINE() чувствительна к регистру символов. Для проведения по-
иска без учета регистра используйте функцию ATСLINE().
    Внимание !!!
    Номер строки,  возвращаемой функцией ATLINE(), зависит от значения
,  установленного командой SET MEMOWIDTH, даже если и  не явля-
ется полем памяти.  Для более подробной информации об этом мы отсылаем
вас к описанию команды SET MEMOWIDTH.

    Параметры , 
    ATLINE() ищет  в .  ATLINE() возвращает,  как  целое
число, номер строки, где  была найдена.
    Строка, содержащая  соответствующее  символьное  выражение,  может
быть возвращена как строка символов функцией MLINE(). Длина возвращае-
мой строки зависит от установки команды SET MEMOWIDTH.
    Важно !!!
    ATCLINE() предоставляет удобный способ поиска в полях памяти.

    Примеры
CLOSE ALL
USE customer
GO TOP
CLEAR
STORE 'CALL' TO findstring

LOCATE FOR ATCLINE(findstring, comments) != 0
? company
? contact
? MLINE(comments, ATCLINE(findstring, comments))
    В следующем примере  показана  зависимость  возвращаемого  функцией
ATCLINE() значения от ширины поля памяти.
STORE '1234567890ABCDEFGHIJ' TO string
SET MEMOWIDTH TO 20
? ATCLINE ('AB', string)
1
SET MEMOWIDTH TO 10
? ATCLINE('AB', string)
2

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є              ATN2               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает (в радианах) размер угла по значению синуса и косинуса
    Синтаксис
ATN2(, )
    Параметры
 координата х
 координата у
    Тип возвращаемого значения
Числовой
    Смотри также
ATAN(), DTOR(), RTOD(), SET DECIMALS, TAN()

    Описание
    Эта тригонометрическая функция возвращает значение арктангенса уг-
ла (выраженное в радианах) для всех четырех квадрантов.  При использо-
вании  функции ATN2() вы указываете координаты х и у в отличие от ука-
зания значения тангенса, как это имеет место в случае применения функ-
ции  ATAN().  Функция  ATN2() устраняет ошибки,  вызванные делением на
нуль.

    Параметры ,
    Координата х представляет собой , а координата у - .
Величина / должна лежать в интервале между "-пи" и "+пи"
(от -3,14159 до 3,14159).
    Результат ATN2() может быть преобразован и выражен  в  градусах  -
для этого используется функция RTOD(). Число десятичных разрядов в ре-
зультате может быть указано с помощью команды SET DECIMALS.

    Примеры
? PI()
3.14
? ATN2(0,-1)
3.14
STORE COS(PI()) TO X
STORE SIN(PI()) TO Y
? ATN2(Y,X)
3.14
? ATN2(Y,X)/PI()
1.00

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є             AVERAGE             є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Вычисление среднеарифметических значений  числовых  выражений  или
полей базы данных.
    Синтаксис
AVERAGE []
        []
        [FOR ]
        [WHILE ]
        [TO  | TO ARRAY ]
        [NOOPTIMIZE]
    Замечания
Расширена в FoxPro 2.0:  AVERAGE использует преимущества Rushmore тех-
нологии.
    Смотри также
CALCULATE, DIMENSION, SET HEADING, SUM

    Описание
    Команда AVERAGE вычисляет среднеарифметическое значение  численных
выражений.  Вычисляется среднее значение для всех числовых полей в те-
кущей используемой базе,  если только не задан список выражений  . Результаты вычислений выводятся на экран при TALK установленном
в ON.  Если HEADING установлено в ON,  то над результатами  появляются
заголовки.

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

    
    Для задания контекста записей используется опция  .  Только
записи, лежащие внутри диапазона,  задаваемого контекстом, будут вклю-
чены в подсчет средних значений.
    По умолчанию AVERAGE работает со всеми записями.

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

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

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

    NOOPTIMIZE
    Для заблокирования  возможности  использования Rushmore технологии
включите необязательную опцию NOOPTIMIZE. Более подробная информация о
Rushmore  технологии  приводится  при  описании команды SET OPTIMIZE в
этом руководстве и в главе "Оптимизация ваших прикладных  программ"  в
книге  документации по FoxPro "Руководство Разработчика" ("Developer's
Guide").

    Примеры
USE customer
AVERAGE taxrate FOR state = 'OH'
25 records averaged (среднее найдено по 25 записям)
TAXRATE
   5.81

AVERAGE taxrate TO mtaxes
51 records averaged (среднее найдено по 51 записям)
TAXRATE
   5.73
? mtaxes
   5.73

AVERAGE taxrate+10 TO mtaxes
51 records averaged (среднее найдено по 51 записям)
TAXRATE+10
   15.73

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є               BAR               є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
    Назначение
Возвращает номер последнего варианта, выбранного из всплывающего меню.
    Синтаксис
BAR()
    Тип возвращаемого значения
Числовой
    Смотри также
ACTIVATE POPUP, CNTBAR(), DEFINE BAR, DEFINE POPUP, GETBAR(), MRKBAR(),
ON BAR, ON SELECTION BAR, PRMBAR()

    Описание
    Функция BAR() возвращает номер варианта,  выбранного из меню. Каж-
дому варианту в меню по команде DEFINE BAR  присваивается  номер.  При
выборе варианта из меню функция BAR() возвращает соответствующий номер
варианта. Затем программа может ветвиться на различные подпрограммы на
основании значения, возвращаемого функцией BAR().
    В случае отсутствия активного меню или нажатия клавиши ESC с целью
выхода из меню функция BAR() возвращает нулевое значение.

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є        Пример Программы         є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
CLEAR
DEFINE MENU mainmenu
DEFINE PAD invoices  OF mainmenu PROMPT ' \, , )
    Параметры
 проверяемое выражение
 нижняя граница
 верхняя граница
    Тип возвращаемого значения
Логический
    Смотри также
MAX(), MIN()

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

    Параметры , , 
    Функция BETWEEN()   возвращает   значение  "истинно"  (.T.),  если
 больше или равно  и меньше или равно  (выражение
лежит между двумя другими выражениями) (<=<=);  в
ином случае функция возвращает значение "ложно" (.F.).  Тип всех  трех
выражений должен быть одним и тем же (символьный, числовой или даты).

    Пример
USE invoice
SCAN FOR BETWEEN(inv_date, DATE() - 30, DATE())
        ? 'Send notice of payment due for ' + company
ENDSCAN
    В этом примере база данных INVOICE (НАКЛАДНАЯ) является  сканируе-
мой  (SCAN)  относительно  всех записей,  для которых должны поступать
платежи, причем не более, чем с 30-дневной просрочкой.

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

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

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

ЦДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
є        Пример Программы         є
УДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЅ
SET TALK OFF
CLEAR
USE customer
DEFINE WINDOW mskip FROM 9,10 TO 13,70 DOUBLE COLOR SCHEME 5
ACTIVATE WINDOW mskip
@ 1,5 GET mchoice FUNCTION '*HN \]
        [FOR ]
        [FORMAT]
        [FREEZE ]
        [KEY  [, ]]
        [LAST]
        [LEDIT] [REDIT]
        [LOCK ]
        [LPARTITION]
        [NOAPPEND]
        [NOCLEAR]
        [NODELETE]
        [NOEDIT | NOMODIFY]
        [NOLGRID] [NORGRID]
        [NOLINK]
        [NOMENU]
        [NOOPTIMIZE]
        [NOREFRESH]
        [NORMAL]
        [NOWAIT]
        [PARTITION ]
        [PREFERENCE ]
        [REST]
        [SAVE]
        [TIMEOUT ]
        [TITLE ]
        [VALID [F:]  [ERROR ]]
        [WHEN ]
        [WIDTH ]
        [[WINDOW ]
        [IN [WINDOW]  | IN SCREEN]]
        [COLOR SCHEME 
        | COLOR ]
    Замечания
Расширена в FoxPro 2.0:  опция FOR;  опция PARTITION;  ключевые  слова
LEDIT, LPARTITION, NOLGRID, NOLINK, NOOPTIMIZE, NOREFRESH, NORGRID,
REDIT и REST; поддержка COL(), ROW() и SET SKIP.
    Смотри также
CHANGE, EDIT, SET SKIP, WTITLE()

    Описание
    BROWSE - это одна из самых полезных команд в FoxPro. Она использу-
ется для открытия окна и вывода на дисплей записей  базы  данных.  При
этом вы легко можете редактировать записи и добавлять новые.  Одновре-
менно может быть открыто до 10 окон BROWSE (по одному на каждую  рабо-
чую область),  если у вас хватит памяти. Информацию о работе с окнами
BROWSE смотри в книге документации по FoxPro  "Руководство  по  Интер-
фейсу" ("Interface Guide").

    Навигация в окне Browse
    Для перемещения от записи к записи вы можете пользоваться клавиша-
ми управления  курсором  "вверх" и "вниз" или вертикальным указателем.
Для пролистывания группы записей вверх и вниз служат клавиши PageUp  и
PageDown. Для  перемещения к следующему или предыдущему полю использу-
ются клавиши Tab или Shift+Tab или горизонтальный указатель.
    Дополнительная информация о навигации в окне  BROWSE  приведена  в
Главе  "Оконное  Меню"  в книге документации по FoxPro "Руководство по
Интерфейсу" ("Interface Guide").

    Сохранение изменений
    Вы можете сохранить любые внесенные вами изменения и выйти из  ко-
манды BROWSE, нажав Ctrl-W или Ctrl-End, либо нажав кнопку мыши на по-
ле закрытия команды.  Нажав Ctrl-Q или Esc, вы можете выйти из команды
без сохранения сделанных в текущем поле изменений.
    В окне BROWSE можно редактировать поля памяти типа memo. Для этого
нужно выбрать такое поле и нажать Ctrl-PgDn.  Если у вас есть мышь, то
для открытия поля памяти для редактирования достаточно два раза нажать
кнопку, находясь над этим полем. Для выхода из редактирования поля па-
мяти с сохранением внесенных изменений нажмите Ctrl-W или кнопку  мыши
на поле закрытия команды.  Если вы хотите выйти без сохранения измене-
ний, нажмите клавишу Esc.

    Команда BROWSE и связанные файлы
    Команда BROWSE  позволяет  поддерживать связи между базами данных.
Если связь установлена, то при перемещении указателя записи в порожда-
ющей базе данных в дочерней базе данных указатель записи автоматически
перемещается на соответствующую ей  запись.  Вы  можете  открыть  окно
BROWSE для порождающей базы данных и для каждой дочерней.  При переме-
щении по записям порождающей базы данных в окне BROWSE, в окнах BROWSE
дочерних баз данных будут появляться соответствующие им записи.
    Одно окно BROWSE может включать в себя поля как из порождающей ба-
зы данных, так и из всех ее дочерних баз. Это обеспечивается включени-
ем в команду опции FIELDS со списком этих полей. Опция описывается ни-
же.
    Выберете рабочую область для порождающей базы данных. Затем выпол-
ните BROWSE с опцией FIELDS.  При включении в список полей поля из до-
черней базы данных, перед его наименованием укажите псевдоним дочерней
базы данных и отделите его точкой.
    Дополнительная информация о создании связей  между  базами  данных
приводится при описании команды SET RELATION.

    Поддержка SET SKIP
    SET SKIP позволяет вам создавать связь между двумя  базами  данных
типа один-к-многим.  Для каждой записи в порождающей базе данных могут
быть несколько связанных с ней записей в  дочерней  базе  данных.  При
использовании отношений  связи  один-к-многим  BROWSE  может использо-
ваться для просмотра записей из обеих баз.
    Для каждой записи из порождающей базы данных, которая появляется в
окне BROWSE,  будут появляться все связанные с ней (если вообще  есть)
записи из  дочерней  базы  данных.  Порождающая запись появится только
один раз с первой подходящей записью из дочерней базы данных. Последо-
вательность оставшихся  подходящих  записей (если они есть) появится в
строках, следующих за порождающей записью и первой подходящей дочерней
записью. Поля, содержащие информацию порождающей записи, которая соот-
веттсвует родительским записям, находящимся ниже первой из них,  выво-
дятся затененными.
    Если вы находитесь  на  порождающей  записи,  то  нажатием  клавиш
Ctrl+(курсор  вниз) вы можете перейти к следующей порождающей записи в
окне BROWSE,  а нажатием клавиш Ctrl+(курсор  вверх)  вы  перейдете  к
предшествующей порождающей записи. Более подробная информация об уста-
новлении связи один-к-многим приводится далее в этой главе при  описа-
нии команды SET SKIP.

    Пример
    В следующем примере с помощью SET SKIP создается связь один-к-мно-
гим. Порождающая база данных INVOICE имеет поля, содержащие номер кви-
танции и информацию о клиенте,  разместившем заказ. Для каждой квитен-
ции  в  порождающей базе данных создается единственная запись.  Другая
база данных (LINEITMS, дочерняя) также содержит поле с номером квитан-
ции. Оставшиеся поля дочерней базы данных содержат информацию о каждом
пункте квитанции. Дочерняя база данных LINEITMS содержит несколько за-
писей (пункты  квитанции) для каждой записи в порождающей базе данных.
Окно BROWSE открывается с записями из обеих баз данных.
    Список FIELDS  содержит записи из порождающей и дочерней базы дан-
ных. Поля из дочерней базы данных содержат перед собой псевдоним  базы
данных (LINEITMS) и точку.
CLEAR
CLEAR ALL
SELECT 1                && Рабочая область
USE invoice             && Порождающая база данных
SELECT 2                && Следующая доступная рабочая область
USE lineitms            && Дочерняя рабочая область
SET ORDER TO TAG invoice && Индексирование для установления связи
SELECT invoice                   && Возврат в порождающую рабочую область
SET RELATION TO invoice INTO lineitms && Создание связи
SET SKIP TO lineitms                && Установление связи один-к-многим

BROWSE FIELDS invoice, lineitms.item, lineitms.descript

    Полезные функции
    Несколько функций FoxPro возвращают полезную  информацию  из  окна
BROWSE. VARREAD() может использоваться для определения текущего поля в
окне BROWSE.  Когда окно BROWSE активно,  то VARREAD() возвращает  имя
поля на которое установлен курсор.
    RECNO() возвращает номер  выбранной  в  настоящий  момент  записи.
ROW() и COL() возвращают текущую позицию курсора в окне BROWSE.
    Команда BROWSE поддерживает многочисленные опции.  Ниже приводится
список этих опций с кратким описанием.

    Опции
    FIELDS  (<список полей>)
    Если FIELDS  включается,  то  выводятся  только поля,  указанные в
списке полей ,  и они располагаются на экране в порядке их
следования в . Если опция FIELDS не используется, то выво-
дятся все поля базы данных  в  последовательности  их  расположения  в
структуре базы данных.
    Вы можете включать в список   поля  из  связанных  баз
данных. В этом случае,  перед именем поля должен стоять псевдоним этой
базы данных и разделительная точка.
    Список полей может включать в себя любую комбинацию полей баз дан-
ных или вычислимых полей.
    Формат списка полей следующий:
  [:R] [:]
 [:V =  [:F] [:E = ]]
 [:P = ]
 [:B = ,  [:F]]
 [:H = ]
 [:W = ]
 [,  [:R]  ... ]

    Вычислимые поля
    Поля списка    могут содержать операторы для создания
вычислимых полей.  Вычислимое поле содержит данные только для  чтения,
которые создаются из выражения. Это выражение может иметь любую форму,
но должно быть допустимым для FoxPro.
    Формат оператора создания вычислимого поля:
 =  (<имя вычислимого поля>=)
    Например создадим вычислимое поле ADDRESS:
    USE customer
    BROWSE FIELDS ADDRESS = ALLTRIM(address1) + ' ' + ALLTRIM(address2)
где address1 и address2 являются полями выбранной в  настоящий  момент
базы данных.
    Имеется восемь опциональных ключей,  позволяющихзадавать специаль-
ные  режимы  обращения с полями в команде BROWSE.  Испльзуемый в опции
FIELDS в качестве разделителя знак наклонной черты (/) можно при жела-
нии заменить на двоеточие (:).

    :R
    Необязательный ключ :R определяет,  что поле имеет статус  доступа
только  для чтения - данные можно только просматривать,  но нельзя ре-
дактировать.
    USE customer
    BROWSE FIELDS cust_id:R, company

    : (<размер колонки>)
    Необязательный ключ  ширины  поля  задает размер выводимого в окне
BROWSE на дисплей поля (в столбцах экрана).  Размер поля в самой  базе
данных  при этом не меняется,  меняется лишь размер отображения его на
экране.

    :V = 
    Ключ :V  (верификация)  позволяет выполнять в окне BROWSE контроль
достоверности данных. При выходе из поля, если  оценивается как
истина (.Т.),  то вводимые данные считаются корректными и курсор пере-
мещается к следующему полю.  Ключ :V игнорируется при обработки  полей
памяти.
    Если  оценивается как ложь (.F.), то вводимые данные счита-
ются ошибочными, курсор остается в этом поле и выводится предупреждаю-
щее сообщение. Если выражение  обращается в 0, то вводимые дан-
ные  считаются ошибочными,  курсор остается в этом поле.  Сообщение об
ошибке не выдается.
    По умолчанию,  оценивается только при модификации поля. Для
принудительной проверки любого поля включите ключевое слово :F.
    Посредством опции  :Е вы можете задавать собственный текст сообще-
ния об ошибке.

    :F
    Ключ :F  (обязательный  контроль  достоверности)  определяет режим
оценки выражения  при выходе из поля без его модификации.  Если
ключ :F не включен, то сравнение будет выполняться только в случае из-
менения содержимого поля.  Если же включить ключ :F, то сравнение поля
будет происходить независимо от того,  изменильсь ли поле. Использова-
ние ключа :F позволяет контролировать  достоверность  ранее  введенных
данных. Ключ :F игнорируется при обработки полей памяти.

    :E=
    Если выражение контроля достоверности :V= дало в результате
логическое значение "истина" (введены допустимые данные),  то происхо-
дит нормальный выход из поля.  Если же это  выражение  дало  результат
"ложь" (неверные данные), то выход из поля не происходит, а на дисплей
в системном окне выводится сообщение  "Invalid  input"  ("Неправильный
ввод") .
    При задании ключа Ошибки :Е вместо системного сообщения будет  вы-
дано ваше сообщение .  Сообщение выдается только в случае уста-
новки SET NOTIFY в ON.  Если команда BELL установлена в положение  ON,
то также раздается звуковой сигнал.
    Если выражение для контроля достоверности  V:=  дает  число
ноль,  то  сообщение не выдается и выход из контролируемого поля также
не происходит. Это дает вам возможность выдавать собственные сообщения
подпрограмм контроля достоверности.
    USE customer
    BROWSE FIELDS cust_id:R, company, taxrate :V = taxrate > 0 :F ;
        :E = 'Taxrate must be greater than 0'

    :P=
    Если в команде BROWSE вы используете список полей FIELDS, то тогда
для каждого поля в списке вы можете задать опцию Шаблонов :Р.  Эта оп-
ция позволяет создавать шаблоны редактирования ,  которые выво-
дят и вводят данные для каждого поля в окне BROWSE.
    Коды шаблонов  редактирования приведены при описании команды @ ...
SAY/GET. Все коды FUNCTION и PICTURE, которые доступны в команде @ ...
SAY/GET, могут использоваться в опции Шаблонов команды BROWSE, за иск-
лючением кода "М".
    В этом  примере  опция  Шаблонов используется для разрешения ввода
в поле TAXRATE только числовых данных в заданном формате:
    USE customer
    BROWSE FIELDS taxrate :P='9.99'

    :B=,
    Опция :B позволяет определить набор граничных значений, в пределах
которых должны находиться данные в поле.  Данная опция может использо-
ваться с числовыми,  датовыми или символьными выражениями, но не может
быть включена в функции,  определяемые пользователем.  Тип данных гра-
ничных выражений  и  должен соответствовать типу  данных
поля.  Если  вводимые  данные  не  попадают в диапазон между  и
, выдается системное сообщение с указанием того, в какие грани-
цы должны укладываться данные.
    По умолчанию,  граничные значения проверяются только при изменении
поля.  Вы можете при этом также включить опцию обязательного  контроля
достоверности :F.

    :Н=
    Обычно наименования полей в окне редактирования BROWSE размещаются
в заголовках столбцов (полей). Включением опции Заголовка :Н вы можете
заменить наименования полей по умолчанию на ваше собственное.  Заголо-
вок поля задается выражением .

    :W=
    Вы можете запретить ввод в поле,  в зависимости от значения  логи-
ческого выражения .  При включении опции :W,  происходит оценка
, и если оно оценивается как ложь (.F.),  то ввод в  этот  поле
запрещается. В  поддерживаются функции,  определяемые пользова-
телем. Для полей памяти опция :W игнорируется.
    Если ввод  во  все  поля запрещен,  то поле в которое вы пытаетесь
ввести информацию остается текущим и помечается как только для чтения.
Этот случай  возникает  только тогда,  когда все поля имеют опцию :W и
она оценивается как ложь.

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

    FORMAT
    Опция FORMAT  позволяет использовать форматный файл для управления
форматом дисплея и форматом ввода данных.  Форматный файл следует сна-
чала  открыть командой SET FORMAT TO.  Следующая информация берется из
форматного файла и применяется для окна BROWSE:
    * список полей для BROWSE
    * любые заданные предложения VALID
    * любые заданные предложения WHEN
    * любые заданные предложения RANGE
    * поля и размеры, заданные предложением PICTIRE
    * все выражения SAY включаются как вычисляемые поля BROWSE
    Приведем пример использования форматного файла для,  используемого
для ввода допустимых данных в окно BROWSE:
    USE CUSTOMER
    SET FORMAT TO CUSTENTR.FMT
    BROWSE FORMAT
    Форматный файл CUSTENTR.FMT имеет следующее содержимое и использу-
ется для ввода допустимых данных в базу данных CUSTOMER.DBF:
@ 3,0 GET cust_id VALID VAL(cust_id) > 0 PICTURE '999999'
@ 3,0 GET company VALID company <> SPACE(40) PICTURE ;
        'AAAAAAAAAAAAAAAAAAAA'
@ 3,0 GET contact WHEN contact = SPACE(40)
@ 3,0 GET taxrate RANGE 5.00, 6.00
@ 3,0 SAY ALLTRIM(city) + ', ' + ALLTRIM(state) PICTURE ;
        'XXXXXXXXXXXXXXXXXXXX'
    Команды @  ...  GEТ  могут  располагаться  все в одном месте.  При
использовании форматного файла вместе с командой BROWSE их позиции иг-
норируются. В первой строке создается поле BROWSE,  позволяющее вводить
в CUST_ID числовое значение большее 0. Во второй строке создается поле
BROWSE, которое запрещает ввод пустого поля COMPANY,  и COMPANY должно
состоять из не более чем 20 алфавитных символов. В третьей строке соз-
дается поле BROWSE, позволяющее вводить CONTACT, только в случае когда
оно пустое. В четвертой строке создается поле BROWSE, позволяющее вво-
дить TAXRATE между 5.00 и 6.00.  В последней строке создается вычисли-
мое поле (указывается посредством SAY),  которое выводит поля  CITY  и
STATE с удаленными в них пробелами в поле шириной 20 символов.

    FREEZE 
    Опция FREEZE включается в том случае,  если вы хотите разрешить во
время работы команды BROWSE вносить изменения только в одном поле. Од-
нако на дисплей при этом выводятся все поля.

    KEY [,]
    Опция KEY  ограничивает  контекст  записей,  появляющихся  в  окне
BROWSE. Включением опции KEY вы можете задать значение  ключа  индекса
 или диапазона значений ключей , для записей, об-
рабатываемых командой BROWSE.  Обрабатываемая база данных должна  быть
проиндексирована, и значение ключа индекса или значения ключей,  вклю-
ченных в опцию FOR,  должны иметь один и тот же тип данных с индексным
выражением в главном индексном файле или главном теге.
    Например, база данных CUSTOMER содержит символьное поле  с  кодами
перемещений. Если  база данных индексирована по полю кода перемещения,
то вы можете задать диапазон этих кодов в опции KEY.  В этом случае  в
окне BROWSE появятся все записи,  имеющие кода перемещений, попадающие
в заданные границы:
    USE customer
    SET ORDER TO zip
    BROWSE KEY '43000', '43999'
    В этом примере в окно BROWSE выводятся только те записи базы  дан-
ных, которые имеют код перемещения (zip), лежащий между 43000 и 43999.

    LAST
    При закрытии окна BROWSE все изменения конфигурации этого окна за-
поминаются  в файле описания ресурсов FOXUSER.  Список полей,  размеры
каждого поля,  расположение и размер окна BROWSE и т.д. - все это хра-
нится  в  файле  FOXUSER.  Дополнительная  информация о файле ресурсов
FoxPro приводится при описании команды SET RESOURCE.
    При выдаче  команды BROWSE с опцией LAST окно BROWSE будет открыто
в той конфигурации,  что  была  в  последний  раз  сохранена  в  файле
FOXUSER, если  RESOURCE  имеет  состояние  SET  ON.  Это позволяет вам
восстановить последнюю конфигурацию окна BROWSE,  созданного последним
применением команды BROWSE.  Это полезно, когда команда BROWSE вызыва-
лась из Командного окна и имела длинный список опций.
    Если последнее  окно  BROWSE было открыто с именем PREFERENCE,  то
BROWSE LAST не восстановит предшествующее состояние.
    Если выход  из данной команды выполняется по Ctrl-Q,  то изменения
конфигурации не запоминаются.

    LEDID,REDIT
    Информация в  окне  редактирования  BROWSE  может выводится в двух
различных режимах,  Изменения (Change) и Редактирования  (Browse).  По
умолчанию применяется режим Редактирования,  в котором поля располага-
ются горизонтально.  В режиме Изменения поля на  экране  располагаются
вертикально.
    Окно редактирования BROWSE может быть так же разделено на левую  и
правую части  оконным  разделителем  при  помощи мыши,  выбором Resize
Partitions (Изменить размер частей) из всплывающего  меню  Browse  или
включением опции PARTITION  в саму команду BROWSE. Каждая часть
мажет выводится в своем режиме, назависимо от режима соседней.
    Включение в  команду BROWSE ключевых слов LEDIT или REDIT приведет
к выводу левой или правой части,  соответственно,  окна редактирования
BROWSE в режиме Изменения.  Для открытия обеих частей в режиме Измене-
ния задайте оба ключевых слова. Каждая часть может переключаться между
режимами  Изменения  и Редактирования путем выбора пунктов Browse (Ре-
дактирования) или Change (Изменения) во всплывающем меню Browse.
    USE customer
    BROWSE PARTITION 30 LEDIT

    LOCK 
    Опция LOCK  задает  число  полей,  которые будет выводится в левой
части окна BROWSE.  Оно задается числовым выражением  .  Первые
 полей будут расположены в левой части окна BROWSE.
    Более подробная информация о разбиении  окна  BROWSE  на  части  и
доступных средствах  его  разбиения приводится в книге документации по
FoxPro "Руководство по Интерфейсу" ("Interface Guide").

    LPARTITION
    Окно BROWSE  может  быть  разделено  на левую и правую части путем
включения опции PARTITION (описывается ниже). По умолчанию, при откры-
тии окна  курсор  располагается  на первом поле правой части.  Если вы
включите ключевое слово LPARTITION, то при открытии окна BROWSE курсор
будет располагаться на первом поле левой части.
    Курсор будет располагаться в правой части  окна,  если  LPARTITION
включается без предложения PARTITION.

    NOAPPEND
    Опция NOAPPEND предотвращает добавление в файл новых записей путем
нажатия Ctrl+N или выбором Append Record (Добавить запись) из всплыва-
ющего меню Browse в окне редактирования.
    Включение этой  опции  не запрещает добавление записей из подпрог-
рамм (подпрограммы опций VALID, WHEN или ON KEY LABEL) внутри окна ре-
дактированяи BROWSE.

    NOCLEAR
    Когда опция NOCLEAR включена и вы закрываете окно BROWSE,  то  его
образ и последнее состояние остаются на экране или текущем окне вывода
(если оно есть).
    Этот образ  только  отображается  и  не  является  активным  окном
BROWSE. Для удаления его с экрана  или  из  окна  используйте  команду
CLEAR.

    NODELETE
    Опция NODELETE не позволяет помечать при работе в окне BROWSE  за-
писи  файла как подлежащие удалению.  Обычно записи можно пометить для
удаления нажатием Ctrl-T , выбором пункта Toggle Delete из всплывающе-
го  меню Browse или нажатием кнопки "мыши" в крайней левой колонке за-
писи.
    Включение этой  опции не запрещает удаление записей из подпрограмм
(подпрограммы опций VALID, WHEN или ON KEY LABEL) внутри окна редакти-
рованяи BROWSE.

    NOEDIT | NOMODIFY
    Опция NOEDIT | NOMODIFY запрещает вносить любые изменения  в  базу
данных. Вы можете при помощи BROWSE просматривать базу данных или осу-
щесвлять в ней поиск,  но не можете ее редактировать.  Ключевые  слова
NOEDIT и NOMODIFY идентичны.
    При задании NOEDIT или NOMODIFY записи могут удаляться. Для запре-
щения удаления используйте NODELETE.
    При задании NOEDIT или NOMODIFY записи могут добавляться. Для зап-
рещения добавления используйте NOAPPEND.

    NOLGRID | NORGRID
    Поля базы данных в окне BROWSE разделяются вертикальными  линиями.
Окно  редактирования  BROWSE  может  быть  разделено на левую и правую
части оконным разделителем при помощи мыши,  выбором Resize Partitions
(Изменить  размер  частей)  из всплывающего меню Browse или включением
опции PARTITION  в саму команду BROWSE.
    Ключевые слова  NOLGRID и NORGRID убирают вертикальные линии сетки
полей окна BROWSE из левой или правой части, соответсвенно.
    Линии сетки  могут  убираться  и вновь вставляться выбором пунктов
Grid Off (Включить Сетку)  или  Grid  On  (выключить  Сетку)  из  меню
Browse.

    NOLINK
    Окно редактирования BROWSE может быть разделено на левую и  правую
части оконным разделителем при помощи мыши,  выбором Resize Partitions
(Изменить размер частей) из всплывающего меню  Browse  или  включением
опции PARTITION  в саму команду BROWSE.
    По умолчанию,  обе части являются связанными - при прокрутке одной
части осуществляется  автоматическая прокрутка другой части.  Ключевое
слово NOLINK разрывает эту связь.  NOLINK выводит вертикальные линейки
прокрутки для  каждой части,  и поэтому прокрутка в них может осущест-
влятся независимо друг от друга.

    NOMENU
    Опция NOMENU  отменяет доступ к всплывающему меню Browse и его оп-
циям. Включение опции NOMENU удаляет элемент линейки меню Browse.

    NOOPTIMIZE
    Для заблокирования  возможности  использования Rushmore технологии
включите необязательную опцию NOOPTIMIZE. Более подробная информация о
Rushmore  технологии  приводится  при  описании команды SET OPTIMIZE в
этом руководстве и в главе "Оптимизация ваших прикладных  программ"  в
книге  документации по FoxPro "Руководство Разработчика" ("Developer's
Guide").

    NOREFRESH
    Опция NOREFRESH предотвращает обновление окна BROWSE.  Частота об-
новления окна BROWSE задается командой SET  REFRESH.  Опция  NOREFRESH
полезна при работе с файлами,  предназначенными только для чтения. Она
убыстряет работу прикладной программы.

    NORMAL
    Если окно  пользователя  является  текущим окном вывода ,  то окно
BROWSE примет такие его параметры, как цвет, размер и опции управления
(GROW,  FLOAT, ZOOM и т.д.). При заданной опции NORMAL окно BROWSE бу-
дет открыто нормальным образом - так,  как если бы окон, выбранных или
открытых для вывода, не существовало. Окну BROWSE будут присвоены атт-
рибуты по умолчанию.

    NOWAIT
    Если команда BROWSE выдается из программы, происходит открытие ок-
на Browse, а выполнение программы приостанавливается до выхода из это-
го окна.  Включение опции NOWAIT вызывает продолжение работы программы
после открытия окна.  Программа не ждет, пока окно Browse будет закры-
то, и выполняется строка программы, непосредственно следующая за стро-
кой с командой BROWSE NOWAIT.
    Данная опция существует только для использования в программах. При
выдаче этой команды во время работы в Командном окне опция NOWAIT  ни-
какого действия не оказывает.

    PARTITION 
    Окно BROWSE может быть разделено на правую и левую части с помощью
опции  PARTITION.  Символьное  выражение  задает номер столбца,
где будет расположен оконный разделитель. Например, если  равно
20, то оконный разделитель будет расположен в 20 столбце окна редакти-
рования BROWSE. Окно редактирования BROWSE может быть так же разделено
на  левую  и правую части перемещением оконного разделителя при помощи
мыши или выбором Resize Partitions (Изменить размер частей) из  всплы-
вающего меню Browse.
    По умолчанию,  обе части являются связанными - при прокрутке одной
части осуществляется автоматическая прокрутка другой части.  Вы можете
разорвать эту связь и осуществлять прокрутку каждой части  независимо.
Это  осуществляется  путем  включения в команду BROWSE ключевого слова
NOLINK,  или выбором пункта Unlink  Partitions  (Развязать  Части)  во
всплывающем меню Browse.
    Информация в  окне  редактирования  BROWSE  может выводится в двух
различных режимах,  Изменения (Change) и Редактирования  (Browse).  По
умолчанию применяется режим Редактирования,  в котором поля располага-
ются горизонтально.  В режиме Изменения поля на  экране  располагаются
вертикально. Для  разбиения  окна  BROWSE   вы   можете   использовать
PARTITION.

    PREFERENCE 
    Опция PREFERENCE позволяет сохранить аттрибуту и опции окна Browse
для  последующего  использования.  В  отличие  от опции LAST,  которая
восстанавливает окно Browse в том виде,  в котором оно было  во  время
последнего сеанса работы с командой,  опция PREFERENCE записывает атт-
рибуты окна Browse в файл FOXUSER под определенным именем.  Данная оп-
ция позволяет восстановить желаемые аттрибуты в любой произвольный мо-
мент. Более подробная информация о файле ресурсов FoxPro приведена при
описании команды SET RESOURCE.
    Выдача команды BROWSE с заданным именем PREFERENCE  в  пер-
вый раз создает данную PREFERENCE-запись. Дальнейшее использование ко-
манды BROWSE с опцией PREFERENCE ведет к восстановлению аттрибутов ок-
на Browse, установленных в первый раз. При закрытии такого окна запись
аттрибутов обновляется.
    Допустим, вы удовлетворены всеми параметрами окна BROWSE и исполь-
зуете опцию PREFERENCE,  тогда действуйте следующим образом:  закройте
окно BROWSE; выполните команду SET RESOURCE OFF; откройте файл FOXUSER
как базу данных и пометте поле,  содержащее информацию  о  привилегии,
как только  для  чтения.  Для этого достаточно изменить значение логи-
ческого поля READONLY на истину (.Т.).
    При выходе  из  окна  BROWSE при помощи Ctrl+Q любые изменения его
конфигурации не запоминаются в файле ресурсов.

    REST
    Обычно BROWSE позиционирует указатель записи на начало редактируе-
мого файла.  REST используется вместе с BROWSE FOR для  предотвращения
возвращения указателя записи в начало файла базы данных.

    SAVE
    Эта опция доступна только при  вызове  BROWSE  из  программ.  SAVE
всегда игнорируется при использовании команды BROWSE из Командного ок-
на,  т.к.  в интерактивном режиме предполагается по  умолчанию  BROWSE
SAVE.
    Опция SAVE сохраняет на экране окно Browse и любые другие открытые
его  окна памяти после выхода из команды BROWSE.  Обычно при выходе из
данной команды такие окна удаляются с экрана. Вы можете вернутся в ок-
но BROWSE после работы в других открытых окнах. Для этого используется
клавиатура или нажатие клавиши "мыши" на требуемых окнах.
    Для закрытия  окна BROWSE,  созданного с опцией SAVE,  используйте
клавиши Ctrl+W, Ctrl+End, Ctrl+Q или Escape, или нажмите кнопку "мыши"
на рамке закрытия,  или выбрать пункт меню Close (Закрыть) в меню Edit
(Редактирование), или закрыть базу данных.

    TIMEOUT 
    BROWSE поддерживает необязательное предложение TIMEOUT.  Его вклю-
чение позволяет вам задать промежуток времени, в течении которого окно
BROWSE будет  ожидать  ввода.  Числовое выражение  задает число
секунд, по истечении которых при отсутствии ввода, окно BROWSE автома-
тически закроется.  TIMEOUT  эффективна только внутри прикладных прог-
рамм - оно не оказывает влияние при вызове BROWSE из Командного окна.

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

    VALID  [ERROR ]
    Опция VALID позволяет вам устанавливать условия перехода от строки
к строке (от записи к записи) в окне BROWSE.  VALID выполняется только
при внесении изменений в запись и при переходе к другой записи.  VALID
не выполняется для полей памяти.
    Если VALID возвращает логическую истину (.Т.),  то вам разрешается
переход к другой записи.
    Если VALID возвращает логическую ложю (.F.),  то курсор остается в
текущем поле  и  системой  выдается  сообщение   "Неправильный   ввод"
("Invalid input").  Включением предложения ERROR  вы можете за-
менить это сообщение на ваше собственное. Символьное выражение 
выводится в системном окне.
    Если VALID возвращает 0, то курсор остается в текущем поле и сооб-
щения об ошибке не выдается.
    Вы можете заставить выполнятся VALID до того, как вы переместитесь
к следующей записи.  Для этого поместите :F или /F до или после ключе-
вого слова VALID.  В этом случае VALID выполняется и для  неизмененной
записи.

    WHEN 
    Предложение WHEN выполняется при перемещении к  следующей  записи.
Если WHEN возвращает логическую истину (.Т.),  то вам разрешается про-
изводить в этой записи изменения.  Если WHEN возвращает ложь или 0, то
запись к  которой вы переместились становится только для чтения.  WHEN
не выполняется для полей памяти.

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

    WINDOW 
    Данная опция  позволяет  открыть  окно Browse внутри другого окна,
заданного .  Это окно должно быть предварительно опреде-
лено  командой  DEFINE WINDOW,  но не обязательно должно быть активным
или видимым.  Опция WINDOW активмрует  его  и  поместит  в  него  окно
Browse.  Окно  Browse займет все это окно и примет его характеристики.
Например, если то окно было определено в команде DEFINE WINDOW с опци-
ями FLOAT и GROW, то окно Browse также можно будет перемещать и менять
его размер.

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

    IN SCREEN
    Опция IN SCREEN размещает окно BROWSE на экране. Она позволяет вам
расширить окно BROWSE на весь экран,  вместо размещения его внутри ок-
на. Окно BROWSE размещается на экране по умолчанию.

    COLOR SCHEME 
    COLOR  (<список цветовых пар>)
    COLOR SCHEME и COLOR определяют цветовые аттрибуты окна BROWSE. По
умолчанию,  окно BROWSE использует цвета, задаваемые в COLOR SCHEME 10
(Browse).
    Заданием COLOR  вы можете переопределять цветовые
характеристики  различных  элементов окна BROWSE.  Список цветовых пар
 представляет собой 10 разделенных запятыми пар  цве-
тов. Каждая цветовая пара управляет различными элементами (смотри таб-
лицу ниже).
    Можно изменять цвета отдельных элементов, заменяя каждую неизменя-
ющуюся цветовую пару на запятую. Например, для установки цвета текуще-
го поля  (цветовая  пара  2)  в  красный  на черном и цвета выбранного
текста (цветовая пара 6) в синий на черном, вы должны включить следую-
щее предложение
    COLOR , R/N,,,, B/N
    В результате этого будут изменены только 2-я и 6-я пары.
    Задание COLOR SCHEME позволяет устанавливать цвета всех  элементов
в любые из 24 доступных цветовых схем.  В следующей таблице приводится
список цветовых пар и управляемые ими атрибуты.
 Номер     Атрибут всплывающего меню
 цветовой
 пары
  1        Другие записи
  2        Текущее поле
  3        Граница
  4        Активный заголовок
  5        Незанятый заголовок
  6        Выбранный текст
  7        Текущая запись
  8        Тень
  9        Не используется
  10       Не используется
    Второй цвет цветовой пары 1 используется как цвет фона сетки.
    Второй цвет цветовой пары 3 используется как основной цвет сетки.



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