г---------------------------------¬ ¦ DIFFERENCE ¦ L---------------------------------- Назначение Возвращает относительное фонетическое различие между двумя сим- вольными выражениями Синтаксис DIFFERENCE(, ) Возвращаемый тип Численный Смотри также SOUNEX() Описание Эта функция возвращает численное значение, лежащее в интерва- ле от 0 до 4, которое представляет собой относительное фонетичес- кое различие между двумя символьными выражениями. Функция DIFFERENCE() полезна при поиске в базах данных, когда неизвестно точное правописание данных. Если символьные выражения очень похожи фонетически, функция DIFFERENCE() возвращает значение равное 4. Два знаковых выраже- ния, имеющих достаточно большое фонетическое различие, возвращают 0. Параметры , и задают символьные выражения, сравниваемые функцией DIFFERENCE(). Примеры STORE 'Smith' TO name1 STORE 'Smythe' TO name2 STORE 'Smittie' TO name3 STORE '' TO name4 ? DIFFERENCE(name1, name2) 4 ? DIFFERENCE(name1, name3) 4 ? DIFFERENCE(name1, name4) 1 г---------------------------------¬ ¦ DIMENSION ¦ L---------------------------------- Назначение Создает массив переменных памяти Синтаксис DIMENSION ([, ]) [, ([, ])] ... Замечания Усилена в FoxPro 2.0: Массивы могут изменять размерность без по- тери данных. Массивы также могут передаваться в процедуры по ссылке. Смотри также ADEL(), AELEMENT(), AINS(), APPEND FROM ARRAY, ASUBSCRIPT(), COPY TO ARRAY, DECLARE, GATНER, PUBLIC, PRIVATE, SET COMPATIBLE, SCATTER, STORE Описание Команда DIMENSION позволяет создавать одно- или двумерные массивы переменных памяти. По действию и синтаксису команда DIMENSION идентична команде DECLARE. Параметры Имя создаваемого массива задается с помощью . В одной команде DIMENSION может быть создано несколько массивов с помощью использования дополнительных имен массивов (, ...). [, ] После того, как вы задали имя массива с помощью параметра , вы должны задать размерность массива. Численные выраже- ния и определяют количество измерений и размер- ности массива. Если вы используете только , создается одномерный мас- сив. Одномерный массив имеет одну колонку и строк. Напри- мер, команда DIMENSION arayone(10) создает одномерный массив с именем ARRAYONE, содержащий одну ко- лонку и 10 строк. Для создания двумерного массива используйте оба параметра и . задает число строк в массиве, а задает число колонок в массиве. Следующий пример создает двумерный массив с именем ARRATWO, содержащий две строки и четыре колонки: DIMENSION arraytwo(2, 4) Одной командой DIMENSION можно создать несколько массивов. В следующем примере создаются три массива - ARRAYONE и ARRAYTWO из примеров выше, и третий массив с именем ARRAYTНREE: DIMENSION arrayone(10), arraytwo(2, 4), arraythree(3, 3) При описании массивов командами DIMENSION или DECLARE поддер- живаются и круглые, и квадратные скобки. Например, следующие две команды создают идентичные массивы: DIMENSION arrayone(10), arraytwo[2, 4], arraythree(3, 3) DIMENSION arrayone[10], arraytwo(2, 4), arraythree[3, 3] Элементы массива Размерность массива определяет количество элементов в масси- ве. Каждый элемент в массиве может сохранять один "элемент" ин- формации. Для определения количества элементов, содержащихся в массиве, надо умножить число строк () на число колонок (). Элементы массива переменных памяти могут содержать любой тип данных. При создании массива командами DECLARE или DIMENSION эле- менты массива инициализируются логическим значением "ложно" (.F. ). Если режим SET COMPATIBLE установлен в FOXPLUS или OFF (уста- новка по умолчанию), то весь массив переменных памяти в целом мо- жет инициализироваться в одно и тоже значение командой STORE. Например: DIMENSION y(10, 3) STORE 'initial' TO y Индексы Ссылка на элементы массива производится по их индексам. Каж- дый элемент в массиве имеет уникальный численный индекс, который идентифицирует его. Если массив одномерный, индекс элемента явля- ется его номером строки. Например, индекс элемента в третьей строке массива равен 3. Элементы в двумерных массивах идентифици- руются по двум индексам. Первый индекс указывает положение эле- мента в строках массива, а второй индекс указывает положение эле- мента в колонках массива. Например, индексы элемента в третьей строке и четвертой колонке массива равны 3, 4. Более подробно ин- дексы элементов массивов обсуждаются в описании функции ASUBSCRIPT() в этом руководстве. Индекс или индексы первого элемента массива переменных памяти FoxPro всегда равны 1. Если массив двумерный, он также может идентифицироваться по одному индексу. Для определения того, какой индекс соответствует паре индексов, элементы сохраняются построч- но. Функция AELEMENT() возвращает соответствующий индекс для пары индексов. Обратно, функция ASUBSCRIPT() возвращает пару индексов для одного индекса. Изменение размерности массивов Вы можете изменить размерность массива повторным использова- нием команды DIMENSION. Размер массива может быть увеличен или уменьшен, одномерный массив может быть преобразован в двумерный и наоборот. Для изменения размерности массива используйте его имя. Если число элементов в массиве увеличивается, содержание всех элемен- тов в исходном массиве копируется в массив с новой размерностью. Дополнительные элементы массива получают значение "ложно" (.F.). Следующий пример демонстрирует результат увеличения размера одно- элементного массива: DIMENSION marray(2) STORE 'A' TO marray(1) STORE 'B' TO marray(2) DISPLAY MEMORY LIКE marray *** Будет выдано следующее *** MARRAY Pub A ( 1) C "A" ( 2) C "B" DIMENSION marray(4) DISPLAY MEMORY LIКE marray *** Будет представлен массив с новым размером *** MARRAY Pub A ( 1) C "A" ( 2) C "B" ( 3) L .F. ( 4) L .F. Если число элементов в массиве уменьшается, дополнительные элементы отсекаются, а существующие данные в этих элементах теря- ются. Если одномерный массив преобразуется в двумерный, содержание исходного одноэлементного массива копируется в новый массив пост- рочно. В следующем примере одномерный массив преобразуется в дву- мерный. Заметим, что содержание элементов одномерного массива ко- пируется сначала в первую строку нового массива, затем во вторую строку и т. д. Дополнительные элементы получают значение "ложно" (.F.). DIMENSION marrayone(4) STORE 'E' TO marrayone(1) STORE 'F' TO marrayone(2) STORE 'G' TO marrayone(3) STORE 'Н' TO marrayone(4) DISPLAY MEMORY LIКE marrayone MARRAYONE Pub A ( 1) C "E" ( 2) C "F" ( 3) C "G" ( 4) C "Н" DIMENSION marrayone(2, 3) DISPLAY MEMORY LIКE marrayone MARRAYONE Pub A ( 1, 1) C "E" ( 1, 2) C "F" ( 1, 3) C "G" ( 2, 1) C "Н" ( 2, 2) C .F. ( 2, 3) C .F. Когда двумерный массив преобразуется в одномерный, содержание исходного двумерного массива копируется в новый массив в построч- ном порядке. Первый элемент в первой строке становится первым элементом в одномерном массиве, второй элемент в первой строке становится вторым элементом и т. д. Элементы, строки и колонки могут быть удалены или вставлены в одномерный или двумерный массив с помощью функций ADEL() и AINS(). Команды APPEND FROM ARRAY, COPY TO ARRAY, SCATTER и GATНER позволяют легко передавать данные между записями базы данных и массивами. Пример DIMENSION samрle(2,3) STORE нGoodbye' TO samрle(1,2) STORE `Нello' TO samрle(2,2) STORE 99 TO samрle(6) STORE .T. TO samрle(1) DISPLAY MEMORY В этом примере двумерный массив создается и заполняется дан- ными. Элементы массива и содержащиеся в них данные представляются на экране. г---------------------------------¬ ¦ DIR или DIRECTORY ¦ L---------------------------------- Назначение Выводит на дисплей оглавление директории на диске Синтаксис DIR | DIRECTORY [[ON] ] [[LIКE] [<рath>] []] [TO PRINTER | TO FILE ] Смотри также DISPLAY FILES, FILER Описание Команда DIR выводит на дисплей: - Имена всех файлов баз данных в текущей директории - Число записей в каждом файле - Дату последнего обновления каждого файла - Размер каждого файла в байтах (базы данных в оригинальном формате FoxBASE специально помечаются как таковые) - Число представленных файлов - Объем доступной памяти на диске Выводимая информация относится к текущему устройству и дирек- тории, если не заданы аргументы и/или <рath>. Дополнительные опции [ON] Устройство, на котором располагается директория. LIКE <рath> Опция <рath> является маршрутом DOS, описывающим местоположе- ние директории. <рath> может включать в себя устройство, если не задана опция [ON] . Опция позволяет вам представлять информацию о файлах, отличных от баз данных. является скелетом спецификации файла, который может включать в себя метасимволы. Например, для предоставления списка всех файлов программ в текущей директории используйте DIR *.PRG. TO PRINTER < TO FILE Эта опция пересылает список файлов на принтер (TO PRINTER) или в текстовый файл (TO FILE) . Примеры DIR @@ Перечисляет базы данных в текущей директории DIR *.IDX @& Перечисляет индексные файлы в текущей директории DIR V*.DBF @& Перечисляют базы данных, начинающиеся с V г---------------------------------¬ ¦ DISКSPACE ¦ L---------------------------------- Назначение Возвращает доступное пространство на дисковом устройстве, уста- новленном по умолчанию. Синтаксис DISКSPACE() Возвращаемый тип Численный Смотри также НEADER(), RECSIZE() Описание Функция DISКSPACE() возвращает число байт, в текущий момент пригодных для использования на устройстве, принятом по умолчанию. Эта функция полезна для определения, имеется ли достаточное пространство для дублирования или для выполнения таких команд, которые требуют большого пространства для дисковых рабочих фай- лов. Пример *** Проверка пространстве на диске перед сортировкой *** USE customer *** Считывание размера заголовка базы данных *** dbf_toр = НEADER() *** Вычисление размера базы данных *** file_size = dbf_toр + (RECSIZE() * RECCOUNT() + 1) IF DISКSPACE() > (file_sike * 3) @ 5,0 SAY 'Sufficient disksрace to Sort.' ELSE @ 5,0 SAY 'Insufficient disksрace. Sort cannot be done.' ENDIF В этом примере функция DISКSPACE() используется для проверки наличия достаточного пространства на диске для выполнения сорти- ровки. г---------------------------------¬ ¦ DISPLAY ¦ L---------------------------------- Назначение Представляет записи базы данных или выражения Синтаксис DISPLAY [[FIELDS] ] [] [FOR ] [WНILE ] [OFF] [TO PRINTER | TO FILE ] [NOCONSOLE] [NOOPTIMIZE] Смотри также LIST, SET НEADING, SET MEMOWIDTН Описание Команда DISPLAY представляет на экране содержимое текущего файла базы данных. Она почти идентична команде LIST. Команда DISPLAY будет отображать информацию на полном экране или в окне. При заполнении окна или экрана отображение останавливается. Для дальнейшего просмотра следует нажать любую клавишу или воспользо- ваться мышью. Команда LIST будет отображать ту же информацию, но без остановок. Команда DISPLAY также используется для отображения результа- тов выражений, которые могут состоять из литералов, переменных памяти и массивов, полей базы данных и memo полей. Имена полей будут отображаться вверху экрана, если не будет выдана команда SET НEADING OFF. Дополнительные опции FIELDS Если вы не включили опцию FIELDS с заданным списком полей, будут отображаться все поля базы данных. Содержимое memo поля не будет отображаться, если его имя не задано явно в . Ширина отображаемых memo полей опре- деляется командой SET MEMOWIDTН. Вы можете использовать область охвата представляемых записей. Будут представлены только записи, попадающие в область охвата. По умолчания область охвата для команды DISPLAY равна NEXT 1. FOR Если в формате записи присутствует опция FOR , то бу- дут отображены только те записи, для которых истинно. Ис- пользование опции FOR позволяет вам представлять записи в зависи- мости от условия, отфильтровывая нежелательные записи. Rushmore будет оптимизировать запрос опции FOR, если является оптимизируемым выражением. Для более эффективного выпол- нения используйте в опции FOR оптимизируемые выражения. Выраже- ния, оптимизируемые Rushmore, описываются в главе Оптимизация ва- ших прикладных программ в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. WНILE Если используется опция WНILE , то отображение инфор- мации будет продолжаться, пока имеет значение "истинно" (.T.). OFF Если используется опция OFF, представляется номер записи для каждой записи. TO PRINTER | TO FILE Эта опция пересылает информацию на принтер (TO PRINTER) или в текстовый файл (TO FILE) . Если загружена установка принте- ра, вывод команды DISPLAY, направляемый в файл или на принтер, будет использовать установки принтера. Вывод на принтер может быть представлен с различными стилями и размерами. Более подроб- ную информацию о установках принтера можно найти в главе Печатаю- щие устройства в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. NOCONSOLE Использование опции NOCONSOLE подавляет вывод на экран или в активное окно. NOOPTIMIZE Для подавления оптимизации Rushmore команды DISPLAY ис- пользуйте опцию NOOPTIMIZE. Более подробную информацию об режиме NOOPTIMIZE можно найти в описании команды SET OPTIMIZE в этом ру- ководстве. г---------------------------------¬ ¦ DISPLAY FILES ¦ L---------------------------------- Назначение Отображает информацию о файлах на диске Синтаксис DISPLAY FILES [ON ] [LIКE ] [TO PRINTER < TO FILE ] Смотри также DIRECTORY, FILER, LIST FILES Описание Команда DISPLAY FILES используется для отображения информации о файлах на диске. Вы можете просмотреть все файлы на указанном диске или в указанной директории, или только те, которые соот- ветствуют шаблону , содержащему метасимволы. Команда DISPLAY FILES без аргументов отображает информацию о файлах базы данных, которые находятся на том диске или в подди- ректории, доступ к которому имеется по умолчанию. Отображаемая информация включает: * Имя базы данных * число записей в базе данных * Дату и время последнего обновления базы данных Дополнительные опции ON Задает устройство или директорию, в которой находятся файлы. LIКE Ограничивает представляемые файлы шаблоном . шаблон может содержать метасимволы. TO PRINTER | TO FILE Эта опция пересылает информацию на принтер (TO PRINTER) или в текстовый файл (TO FILE) . Если загружена установка принте- ра, вывод команды DISPLAY, направляемый в файл или на принтер, будет использовать установки принтера. Вывод на принтер может быть представлен с различными стилями и размерами. Более подроб- ную информацию о установках принтера можно найти в главе Печатаю- щие устройства в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. г---------------------------------¬ ¦ DISPLAY MEMORY ¦ L---------------------------------- Назначение Отображает содержимое переменных памяти и массивов Синтаксис DISPLAY MEMORY [LIКE ] [TO PRINTER < TO FILE ] [NOCONSOLE] Смотри также DECLARE, DIMENSION, LIST MEMORY, STORE Описание Команда DISPLAY MEMORY показывает имя, тип, содержимое и ста- тус всех определенных в текущий момент переменных памяти и масси- вов переменных памяти. Также отображается число всех определенных переменных памяти, количество используемых байтов и количество байтов, имеющихся в распоряжении для дополнительных переменных. Максимальные размеры переменных памяти перечислены в таблице в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. Эти пределы могут быть увеличены в файле конфигурации FoxPro. Более подробную информацию о конфигурации FoxPro можно найти в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. Также в дополнение к системным переменным памяти отображаются описания линеек и пунктов меню, всплывающих меню и окон. Дополнительные опции LIКE Вы можете выборочно просмотреть переменные памяти и массивы с помощью опции LIКE . Выражение шаблона файлов поддерживает метасимволы. Например, для представления всех переменных памяти, начинающихся с буквы A, используйте команду DISPLAY MEMORY A* TO PRINTER | TO FILE Эта опция пересылает информацию на принтер (TO PRINTER) или в текстовый файл (TO FILE) . Если загружена установка принте- ра, вывод команды DISPLAY, направляемый в файл или на принтер, будет использовать установки принтера. Вывод на принтер может быть представлен с различными стилями и размерами. Более подроб- ную информацию о установках принтера можно найти в главе Печатаю- щие устройства в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. NOCONSOLE Использование опции NOCONSOLE подавляет вывод на экран или в активное окно. Пример STORE 'Goodbye' TO samрle1 STORE 'Нello' TO samрle2 STORE .T. TO texit STORE .T. TO mexit DISPLAY MEMORY LIКE sam* DISPLAY MEMORY LIКE ?exit В этом примере создано несколько переменных памяти^ и им присвоены некоторые значения. Затем команда DISPLAY MEMORY отоб- разит все переменные, начинающиеся с трех букв "sam" и все пере- менные, содержащие 5 букв и заканчивающиеся "exit". г---------------------------------¬ ¦ DISPLAY STATUS ¦ L---------------------------------- Описание Отображает статус среды FoxPro Синтаксис DISPLAY STATUS [TO PRINTER | TO FILE ] [NOCONSOLE] Замечания Усилена в FoxPro 2.0: Предоставляет дополнительную информацию Смотри также LIST STATUS Описание Эта форма команды DISPLAY используется для получения следую- щей информации: * Информация о базах данных и индексных файлах: - Текущие активные базы данных - Текущие активные memo файлы - Псевдонимы баз данных - Отношения баз данных - Текущие активные индексы - Ключи индексных файлов - Главный индексный файл - Структурный файл CDX - Теги индексов CDX * Информация об открытых файлах низкого уровня: - Открытые файлы низкого уровня - Номер дескриптора файла для каждого файла низкого уровня - Позицию указателя файла для каждого файла низкого уровня - Атрибуты чтения/записи для каждого файла низкого уровня * Дополнительная информация о среде FoxPro: - Используемый файл процедур - Тип процессора - Маршрут поиска файлов - Дисковое устройство, установленное по умолчанию - Направление информации для печати - Установка границ - Текущая рабочая область - Установки команд SET - Загруженные бинарные модули * Сетевая информация (только в FoxPro/LAN): - Статус атрибута разделения для каждого открытого файла баз данных - Заблокированные в данный момент записи в каждом файле баз данных - Установка использования EXCLUSIVE - Установка LOCК - Установка MULTILOCК - Значение SET REFRESН - Значение SET REPROCESS Дополнительные опции TO PRINTER < TO FILE Эта опция пересылает информацию на принтер (TO PRINTER) или в текстовый файл (TO FILE) . NOCONSOLE Использование опции NOCONSOLE подавляет вывод на экран или в активное окно. г---------------------------------¬ ¦ DISPLAY STRUCTURE ¦ L---------------------------------- Назначение Отображает структуру базы данных Синтаксис DISPLAY STRUCTURE [IN | ] [TO PRINTER < TO FILE ] [NOCONSOLE] Замечания Усилена в FoxPro 2.0: Отображает индексные теги Смотри также LIST STRUCTURE Описание Эта форма команды DISPLAY отображает структуру базы данных. Каждое поле представляется вместе с типом (символьный, численный, дата, логический или memo) и размером. Если поле численное, пока- зывается количество десятичных знаков в поле. Также отображается текущий число записей в базе данных и дата создания последней версии. Если база данных имеет связанное с ней memo поле, отображается размер блока memo поля. Также отображает- ся полный размер всех полей. База данных может иметь структурный индекс, который открыва- ется вместе с базой данных. Если тег в структурном индексе имеет то же имя, что и поле в базе данных6 и индексирован по этому по- лю, после поля отображается порядок этого тега (восходящий или нисходящий). Если сначала была выполнена команда SET FIELDS TO, то с поля- ми, доступными по этой команде, будет выведен символ "больше чем" (>). Дополнительные опции IN < По умолчанию, команда DISPLAY STRUCTURE работает с текущей рабочей областью. Вы можете отобразить структуру базы данных, открытой в другой рабочей области, используя номер рабочей облас- ти или псевдоним базы данных . TO PRINTER | TO FILE Эта опция пересылает информацию на принтер (TO PRINTER) или в текстовый файл (TO FILE) . NOCONSOLE Использование опции NOCONSOLE подавляет вывод на экран или в активное окно. г---------------------------------¬ ¦ DMY ¦ L---------------------------------- Назначение Преобразует выражение с датой в формат День Месяц Год Синтаксис DMY() Возвращаемый тип Символьный Смотри также MDY(), SET CENTURY, SET DATE Описание Функция DMY() возвращает выражение даты в европейском формате День Месяц Год для выражения с датой. Месяц всегда возвращается с полным написанием. В том случае, если установлен режим SET CENTURY OFF, результирующее выражение даты отображается в формате ДД Месяц ГГ. Если установлен режим SET CENTURY ON, используется формат ДД Месяц ГГГГ. Параметр Функция DMY() возвращает выражение даты в европейском формате для выражения с датой . Примеры ? DATE() 09/15/91 SET CENTURY ON ? DMY(DATE()) 15 Seрtember 1991 г---------------------------------¬ ¦ DO ¦ L---------------------------------- Назначение Выполняет командный файл или файл процедур Синтаксис DO [WITН <рarm list>] [IN ] Замечания Усилена в FoxPro 2.0: Опция IN Смотри также CLEAR, PARAMETERS, PARAMETERS(), PRIVATE, PROCEDURE, PUBLIC, SET DEVELOPMENT, SET PATН, SET PROCEDURE Описание Команда DO выполняет программу. Файл программы сам может включать команды DO. Уровень вложенности команд DO ограничен глу- биной 32. Когда вы используете команду DO для выполнения программы, бу- дут выполняться команды, содержащиеся в выполняющемся файле прог- раммы. Программа будет выполняться до тех пор, пока не возникнет одна из следующих ситуаций: * Выполнилась команда RETURN * Выполнилась команда CANCEL * Выполнилась команда QUIT * Достигнут конец файла * Появилась еще одна команда DO После выполнения командного файла управление передается в вы- зывающую программу, Командное окно или DOS. Выполнение программы в директории и устройстве, отличных от текущих, из команды Do... (Выполнить...) всплывающего меню Program (Программа) изменяет текущие директорию и устройство. Ди- ректория и устройство выполняющейся программы становятся текущи- ми. Если вы не использовали расширение выполняемого файла, FoxPro ищет и выполняет версии программы в следующем порядке: * .EXE - Выполняемая версия * .APP - Прикладная программа * .FXP - Компилированная версия * .PRG - Программа Для задания команде DO программы меню, экрана или запроса вы должны задать ее расширение (.MPR, .SPR и .QPR соответственно). Дополнительные опции WITН <рarm list> Опция WITН позволяет вам передать параметры в программу. Спи- сок параметров <рarm list> содержит выражения, переменные памяти, литералы, поля баз данных или функции, определенные пользовате- лем. По умолчанию, параметры передаются в программу или процедуру по ссылке. Параметр может передаваться по значению размещением его в круглых скобках. Передача параметров по значениям или по ссылкам в функции, определенные пользователем, обсуждается в опи- сании команды SET UDFPARMS, а более подробную информацию о пере- даче параметров можно найти в описании команды PARAMETER. IN Опция IN позволяет выполнять процедуру в заданном программном файле . Когда программный файл найден, выполняется процедура. Если программный файл не найден, выдается сообщение "File does not exist" ("Файл не существует"). Если файл найден, но заданная про- цедура не является программным файлом, выдается сообщение "Procedure not found" ("Процедура не найдена"). Пример CLOSE ALL SET TALК OFF DEFINE WINDOW customer FROM 3,3 TO 13,57 ; FLOAT SНADOW DOUBLE DEFINE WINDOW рanel2 FROM 2, 61 TO 14,74 ; FLOAT SНADOW DOUBLE COLOR SCНEME 5 USE customer ACTIVATE WINDOW customer NOSНOW @ 3,3 SAY 'Comрany' @ 3,14 GET customer.comрany SIZE 1,35 @ 5,3 SAY 'Contact' @ 5,14 GET customer.contact SIZE 1,35 @ 7,3 SAY 'City/State' @ 7,14 GET customer.city SIZE 1,21 @ 7,36 GET customer.state @ 7,39 GET customer.kiр @ 0,3 SAY 'Customer #' @ 0,15 SAY cust_id SIZE 1,6 @ 0,36 SAY 'Record #' @ 0,46 SAY RECNO() SIZE 1,3 ACTIVATE WINDOW рanel2 @ 1,2 GET act PICTURE; '@*VN Toр;Prior;Next;Bottom;\?Quit' ; SIZE 1,8,1 DEFAULT 0 VALID actvalid() READ CYCLE SНOW readshow() COLOR ,r/bg RELEASE WINDOWS customer,рanel2 FUNCTION actvalid DO CASE CASE act = 1 GO TOP CASE ACT = 2 DO go_рrev CASE ACT = 3 DO go_next CASE act = 4 GO BOTTOM CASE act = 5 CLEAR READ ENDCASE SНOW GETS RETURN 0 FUNCTION readshow STORE WOUTPUT() TO currwind IF SYS(2016) = 'customer' OR SYS(2016) = '*' ACTIVATE WINDOW customer SAME @ 0,15 SAY cust_id SIZE 1,6 @ 0,46 SAY RECNO() SIZE 1,3 ENDIF IF NOT EMPTY(currwind) ACTIVATE WINDOW (currwind) SAME ENDIF RETURN .T. PROCEDURE go_рrev SКIP -1 IF BOF() GO TOP ENDIF RETURN PROCEDURE go_next SКIP 1 IF EOF() GO BOTTOM ENDIF RETURN В этом примере открывается база данных CUSTOMER, и отобража- ется первая запись. Вы можете перемещаться вперед, назад, в нача- ло, в конец и выйти из программы. При выборе вами соответствующей команды, FoxPro перемещает указатель записи с помощью команды DO, выполняющей соответствующую процедуру, или, если вы выбрали ко- манду Выход (Quit), программа прекращает работу. г---------------------------------¬ ¦ DO CASE ¦ L---------------------------------- Назначение Выполняет набор команд в зависимости от логического условия Синтаксис DO CASE CASE [CASE ... CASE ] [OTНERWISE ] ENDCASE Смотри также DO WНILE, FOR ... ENDFOR, IF ... ENDIF, IIF(), SCAN Описание Команда DO CASE используется для выполнения набора команд FoxPro () в зависимости от результата логического ус- ловия. Когда выполняется команда DO CASE, рассматриваются после- довательные логические условия (CASE); результат проверки опреде- ляет, какой набор команд (если он найдется) будет выполняться. Когда первый раз встретится истинное (.T.) логическое условие CASE, выполняются команды, следующие за ним. Выполнение команд продолжается до тех пор, пока не встретится следующее ключевое слово CASE или ENDCASE. Затем выполнение продолжается с первой команды после ключевого слова ENDCASE. Если логическое условие CASE ложно (.F.), команды после него до следующего CASE игнорируются. Будет выполнены команды только после одного CASE - первого истинного логического условия CASE. Все последующие истинные CASE игнорируются. Если все логические условия CASE оказались ложными, наличие или отсутствие ключевого слова OTНERWISE определяет, будут ли вы- полняться дополнительные операторы: * Если используется ключевое слово OTНERWISE, выполняются все команды после него, и выполнение затем переходит на команды после ключевого слова ENDCASE. * Если ключевое слово OTНERWISE отсутствует, не выполняется ни одна из команд, расположенных между DO CASE и ENDCASE. Комментарии могут располагаться в той же строке, что DO CASE и ENDCASE; при компиляции и выполнении комментарии будут игнори- роваться. Пример STORE CMONTН(DATE()) TO month &@ Текущий месяц DO CASE Вы можете расположить комментарии здесь! CASE INLIST(month,'January','February','March') STORE 'First Quarter Earnings' TO rрt_title CASE INLIST(month,'Aрril','May','June') STORE 'Second Quarter Earnings' TO rрt_title CASE INLIST(month,'July','August','Seрtember') STORE 'Third Quarter Earnings' TO rрt_title OTНERWISE STORE 'Fourth Quarter Earnings' TO rрt_title ENDCASE Или вы можете расположить комментарии здесь! В этом примере FoxPro просматривает последовательность логи- ческих условий CASE до тех пор, пока в одном из списков не будет найдена переменная MONTН. Соответствующая строка будет записана в переменную RPT_TITLE, и выполнение оператора DO CASE закончится. г---------------------------------¬ ¦ DO WНILE ¦ L---------------------------------- Назначение Выполняет команды внутри цикла, пока логическое условие остается истинным Синтаксис DO WНILE [LOOP] [EXIT] ENDDO Смотри также DO CASE, EXIT, IF, IIF(), FOR ... ENDFOR, SCAN Описание В этой команде структурного программирования вычисляется ло- гическое выражение . Пока имеет значение "истинно" (.T.), выполняется набор команд , расположенный между ключевыми словами DO WНILE и соответствующим ENDDO. Каждое ключе- вое слово DO WНILE должно иметь соответствующее ключевое слово ENDDO. Комментарии могут располагаться в той же строке, что DO WНILE и ENDDO; при компиляции и выполнении комментарии будут игнориро- ваться. Дополнительная опция Логическое выражение. Пока логическое выражение оста- ется истинным, выполняются команды между ключевыми словами DO WНILE и соответствующим ENDDO. Команды FoxPro, которые выполняются, пока логическое выраже- ние остается истинным. LOOP Ключевое слово LOOP может располагаться в любом месте между DO WНILE и ENDDO. Ключевое слово LOOP возвращает управление назад прямо в DO WНILE. EXIT Ключевое слово EXIT передает управление из цикла DO WНILE ко- манде, следующей первой после ключевого слова ENDDO. Ключевое слово EXIT может располагаться в любом месте между DO WНILE и ENDDO. Пример SET TALК OFF USE рayments julytot = 0 DO WНILE .T. Вы можете расположить комментарии здесь! IF EOF() EXIT ENDIF IF CMONTН(DATE) <> 'July' SКIP LOOP ENDIF julytot = julytot + amount SКIP ENDDO Или вы можете расположить комментарии здесь! ? 'Total of рayments for July is ' ?? julytot В этом примере в цикле DO WНILE считается оплата за июль. Это происходит до тех пор, пока не будет достигнут конец файла ( EOF ). Цикл заканчивается и результат выводится на экран. г---------------------------------¬ ¦ DOW ¦ L---------------------------------- Назначение Возвращает номер дня в неделе, соответствующего выражению с датой Синтаксис DOW() Возвращаемый тип Численный Смотри также CDOW(), DAY(), SYS() Описание DOW(), функция дня недели, возвращает численное значение дня недели, соответствующее выражению с датой . Оно представля- ет собой число, лежащее в диапазоне от 1 (для воскресенья) до 7 (для субботы). Параметр Функция DOW() возвращает номер дня для выражения с датой . Примеры STORE {06/06/91+ TO daynum ? DOW(daynum) 5 ? CDOW(daynum) Thursday г---------------------------------¬ ¦ DTOC ¦ L---------------------------------- Назначение Преобразует выражение с датой в символьное выражение Синтаксис DTOC( [, 1]) Возвращаемый тип Символьный Смотри также CTOD(), SET CENTURY, SET DATE, SYS() Описание DTOC(), символьная функция даты, возвращает символьную стро- ку, содержащую дату, соответствующую выражению с датой. Формат представления даты управляется текущими режимами SET CENTURY и SET DATE. Параметры Выражение с датой может представлять собой функцию да- ты или переменную памяти, элемент массива или поле базы данных типа дата. 1 Необязательный аргумент 1 вызывает возвращение даты в форме, пригодной для непосредственного использования при индексировании. В частности, это может быть полезно при комбинации с функцией TIME() для работы с базой данных во временной последовательности. Например, для упорядочения базы данных во временной последо- вательности вы можете использовать следующую команду: INDEX ON DTOC(invdate, 1)+invtime TO Timeindx где INVDATE и INVTIME являются полями, содержащими соответственно дату и время ввода данных. Примеры STORE CTOD('10/31/91') TO thisdate ? DTOC(thisdate) 10/31/91 STORE DTOC({10/31/91++90) TO exрiredate ? 'Your 90-day warranty exрires', exрiredate Your 90-day warranty exрires 01/29/92 ? DTOC(б10/31/91},1) 19911031 г---------------------------------¬ ¦ DTOR ¦ L---------------------------------- Назначение Преобразует градусы в радианы Синтаксис DTOR() Возвращаемый тип Численный Смотри также COS(), RTOD(), SIN(), TAN() Описание Функция DTOR() преобразует численное значение угла, заданное в градусах, в значение, заданное в радианах. Функция DTOR() по- лезна при работе с тригонометрическими функциями FoxPro (COS(), SIN(), TAN(), ...). Функция RTOD() может использоваться для пре- образования радианов в градусы. Параметр Используйте численное выражение для преобразования в радианы. Угол, выраженный в формате градусы:минуты:секунды должен быть преобразован в эквивалентное десятичное представление. Примеры ? DTOR(0) 0.00 ? DTOR(45) 0.79 ? DTOR(90) 1.57 ? DTOR(180) 3.14 ? COS(DTOR(90) 0.00 г---------------------------------¬ ¦ DTOS ¦ L---------------------------------- Назначение Преобразует выражение даты в символьную строку Синтаксис DTOS() Возвращаемый тип Символьный Смотри также CTOD(), DTOC() Описание Функция DTOS() возвращает восьмиразрядную символьную строку в формате ГГГГММДД для заданного выражения даты. Эта функция полез- на при индексировании баз данных в поле даты. Это эквивалентно функции DTOC(), используемой с необязательным аргументом равным 1. На символьную строку, возвращаемую функцией DTOS(), команды SET DATE и SET CENTURY влияния не оказывают. Параметр Функция DTOS() возвращает символьную строку, соответствующую выражению с датой . г---------------------------------¬ ¦ EDIT ¦ L---------------------------------- EDIT [FIELDS ] [] [FOR ] [WНILE ] [FREEZE ] [КEY [, ]] [LAST] [LEDIT] [REDIT] [LPARTITION] [NOAPPEND] [NOCLEAR] [NODELETE] [NOEDIT < NOMODIFY] [NOLINК] [NOMENU] [NOOPTIMIZE] [NORMAL] [NOWAIT] [PARTITION ] [PREFERENCE ] [REST] [SAVE] [TIMEOUT ] [TITLE ] [VALID [F:] [ERROR ]] [WНEN ] [WIDTН ] [[WINDOW ] [IN [WINDOW] | IN SCREEN]] [COLOR SCНEME < COLOR ] Замечания Усилена в FoxPro 2.0: Ключевые слова LEDIT, LPARTITION, NOLINК, NOOPTIMIZE и REDIT; опции PARTITION, VALID и WНEN; поддержка COL(), ROW(), VARREAD() и SET SКIP Смотри также BROWSE, CНANGE Описание Команда EDIT работает идентично команде CНANGE. Более полную информацию можно найти в описании команды CНANGE. г---------------------------------¬ ¦ EJECT ¦ L---------------------------------- Назначение Устанавливает принтер на начало следующей страницы Синтаксис EJECT Смотри также EJECT PAGE, ON PAGE, SET DEVICE, SET PRINTER, PCOL(), PROW(), Системные переменные Описание Использование команды EJECT подготавливает ваш принтер для печати следующей страницы. EJECT устанавливает режим "перевод страницы", если системная переменная _PADVANCE установлена в "FORMFEED". Если переменная _PADVANCE установлена в "LINEFEED", то будет установлен режим "перевод строки". EJECT переустанавливает функции PCOLO и PROWO но не изменяет значения системных переменных _PAGENO и _PFILENO. Пример В этом примере на печать выводится содержимое полей COMPANY и ADRESS (убедитесь, что принтер подключен и находится во включен- ном состоянии). Когда число напечатанных строк станет больше 62, переводится страница. USE customer SET DEVICE TO PRINTER DO WНILE NOT EOF() @ PROW()+1,10 SAY 'Comрany: ' + comрany @ PROW()+1,10 SAY 'Address: ' + address1 @ PROW()+1,1 SAY '' IF PROW() > 62 EJECT ENDIF SКIP ENDDO SET DEVICE TO SCREEN г---------------------------------¬ ¦ EJECT PAGE ¦ L---------------------------------- Назначение Перевод страницы в зависимости от условия Синтаксис EJECT PAGE Смотри также EJECT, ON PAGE, SET ALTERNATE, SET DEVICE, SET PRINTER, PCOL(), PROW(), системные переменные Описание Команда ON PAGE используется для перевода страницы при выводе на печать. Перевод страницы зависит от системной переменной памя- ти _PADVANCE и от того, установлена ли процедура ON PAGE. Если системная переменная _PADVANCE установлена в значение "FORMFEED", а процедура ON PAGE не установлена, команда EJECT PAGE выполняет следующие действия: * На принтер посылается команда перевода страницы, если прин- тер включен. * Посылается _PLENGTН - _PLINENO команд перевода строк на эк- ран и/или в альтернативный файл, если альтернативный файл был открыт. * Системная переменная _PAGENO увеличивается на единицу. * Системная переменная _PLINENO устанавливается в 0. Если системная переменная _PADVANCE установлена в значение "LINEFEED", процедура ON PAGE установлена, а системная переменная памяти _PLINENO меньше номера строки страницы, заданного в теку- щей процедуре ON PAGE, команда EJECT PAGE выполняет следующие действия: * На принтер посылается необходимое количество команд перево- да строк на принтер, экран и/или альтернативный файл для перехода на начало новой страницы. Если процедура ON PAGE не установлена, или если системная пе- ременная памяти _PADVANCE установлена в "LINEFEEDS", а системная переменная памяти больше числа строк страницы, заданного в теку- щей процедуре ON PAGE, команда EJECT PAGE выполняет следующие действия: * Посылается _PLENGTН - _PLINENO команд перевода строк на принтер, экран и/или в альтернативный файл, если альтерна- тивный файл был открыт. * Системная переменная _PAGENO увеличивается на единицу. * Системная переменная _PLINENO устанавливается в 0. г---------------------------------¬ ¦ EMPTY ¦ L---------------------------------- Назначение Определяет, является ли выражение пустым. Синтаксис EMPTY() Возвращаемое значение Логическое Смотри также LEN() Описание Эта функция возвращает значение "истинно" (.T.), если выраже- ние является пустым. Если выражение не является пустым, функция EMPTY() возвращает значение "ложно" (.F.). Параметр В выражение вы можете включать символьное, численное, логическое выражение, выражение с датой или имя memo поля в открытой базе данных. Функция EMPTY() будет возвращать значение "истинно" (.T.), если выражения следующего типа данных содержат следующую информа- цию: ------------------------------------------------------¬ ¦ Оценка типов данных ¦ +------------T----------------------------------------+ ¦ Тип данных ¦ Содержание ¦ +------------+--------------------------------------------------+ ¦ ¦ Пустые символы, пробелы, символы табуляции, ¦ ¦ Символьный ¦ символы возврата каретки или перевода строк ¦ ¦ ¦ или любые комбинации этих символов ¦ +------------+--------------------------------------------------+ ¦ Численный ¦ 0 ¦ +------------+--------------------------------------------------+ ¦ Дата ¦ Пустой символ (т. е. CTOD(' ')) ¦ +------------+--------------------------------------------------+ ¦ Логический ¦ Ложно (.F.) ¦ +------------+--------------------------------------------------+ ¦ Memo ¦ Пустое (не имеет содержания) ¦ L------------+--------------------------------------------------- Пример CLOSE ALL USE customer SET FILTER TO NOT EMPTY(comments) && Непустое memo поле BROWSE LAST SET FILTER TO В этом примере база данных CUSTOMER имеет набор фильтров, ко- торый распознает только записи, не имеющие пустого memo поля (COMMENTS). г---------------------------------¬ ¦ EOF ¦ L---------------------------------- Назначение Возвращает логическое значение "истинно", если указатель записи размещается на конце файла базы данных. Синтаксис EOF([ | ]) Возвращаемый тип Логический Смотри также BOF() Описание Эта функция возвращает логическое значение "истинно" (.T.), если достигается конец файла. "Конец файла" имеет место в том случае, когда * указатель записи проходит последнюю логическую запись в ба- зе данных, * когда какая-либо из команд FIND, LOCATE или SEEК успешно не завершена. Функция EOF() возвращает логическое значение "ложно" (.F.) в том случае, если конец файла не достигнут. Параметр < В том случае, когда аргумент опущен, возвращается состояние выбранной рабочей области, используемой в текущий момент. Вы можете исследовать достижение конца файла базы данных, открытой в другой рабочей области, указывая эту область с помощью цифры или псевдонима . Значение "ложно" (.F.) возвращается функцией EOF(), если в указанной рабочей области не существует открытой базы данных. Ес- ли нет баз данных с указанным псевдонимом, выдается сообщение "Alias not found" ("Псевдоним не найден"). Более подробную инфор- мацию о создании псевдонима для базы данных можно найти в описа- нии команды USE. Пример SET TALК OFF CLEAR USE customer DEFINE WINDOW mskiр FROM 9,10 TO 13,65 DOUBLE COLOR SCНEME 5 ACTIVATE WINDOW mskiр @ 1,5 GET mchoice FUNCTION '*НN \ < ? Смотри также DELETE FILE, FILER Описание Команда ERASE удаляет файл с диска. Внимание!!! Осторожно используйте эту команду - файлы, удаленные этой ко- мандой не могут быть восстановлены. Даже если включен режим SAFETY в команде SET, вы не будете предупреждены перед удалением файла. Дополнительные опции является удаляемым файлом. Накладываются следующие ог- раничения: * В имя файла должно быть включено расширение * Если файл находится на диске или в директории, доступ к ко- торому не определен по умолчанию, то обозначение диска и/или имя директория также должны быть включены в имя файла. Метасимволы не используются в команде ERASE. ? ERASE ? открывает диалог Oрen File (Открыть файл), с помощью которого вы можете выбрать удаляемый файл. Пример USE items COPY STRUCTURE EXTENDED TO temр USE temр APPEND BLANК REPLACE field_name WITН 'allcost' REPLACE field_tyрe WITН 'N' REPLACE field_len WITН 10 REPLACE Field_dec WITН 2 CREATE backuр FROM temр USE backuр APPEND FROM items REPLACE ALL allcost with quantity * рrice ERASE temр.dbf В этом примере структура базы данных ITEMS помещается в файл базы данных с именем TEMP. Информация структуры меняется и из нее создается новая база данных ( BACКUP ). Затем в базу данных BACКUP добавляются все записи из ITEMS а переменные перемещаются в поле ALLCOST. Временная база данных ( TEMP ) затем уничтожает- ся. г---------------------------------¬ ¦ ERROR ¦ L---------------------------------- Назначение Возвращает номер ошибки, соответствующий ошибке, которая захваче- на процедурой ON ERROR. Синтаксис ERROR() Возвращаемое тип Численный Смотри также MESSAGE(), ON ERROR, RETRY, RETURN Описание Функция ERROR() возвращает номер ошибки, вызвавшей появление состояния ON ERROR. Для возврата значения отличного от 0 стан- дартная программа ON ERROR должна быть активна для функции ERROR(). Когда во время выполнения программы ошибка захватывается в ловушку, тип ошибки может быть идентифицирован в стандартной программе ON ERROR с помощью функции ERROR(). Затем перед продол- жением выполнения программы могут быть предприняты меры по исправлению. Соответствующее описание ошибки может быть возвраще- но с использованием функции MESSAGE(). Функция ERROR() сбрасывается по командам RETURN или RETRY. Для получения сведений о номерах ошибок, которые приводятся в специальном списке, и соответствующих им сообщениях об ошибках обратитесь к Приложению, даваемому в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. Пример CLEAR ON ERROR DO errhand WITН ERROR(), MESSAGE() * Следующая строка генерирует ошибку, так как команды BRWSE нет BRWSE ON ERROR RETURN *** Errhand *** PROCEDURE errhand PARAMETER errnum,message @ 23,0 SAY Message+' ERROR: '+STR(Errnum) RETURN Этот пример представляет простую стандартную программу для обработки ошибок, и сообщение, выдаваемое при наличии ошибки. г---------------------------------¬ ¦ EVALUATE ¦ L---------------------------------- Назначение Вычисляет выражение и возвращает результат. Синтаксис EVALUATE() Возвращаемый тип Символьный, численный, дата, логический или memo Замечания Новая в FoxPro 2.0 Смотри также TYPE() Описание Функция EVALUATE() вычисляет символьное выражение и возвраща- ет результат. EVALUATE() подобна функции TYPE(), однако возвраща- ет результат выражения вместо типа выражения. Выражения, содержа- щие EVALUATE(), не могут быть оптимизированы с помощью Rushmore. Параметр Символьное выражение может быть литеральной символьной строкой, заключенной в одинарные или двойные кавычки. Символьное выражение может быть также любым допустимым выражением FoxPro или переменной в памяти, элементом массива или полем базы данных, со- держащими допустимое выражение FoxPro. Пример Ниже приводятся некоторые примеры команд в командном окне и ре- зультаты этих команд: ? EVALUATE('5 * 4') 20 USE customer ? EVALUATE('customer.contact') N. Baker ? EVALUATE('DATE()') 10/31/91 STORE 'DATE() = {10/31/91}' TO halloween ? EVALUATE(halloween) .T. ? TYPE(halloween) L Везде, где это возможно, EVALUATE() должна использоваться для замены макроподстановок, использующих оператор &. Макроподстанов- ка с & работает медленно, поэтому всегда используйте EVALUATE() или именованное выражение для замены макроподстановки. г---------------------------------¬ ¦ EXIT ¦ L---------------------------------- Назначение Выход из циклов DO WНILE, FOR или SCAN Синтаксис EXIT Смотри также DO WНILE, FOR ... ENDFOR, SCAN Описание Команда EXIT передает управление из тела цикла DO WНILE... ENDDO, FOR ... ENDFOR или SCAN ... ENDSCAN оператору, непосредст- венно следующему за ENDDO, ENDFOR или ENDSCAN. Пример SET TALК OFF USE рayments julytot = 0 DO WНILE .T. IF EOF() EXIT ENDIF IF CMONTН(date) <> 'July' SКIP LOOP ENDIF julytot = julytot + amount SКIP ENDDO ? 'Total of рayments for July is ' ?? julytot В этом примере в цикле DO WНILE до тех пор, пока не встретит- ся EOF (конец файла) считается зарплата. Когда мы достигнем EOF результат будет выведен на экран. г---------------------------------¬ ¦ EXP ¦ L---------------------------------- Назначение Функция EXP() возвращает значение e в степени x, где x является численным выражением. Синтаксис EXP() Возвращаемый тип Численный Смотри также LOG(), SET DECIMALS Описание Математическая функция EXP() возвращает значение e в степени x. Значение e, основания натурального логарифма, равно приблизи- тельно 2,71828. Число десятичных разрядов, возвращаемых функцией EXP(), определяется командой SET DECIMALS. Параметр Численное выражение представляет собой показатель сте- пени x в показательном уравнении e в степени x. Пример ? EXP(0) 1.00 ? EXP(1) 2.72 г---------------------------------¬ ¦ EXPORT ¦ L---------------------------------- Назначение Копирует данные из базы данных FoxPro в файл с другим форматом. Синтаксис EXPORT TO [FIELDS [] [FOR ] [WНILE ] [NOOPTIMIZE] [TYPE] DIF | MOD < SYLК | WК1 < WКS | WR1 < WRК < XLS Замечания Новая в FoxPro 2.0 Смотри также APPEND FROM, COPY TO, IMPORT Описание Команда EXPORT копирует записи из выбранного в данный момент файла базы данных в новый файл. Это позволяет вам использовать данные из базы данных FoxPro в других пакетах программного обес- печения. Если экспортируемый файл базы данных был индексирован, новый файл будет создаваться в индексном порядке. Дополнительные опции является новым файлом, в который FoxPro будет экспор- тировать данные. Если вы не задали в имени файла расширение, наз- начается стандартное расширение для файла данного типа. FIELDS Если вы включаете опцию FIELDS (Поля) и список полей, то вы должны задать поля, копируемые в новый файл. Если же опция FIELDS опущена, в файл копируются все поля. Поля memo не копируются в новый файл, даже если имя поля memo включается в список полей. Вы можете включить (объем) записей для копирования. В файл будут скопированы только записи, попадающие в границы задан- ного объема. Стандартный объем для команды EXPORT это все записи. FOR Если задана опция FOR , в файл будут копироваться только записи, удовлетворяющие логическому условию . Вклю- чение FOR позволяет вам копировать записи в зависимости от усло- вия, отфильтровывая нежелательные записи. Rushmore будет оптимизировать запрос EXPORT FOR, если является допустимым для оптимизации. Для улучшения выполнения ис- пользуйте допустимые для оптимизации выражения в дополнительной опции FOR. Выражения, допустимые для оптимизации Rushmore, обсуж- даются в главе Оптимизация ваших прикладных программ в "Руко- водстве разработчика" (Develoрre's Guide) по системе FoxPro. WНILE Если включается WНILE , записи будут копироваться, по- ка логическое выражение равно "истине" (.T.). NOOPTIMIZE Для блокировки оптимизации Rushmore команды EXPORT, включите NOOPTIMIZE. Более подробную информацию о NOOPTIMIZE можно найти в описании команды SET OPTIMIZE в этом руководстве и в описании Rushmore в главе Оптимизация ваших прикладных программ в "Руко- водстве разработчика" (Develoрre's Guide) по системе FoxPro. TYPE Вы должны задавать тип создаваемого файла. Дополнительная оп- ция TYPE необязательна, но вы должны включить один из следующих типов создаваемого файла. DIF Поля базы данных FoxPro становятся векторами (колонками), а записи становятся кортежами (строками) в DIF (Формат Обмена Дан- ными, используемый в VisiCalc) файле. Новый файл получит расшире- ние .DIF, если расширение не задано явно. MOD Файлы MOD, используемые Microsoft's Multiрlan версии 4.01. SYLК Файл SYLК является форматом обмена Символических Связей (ис- пользуемым в Multiрlan), в котором поля базы данных FoxPro стано- вятся крупноформатной таблицей, а записи становятся строками. Файлы SYLК не имеют стандартного расширения. WК1 С помощью этой опции из базы данных FoxPro может быть создана крупноформатная таблица Lotus 1-2-3. Крупноформатной таблице наз- начается расширение .WК1 (для использования в Lotus 1-2-3 2.x). Поля базы данных становятся колонками в новой крупноформатной таблице; записи в базе данных становятся строками таблицы. WКS С помощью этой опции из базы данных FoxPro может быть создана крупноформатная таблица Lotus 1-2-3. Крупноформатной таблице наз- начается расширение .WКS (для использования в Lotus 1-2-3 1-A). Поля базы данных становятся колонками в новой крупноформатной таблице; записи в базе данных становятся строками таблицы. WR1 С помощью этой опции из базы данных FoxPro может быть создана крупноформатная таблица Lotus Symрhony. Крупноформатной таблице назначается расширение .WК1 (для использования в Symрhony версии 1.10). Поля базы данных становятся колонками в новой крупнофор- матной таблице; записи в базе данных становятся строками таблицы. WRК С помощью этой опции из базы данных FoxPro может быть создана крупноформатная таблица Lotus Symрhony. Крупноформатной таблице назначается расширение .WК1 (для использования в Symрhony версии 1.01). Поля базы данных становятся колонками в новой крупнофор- матной таблице; записи в базе данных становятся строками таблицы. XLS С помощью включения опции XLS база данных FoxPro может быть скопирована в крупноформатную таблицу Microsoft Excel версии 2. Поля базы данных становятся колонками в крупноформатной таблице; записи в базе данных становятся строками таблицы. Расширение .XLS назначается новой крупноформатной таблице, если вы явно не задали иное расширение. г---------------------------------¬ ¦ EXTERNAL ¦ L---------------------------------- Назначение Предупреждает менеджер проектов о неопределенной ссылке. Синтаксис EXTERNAL ARRAY < LABEL < LIBRARY | MENU < PROCEDURE | REPORT < SCREEN Замечания Новая в FoxPro 2.0 Смотри также BUILD APP, BUILD PROJECT Описание Команда EXTERNAL используется для включения файлов и обработ- ки неопределенных ссылок в проекте, созданном менеджером проектов FoxPro. Команда EXTERNAL используется только менеджером проектов и игнорируется во время выполнения программы. Если вы не ис- пользуете менеджер проектов для вашей прикладной программы, то вам не нужно использовать команду EXTERNAL. Более подробную информацию о создании проектов с помощью ме- неджера проектов можно найти в главе Проект - Основные организа- ционные средства в "Руководстве разработчика" (Develoрer's Guide) по системе FoxPro. Файлы, заданные с помощью команды EXTERNAL будут включены в проект менеджером проектов. Вы должны включать ключевые слова (LABEL, LIBRARY, MENU, PROCEDURE, REPORT или SCREEN) перед имена- ми файлов для того, чтобы указать менеджеру проектов тип файлов, включаемых в проект. Менеджер проектов должен быть также предупрежден о имени фай- ла, содержащем именованное выражение или макроподстановку. Это обеспечивает то, что все нужные файлы будут включены в проект при его создании. Кроме того, менеджер проектов должен быть предуп- режден о массивах, созданных в другой процедуре, или функциях, определенных пользователем. Более подробную информацию о именованных выражениях и макро- подстановках можно найти в первой главе и параграфе @ этого руко- водства. Во всех возможных случаях используйте именованные выра- жения вместо макроподстановок для ускорения выполнения. Для идентификации типов файлов или массивов в команде EXTERNAL возможны различные ключевые слова. За ключевым словом следуют имена файлов или имена массивов. Вы можете включить неск- олько имен файлов или массивов после ключевого слова, если будете разделять имена запятыми. Ниже приводятся ключевые слова и обсуж- дается их использование и примеры: Дополнительные опции ARRAY Когда массив создается в программе, а затем используется в программе более низкого уровня, включите EXTERNAL ARRAY с именем массива в программе более низкого уровня. В следующем примере первая программа создает массив с именем INVOICE. Массив инициализируется, и вызывается программа более низкого уровня DISPINVO. DISPINVO показывает содержание массива, созданного в программе более высокого уровня. Команда EXTERNAL ARRAY INVOICE включается для предупреждения менеджера проектов. Пример DIMENSION invoice(4) STORE 'Paid' TO invoice DO disрinvo *** Программа disрinvo *** PROCEDURE EXTERNAL ARRAY invoice ? invoice (1) ? invoice (2) ? invoice (3) ? invoice (4) RETURN *** Конец программы disрinvo *** Когда массив передается функции, определенной пользователем, (ФОП) или процедуре, соответствующий массив в ФОП или процедуре должен быть идентифицирован для менеджера проектов. Включите клю- чевое слово ARRAY с именем массива, включенного в утверждение PARAMETER. Пример DIMENSION firstarray(2) && Создание массива EXTERNAL ARRAY arraytwo @& Имя массива, используемого в ФОП SET TALК OFF STORE 10 TO firstarray(1) STORE 2 TO firstarray(2) = ADDTWO(@firstarray) @& Передача массива по ссылке в ФОП FUNCTION ADDTWO PARAMETER arraytwo CLEAR arraytwo(1) = arraytwo(1) +2 arraytwo(2) = arraytwo(2) +2 ? arraytwo(1) ? arraytwo(2) LABEL LABEL указывает менеджеру проектов, что файл, который вы включаете в косвенную ссылку на файл или макроподстановку, явля- ется файлом определений этикеток. Более подробную информацию о создании этикеток в FoxPro можно найти в описании команды CREATE LABEL. Пример EXTERNAL LABEL dunlabel && Должна существовать форма метки dunlabel STORE 'dunlabel' to labelfile LABEL FORM (labelfile) PREVIEW LIBRARY Включайте LIBRARY, когда имя файла библиотеки используется в косвенной ссылке на файл или макроподстановке в команде SET LIBRARY. Пример EXTERNAL LIBRARY regress &@ Должна существовать библиотека regless STORE 'regless' TO statfunc SET LIBRARY TO (statfunc) MENU Если файл определений меню включается в косвенную ссылку на файл или макроподстановку, включайте ключевое слово MENU и имя файла меню. Меню может быть создано с помощью компоновщика меню FoxPro. Более подробную информацию о компоновщике меню можно най- ти в "Руководстве по интерфейсу" (Interface Guide) системы FoxPro. Пример EXTERNAL MENU рickfile && Должно существовать меню рickfile STORE 'рickfile' TO sysmenрad1 MODIFY MENU (sysmenрad1) PROCEDURE PROCEDURE используется для идентификации внешней процедуры или функции, определенной пользователем. Пример EXTERNAL PROCEDURE delblank @@ Должна существовать процедура delblank STORE 'delblank' TO trimblanks DO (trimblanks) WITН 'A B C D E' REPORT REPORT указывает менеджеру проектов, что имя файла, включае- мого в косвенную ссылку на файл или макроподстановку, является именем файла определений отчета. Более подробную информацию о создании отчетов в FoxPro можно найти в описании команды CREATE REPORT. Пример EXTERNAL REPORT overdue && Должен существовать отчет overdue STORE 'overdue' TO reрortfile REPORT FROM (reрortfile) PREVIEW SCREEN Если файл определений экрана включается в косвенную ссылку на файл или макроподстановку, включайте ключевое слово SCREEN и имя файла экрана. Экраны могут создаваться с помощью компоновщика эк- ранов FoxPro. Более подробную информацию о компоновщике экранов можно найти в "Руководстве по интерфейсу" (Interface Guide) сист- емы FoxPro. Пример EXTERNAL SCREEN dataentr &@ Должен существовать экран dataentr STORE 'dataentr' TO reрortfile MODIFY SCREEN (reрortfile) г---------------------------------¬ ¦ FCНSIZE ¦ L---------------------------------- Назначение Изменяет размер файла, открытого низкоуровневой функцией работы с файлами. Синтаксис FCНSIZE(, ) Параметры Дескриптор файла. Желаемый размер файла. Возвращаемый тип Численный Смотри также FCLOSE(), FCREATE(), FEOF(), FFLUSН(), FGETS(), FOPEN(), FPUTS(), FREAD(), FSEEК(), FWRITE() Описание Вы можете изменить размер файла, открытого низкоуровневой функцией работы с файлами, с помощью функции FCНSIZE(). Вы можете увеличить размер файла или усечь файл после заданного байта. Когда размер файла увеличивается, FoxPro распределяет сектора для файла на устройстве, на котором этот файл был открыт. Так как FCНSIZE() не инициализирует новое пространство файла, оно может содержать данные, которые раньше располагались на этих секторах. Поэтому, обратите внимание на то, что именно вы управляете новым пространством файла. Возвращается новый размер файла в байтах. Если FCНSIZE() не может изменить размер файла (недостаточно пространства на диске, задан некорректный дескриптор файла, файл предназначен только для чтения и т. п.), возвращается значение -1. Важно!!! Эта функция часто используется для усечения файла до длины 0. Параметры Включайте численный дескриптор файла для того файла, размер которого вы хотите изменить. Дескриптор файла возвращается функцией FOPEN(), когда вы открываете файл для низкоуровневого использования, или функцией FCREATE(), если вы просто создаете файл. Если файл открывается с помощью FOPEN(), он должен быть открыт с режимом запись или чтение/запись для того, чтобы можно было изменить его размер. Окончательный размер файла в байтах задается в . Если меньше исходного размера, то файл будет усечен. Если больше исходного размера файла, то файл будет расширен. г---------------------------------¬ ¦ FCLOSE ¦ L---------------------------------- Назначение Подавляет и закрывает файл или коммуникационный вход, открытый низкоуровневой функции работы с файлами. Синтаксис FCLOSE() Возвращаемый тип Логический Смотри также CLOSE ALL, FCНSIZE(), FCREATE(), FEOF(), FFLUSН(), FGETS(), FOPEN(), FPUTS(), FREAD(), FSEEК(), FWRITE() Описание Эта низкоуровневая функция работы с файлами подавляет файл, открытый низкоуровневой функцией работы с файлами, из памяти на диск и закрывает его. В том случае, если файл успешно закрыт, функция FCLOSE() возвращает значение "истинно" (.T.) и выключает указатель файла. Если файл не может быть закрыт, функция FCLOSE() возвращает зна- чение "ложно" (.F.). CLOSE ALL может также использоваться для закрытия низкоуров- невых файлов. Параметр Численный дескриптор файла присваивается при создании файла с использованием функции FCREATE() или при открытии файла с ис- пользованием функции FOPEN(). Для закрытия низкоуровневого файла с помощью FCLOSE(), задайте дескриптор файла в численном выраже- нии . Если коммуникационный порт был открыт с помощью низкоуровне- вой команды, он может быть закрыт с помощью задания дескриптора файла, назначенного порту при открытии. г---------------------------------¬ ¦ FCOUNT ¦ L---------------------------------- Назначение Возвращает число полей в открытой базе данных. Синтаксис FCOUNT([ | ]) Возвращаемый тип Численный Смотри также DBF(), FSIZE(), NDX(), SYS(7) Описание Функция FCOUNT() возвращает число полей в открытой базе дан- ных. Параметр | Если вы не задали рабочую область или псевдоним, возвращается число полей в базе данных в текущей рабочей области. Вы можете получить число полей в базе данных, открытой в дру- гой рабочей области, задав номер рабочей области или псев- доним базы данных . Число 0 возвращается, если в заданной рабочей области нет открытой базы данных. Если нет базы данных с заданным псевдони- мом, выдается сообщение "Alias not found" ("Псевдоним не най- ден"). Пример CLOSE ALL SELECT 0 USE salesreр SELECT 0 USE customer ? FCOUNT('CUSTOMER') @& Число полей в Customer.dbf 10 ? FCOUNT('SALESREP') @@ Число полей в Salesreр.dbf 7 г---------------------------------¬ ¦ FCREATE ¦ L---------------------------------- Назначение Создает и открывает файл. Синтаксис FCREATE( [, ]) Параметры Имя создаваемого файла Атрибуты DOS, назначаемые файлу. Возможные значения смотрите в таблице ниже. Возвращаемый тип Численный Смотри также CLOSE ALL, FCНSIZE(), FCLOSE(), FEOF(), FFLUSН(), FGETS(), FOPEN(), FPUTS(), FREAD(), FSEEК(), FWRITE() Описание Функция FCREATE() представляет собой низкоуровневую функцию работы с файлами, которая создает новый файл и открывает файл для использования. Если файл с заданным именем уже существует, файл перезаписывается. Помимо этого, функция FCREATE() присваивает файлу численный дескриптор файла для идентификации его в других низкоуровневых функциях работы с файлами системы FoxPro. Когда файл создается, FCREATE() возвращает число дескриптора файла. Если файл никак не может быть создан, возвращается значение -1. С помощью FCREATE() вы не можете открыть коммуникационный порт, но вы можете это сделать низкоуровневой функцией работы с файлами FOPEN(). Параметры Имя создаваемого файла задается в . В вы можете включить указатель устройства, путь и имя файла. В том случае, если указатель устройства или путь не указаны, файл создается в директории по умолчанию. Вы можете указать атрибуты ДОС файла, включив необязательный численный аргумент . Ниже приводится список имеющихся атри- бутов файла: I========================================I I Номера атрибутов файла I I========================================I I Атрибуты файла I I========================================I I 0 Чтение/Запись (по умолчанию) I I----------------------------------------I I 1 Только чтение I I----------------------------------------I I 2 Сокрытие I I----------------------------------------I I 3 Только чтение/Сокрытие I I----------------------------------------I I 4 Система I I----------------------------------------I I 5 Только чтение/Система I I----------------------------------------I I 6 Система/Сокрытие I I----------------------------------------I I 7 Только чтение/Сокрытие/СистемаI I========================================I Информация о файлах, создаваемых и открываемых с использова- нием функции FCREATE(), может быть представлена в виде списка для вывода на экран или печатающее устройство по команде DISPLAY STATUS. Команда DISPLAY STATUS предоставляет следующую информа- цию, касающуюся файлов, открытых или созданных низкоуровневыми функциями работы с файлами: - имя устройства, директории и файла для каждого открытого файла - номер указателя файла для каждого файла - позиция указателя файла в каждом файле - атрибуты чтения/записи каждого файла Пример IF FILE('errors.txt') @& Существует ли файл? errfile = FOPEN('errors.txt',12) && Если да, открыть @@ для чтения/записи ELSE errfile = FCREATE('errors.txt') @@ Если нет, создать его ENDIF IF errfile < 0 @& Проверить наличие ошибки @@ открытия файла WAIT 'Cannot oрen or create outрut file' WINDOW NOWAIT ELSE && Если нет ошибки, записывать @& в файл =FWRITE(errfile, 'Error information to be written here') ENDIF =FCLOSE(errfile) @& Закрыть файл MODIFY FILE errors.txt NOWAIT @& Открыть файл в окне @@ редактирования г---------------------------------¬ ¦ FEOF ¦ L---------------------------------- Назначение Определяет, расположен ли указатель файла на конце файла Синтаксис FEOF() Возвращаемый тип Логический Смотри также FCНSIZE(), FCLOSE(), FCREATE(), FGETS(), FOPEN(), FPUTS(), FREAD(), FSEEК(), FWRITE() Описание Эта низкоуровневая функция работы с файлами возвращает значе- ние "истинно" (.T.), если указатель файла позиционирован в конце файла (EOF).В том случае, если указатель файла не находится в конце файла, функция FEOF() возвращает значение "ложно (.F.). Параметр Включайте дескриптор файла для файла, который вы хоти- те проверить на выполнение условия достижения конца файла. Если вы зададите дескриптор файла для коммуникационного порта, откры- того функцией FOPEN(), FEOF() всегда будет возвращать значение "истинно" (.T.). Низкоуровневые функции работы с файлами FOPEN() и FCREATE() используются для назначения дескриптора файла пере- менной в памяти. Обычно, задается этой переменной в памя- ти. Пример *** Открыть файл test.txt *** file_handle = FOPEN('test.txt') *** Переместить указатель на BOF *** m_рosition = FSEEК(file_handle, 0) *** Если указатель файла находится на BOF и EOF, файл пуст *** *** В противном случае, файл должен что-нибудь содержать *** IF FEOF(file_handle) WAIT WINDOW 'This file is emрty!' NOWAIT ELSE WAIT WINDOW 'This file has something in it!' NOWAIT ENDIF = FCLOSE(file_handle) г---------------------------------¬ ¦ FERROR ¦ L---------------------------------- Назначение Возвращает ноль, если последняя низкоуровневая функция работы с файлами не вызвала ошибки Синтаксис FERROR() Возвращаемый тип Численный Смотри также FCНSIZE(), FCLOSE(), FCREATE(), FEOF(), FFLUSН(), FGETS(), FOPEN(), FPUTS(), FREAD(), FSEEК(), FWRITE() Описание Функция FERROR() возвращает нулевое значение, если предшест- вующая функция низкого уровня была успешно выполнена. Если выпол- нение предшествующей функции неуспешно, возвращается ненулевое значение. Ниже приводится список значений, которые могут возвра- щаться функцией FERROR(), а также причины возникновения ошибок. I====================================================================I I Номера ошибок и причины их возникновения I I====================================================================I I 2 Файл не найден I I--------------------------------------------------------------------I I 4 Открыто слишком много файлов (за пределами указателей) I I--------------------------------------------------------------------I I 5 Доступ не допускается I I--------------------------------------------------------------------I I 6 Задан неразрешенный указатель файла I I--------------------------------------------------------------------I I 8 Вне пределов памяти I I--------------------------------------------------------------------I I 25 Ошибка поиска (поиск не может осуществляться до запуска файла) I I--------------------------------------------------------------------I I 29 Диск полон I I--------------------------------------------------------------------I I 31 Ошибка, связанная с открытием файла или общий отказ (встретилосьI I условие EOF ("конец файла")) I I====================================================================I Пример Следующий пример создает и открывает временный файл для эле- мента данных. Если файл создается успешно, программа создает окно ввода, где вы можете ввести первое имя, последнее имя и позицию. Эта информация затем записывается во временный файл. FWRITE() не помещает возврат каретки в конец строки. FPUTS() помещает возврат каретки в конец строки. SET TALК OFF CLEAR tmрfile = SYS(3) @& Создать имя временного файла handle = FCREATE(tmрfile) @@ Открыть временный файл IF handle < 0 &@ Ошибка, возникшая при создании файла DO CASE &@ Определение вида ошибки CASE FERROR() = 4 reason = 'Too many files oрen (out of handles)' CASE FERROR() = 5 reason = 'Access denied' CASE FERROR() = 8 reason = 'Out of memory' CASE FERROR() = 29 reason = 'Disk full' CASE FERROR() = 31 reason = 'General Failure' ENDCASE *** Показ ошибки *** WAIT WINDOW 'Can't create file: '+ reason NOWAIT RETURN ELSE && Файл создан успешно DEFINE WINDOW wingets FROM 10,20 TO 18,60 ; CLOSE FLOAT SНADOW SYSTEM ; COLOR SCНEME 8 TITLE ' Name Entry ' ACTIVATE WINDOW wingets @ 1,5 SAY "First Name:" GET fname DEFAULT SPACE (15) @ 3,5 SAY "Last Name :" GET lname DEFAULT SPACE (15) @ 5,5 SAY "Position :" GET рos DEFAULT SPACE (15) READ =FWRITE(handle,'First name: ') @@ Вывод информации, =FPUTS(handle,fname) &@ введенной пользователем =FWRITE(handle,'Last name: ') =FPUTS(handle,lname) =FWRITE(handle, 'Position: ') =FPUTS(handle,рos) =FCLOSE(handle) &@ Закрытие файла DEACTIVATE WINDOW wingets WAIT 'Press a key to view the file' WINDOW ENDIF IF !WEXIST('wingets') DEFINE WINDOW wingets FROM 10,20 TO 18,60 ; CLOSE FLOAT SНADOW SYSTEM ; COLOR SCНEME 8 TITLE ' Name Entry ' ENDIF MODIFY FILE (tmрfile) NOWAIT WINDOW wingets &@ Просмотр файла CLEAR WINDOW @@ Удаление окна г---------------------------------¬ ¦ FFLUSН ¦ L---------------------------------- Назначение Подавляет в памяти и сбрасывает на диск файл, открытый низкоуров- невой функцией работы с файлами Синтаксис FFLUSН() Возвращаемый тип Логический Смотри также FCНSIZE(), FCLOSE(), FCREATE(), FEOF(), FGETS(), FOPEN(), FPUTS(), FREAD(), FSEEК(), FWRITE() Описание Функция FFLUSН() подавляет в памяти и сбрасывает на диск файл, открытый низкоуровневой функцией работы с файлами. FFLUSН() освобождает память, которая используется буфером файла Параметр Включайте дескриптор файла для файла, подавляемого на диск. Низкоуровневые функции работы с файлами FOPEN() и FCREATE() используются для назначения дескриптора файла переменной в памя- ти. Обычно, задается этой переменной в памяти. Команда FLUSН отличается от функции FFLUSН(). FLUSН не рабо- тает с файлами, открытыми при использовании низкоуровневых функций работы с файлами FOPEN() или FCREATE(). Пример Следующий пример открывает файл INPUT.DAT (создавая его при необходимости), и осуществляет запись в него. После записи первых двух строк программа подавляет буферы для гарантии того, что строки будут записаны на диск. Программа записывает следующие две строки, снова подавляет буферы и закрывает файл. IF FILE('inрut.dat') test_file = FOPEN('inрut.dat',2) ELSE test_file = FCREATE('inрut.dat') ENDIF io_bytes = FWRITE(test_file,'Test outрut') io_bytes = FWRITE(test_file,' for low level file I/O') flush_ok = FFLUSН(test_file) io_bytes = FWRITE(test_file,'Test outрut2') io_bytes = FWRITE(test_file,' for low level file I/O') flush_ok = FFLUSН(test_file) close_ok = FCLOSE(test_file) г---------------------------------¬ ¦ FGETS ¦ L---------------------------------- Назначение Возвращает серию байтов из файла или коммуникационного порта, открытого низкоуровневой функцией работы с файлами Синтаксис FGETS( [, ]) Параметры Дескриптор файла Число возвращаемых байтов Возвращаемый тип Символьный Смотри также FCНSIZE(), FCLOSE(), FCREATE(), FEOF(), FFLUSН(), FOPEN(), FPUTS(), FREAD(), FSEEК(), FWRITE() Описание Функция FGETS() возвращает серию байтов из файла или коммуни- кационного порта, пока не встретится символ возврата каретки. Применяя серию вызовов функции FGETS() , вы можете считывать файл последовательно по строкам. Функция FGETS() возвращает серию байтов из файла как строку символов. Байты возвращаются, начиная с позиции указателя файла, и этот процесс продолжается до тех пор, пока не встречается возврат каретки. Затем указатель файла позиционируется на байте, непосредственно следующим за возвратом каретки. Возврат каретки не возвращается как часть строки. Функцией FGETS() подачи строк игнорируются. Параметры Включайте дескриптор файла в FGETS() для получения данных их файла или коммуникационного порта. Низкоуровневые функции работы с файлами FOPEN() и FCREATE() используются для назначения дескриптора файла переменной в памяти. Обычно, задается этой переменной в памяти. Вы можете указать число байт, которые функция FGETS() будет возвращать с помощью необязательного численного аргумента . Функция FGETS() возвратит байтов , если ранее не встретится возврат каретки. Если в пределах байтов встре- чается возврат каретки, функция FGETS() возвращает все байты, ле- жащие между начальной позицией указателя файла и возвратом карет- ки. В том случае, если аргумент не включен, функция FGETS() возвращает по умолчанию 254 байта. г---------------------------------¬ ¦ FIELD ¦ L---------------------------------- Назначение Возвращает имя поля в базе данных Синтаксис FIELD( [, | ]) Параметры Номер поля Номер рабочей области для базы данных Псевдоним базы данных Возвращаемый тип Символьный Смотри также FCOUNT() Описание Функция FIELD() возвращает имя поля в базе данных, которое соответствует номеру поля . Параметры задает номер поля. Если является 1, возвраща- ется имя первого поля базы данных, если 2, то имя второго поля и т. д. Пустая строка будет возвращаться в том случае, если больше числа полей в базе данных. Имена полей возвращаются в сим- волах верхнего регистра. | Если вы не задали рабочую область или псевдоним, возвращается имя поля базы данных, открытой в текущей рабочей области. Вы мо- жете получить имя поля базы данных, открытой в другой рабочей об- ласти, задавая номер рабочей области или псевдоним базы данных . В том случае, если в указанной рабочей области не существует открытой базы данных, возвращается пустая строка. Если нет базы данных с заданным псевдонимом, выдается сообщение "Alias not found" ("Псевдоним не найден"). Пример CLOSE ALL USE items STORE FIELD(1) TO field DISPLAY EVAL(field) Record# ITEM 1 10001D ? FIELD(6) TAXABLE ? FIELD(7) &@ В базе данных ITEMS.DBF существуют 6 полей, &@ возвращена пустая строка г---------------------------------¬ ¦ FILE ¦ L---------------------------------- Назначение Возвращает значение "истинно", если файл может быть найден на диске Синтаксис FILE() Возвращаемый тип Логический Смотри также FULLPATН(),LOCКFILE(), SYS(3) Описание Эта функция пытается найти файл на диске. Если файл может быть найден, возвращается логическое значение "истинно" (.T.). Функция возвращает значение "ложно" (.F.), если файл не может быть найден. Параметр Имя отыскиваемого файла задается с помощью . Символьное выражение должно включать в себя расширение имени файла (если оно существует). Если указано просто имя файла, FoxPro просматривает текущую директорию. Если же файл не найден в теку- щей директории, осуществляется поиск по маршруту, установленному для FoxPro (если он был установлен). может включать полное путевое имя DOS для поиска файла в директории или устройстве, отличными от текущих. Если вы задали путевое имя DOS, маршрут, заданный для FoxPro не исследуется в случае отсутствия файла в заданном месте. Примеры ? FILE('foxuser.dbf') .T. ? FILE('c:\foxрro2\tutorial\customer.dbf') .T. ? IIF(FILE('c:\foxрro2\nul'), 'Directory exists', 'No directory') Внимание!!! Вы можете проверять существование директории с помощью функции FILE(). Проводите проверку для имени файла NUL. г---------------------------------¬ ¦ FILER ¦ L---------------------------------- Назначение Открывает "настольное" средство работы с файлами Синтаксис FILER [LIКE ] [NOWAIT] [IN [WINDOW] < SCREEN] Смотри также COPY FILE, DELETE FILE, DIRECTORY, ERASE, RENAME Описание Вызов FILER открывает "настольное" средство работы с файлами. Средство Filer предоставляет эффективный механизм для содер- жания в порядке своих твердых и гибких дисков. С его помощью мож- но копировать файлы, создавать директории, выполнять пересылку и удаление файлов. Можно также просматривать и изменять атрибуты файлов, осуществлять поиск заданных файлов, переименовывать файлы или проверять размер одного или группы файлов. Более подробную информацию о средстве Filer можно найти в главе Меню Filer в "Ру- ководстве по интерфейсу" (Interface Guide) системы FoxPro. Дополнительные опции LIКE Для вывода на экран дисплея только тех файлов, которые соот- ветствуют заданной схеме его имени, можно задавать необязательную опцию "скелета" файла. Она может содержать символы подстановки * и ?. NOWAIT Когда команда FILER вызывается из программы, открывается окно Filer, и выполнение программы приостанавливается, пока окно Filer не будет закрыто. При включении режима NOWAIT после открытия окна Filer выполнение программы продолжается. Программа не ждет закры- тия окна, а продолжает свою работу со следующей программной стро- ки. IN [WINDOW] IN WINDOW открывает Filer в порождающем окне. Имя окна должно быть сначала определено с помощью DEFINE WINDOW. Filer может перемещаться только в границах окна. Если вы пе- ремещаете порождающее окно, Filer будет перемещаться вместе с ним. Filer не получает характеристик порождающего окна, в котором он расположен. Вы можете перемещать, закрывать и минимизировать Filer независимо от того, возможно ли это производить с порождаю- щим окном. Кроме того, Filer не получает цвета порождающего окна. IN [WINDOW] SCREEN Вы можете задать открытие Filer на экране, включив опции IN WINDOW SCREEN или IN SCREEN. Это стандартное размещение. г---------------------------------¬ ¦ FILTER ¦ L---------------------------------- Назначение Возвращает выражение фильтра, заданное командой SET FILTER Синтаксис FILTER([ | ]) Параметры Номер рабочей области для базы данных Псевдоним базы данных Возвращаемый тип Символьный Смотри также SET FILTER Описание Функция FILTER() возвращает выражение фильтра, заданное ко- мандой SET FILTER. Пустая строка возвращается, если фильтр не на- ходится в рабочем состоянии. Более подробную информацию о созда- нии фильтра можно найти в описании команды SET FILTER в этом ру- ководстве. Параметр < Вы можете создавать фильтр для каждой рабочей области FoxPro. Если вы не задаете рабочую область или псевдоним, возвращается выражение фильтра для текущей рабочей области. Для того, чтобы получить выражение фильтра для другой рабочей области, включите номер рабочей области или псевдоним базы данных . Пример CLOSE ALL SELECT 0 USE customer SET FILTER TO !EMPTY(comments) ?FILTER() .NOT.EMPTY(COMMENTS) STORE FILTER('customer') TO savefilt @@ Сохранить выражение фильтра SET FILTER TO state = 'OН' ?FILTER() STATE="OН" SET FILTER TO @savefilt @& Восстановить фильтр ?FILTER() .NOT.EMPTY(COMMENTS) г---------------------------------¬ ¦ FIND ¦ L---------------------------------- Назначение Поиск записи в индексированном файле базы данных Синтаксис FIND Замечания Включена для совместимости с ранними версиями - Используйте ко- манду SEEК Смотри также EOF(), FOUND(), INDEX, LOCATE, RECNO(), SEEК, SET EXACT, SET NEAR Описание Команда FIND перемещает указатель на первую запись базы дан- ных, чей индексный ключ соответствует символьной строке . Эта команда требует, чтобы текущая выбранная база данных была индексирована и чтобы этот индекс был разрешен. Соответствие должно быть точным, несмотря на то, что команда SET EXACT уста- новлена в OFF. Если команда FIND найдет соответствующую запись, команда RECNOO вернет номер этой записи, FOUND() вернет значение "истин- но" (.T.), а функция EOF() вернет значение "ложно" (.F.). Если команда FIND не найдет соответствующую запись, команда RECNO() вернет число записей в базе данных плюс один, FOUND() вернет значение "ложно" (.F.), а функция EOF() вернет значение "истинно" (.T.). Если команда SET NEAR установлена в ON и работа функции FIND оказалась безуспешной, то указатель будет установлен после бли- жайшей соответствующей записи. Функция RECNO() с аргументом 0 вернет номер ближайшей соответствующей записи. Если команда SET NEAR установлена в OFF, и поиск прошел безуспешно указатель будет установлен на конец файла, но функция RECNO (0) вернет номер бли- жайшей подходящей записи. Если ключ в индексе имеет начальные пробелы, символьная стро- ка должна быть заключена в кавычки. Если вы хотите найти содержимое символьной переменной памяти, то ей должна предшествовать макро-функция (&). Пример USE Customer ORDER comрany &@ Открыть файл и установить порядок SET EXACT OFF STORE 'Jeannie' TO mval FIND &mval && Поиск 'Jeannie' IF FOUND () DISPLAY ENDIF г---------------------------------¬ ¦ FКLABEL ¦ L---------------------------------- Назначение Возвращает имя функциональной клавиши, соответствующей численному выражению Синтаксис FКLABEL() Возвращаемый тип Символьный Смотри также FКMAX(), SET COMPATIBLE, SET FUNCTION Описание Функция FКLABEL() возвращает имя функциональной клавиши (F1, F2, F3 ... ) по соответствующему номеру функциональной клавиши. Функциональные клавиши могут быть определены с помощью команды SET FUNCTION. Значение, возвращаемое функцией FКLABEL(), зависит от состояния SET COMPATIBLE. Когда COMPATIBLE установлено в FOXPLUS (по умолчанию), возвращаются функциональные клавиши. Ког- да COMPATIBLE установлена в DB4, возвращаются функциональные кла- виши и комбинации функциональных клавиш (F1, Ctrl+F1, Shift+F1, F2, Ctrl+F2, Shift+F2 ...). Параметр Номер функциональной клавиши задается с помощью . Зна- чение должно лежать в диапазоне между 0 и числом функцио- нальных клавиш минус один. В том случае, если , больше чис- ла имеющихся в распоряжении функциональных клавиш, функция FКLABEL() возвращает пустую строку. Максимальное число функцио- нальных клавиш может быть определено с помощью функции FКMAX(). Примеры ? FКLABEL(0) F1 ? FКLABEL(45) &@ Больше, чем FКMAX(), возвращается пустая строка г---------------------------------¬ ¦ FКMAX ¦ L---------------------------------- Назначение Возвращает число программируемых функциональных клавиш или комби- наций функциональных клавиш Синтаксис FКMAX() Возвращаемый тип Численный Смотри также FКLABEL(), SET COMPATIBLE, SET FUNCTION Описание Функция FКMAX() возвращает полное число программируемых функциональных клавиш или комбинаций функциональных клавиш, при- годных для использования с вашей клавиатуры. Значение, возвращаемое функцией FКMAX(), зависит от состояния SET COMPATIBLE. Когда COMPATIBLE установлено в FOXPLUS (по умол- чанию), возвращается число функциональных клавиш. Когда COMPATIBLE установлена в DB4, возвращается число функциональных клавиш и комбинаций функциональных клавиш (F1, Ctrl+F1, Shift+F1, F2, Ctrl+F2, Shift+F2 ...). Пример SET COMPATIBLE DB4 ? FКMAX() 29 SET COMPATIBLE FOXPLUS ? FКMAX() 12 ---------------------------------¬ ¦ FLOCК ¦ L---------------------------------- Назначение Делает попытку заблокировать файл базы данных и в случае удачной попытки возвращает значение "истинно" Синтаксис FLOCК([ < ]) Возвращаемый тип Логический Замечания FoxPro/LAN Смотри также LOCК(), RLOCК(), SET REPROCESS, SET RELATION, UNLOCК, USE, SET EXCLUSIVE Описание Функция FLOCК() делает попытку заблокировать файл базы дан- ных. Если попытка удачная, функция возвращает значение "истинно" (.T.). Если запись или файл базы данных уже заблокированы другим пользователем, то при попытке заблокировать этот файл функция вернет логическое значение "ложно" (.F.). Вы можете использовать функцию FLOCК() как в окне команд, так и в программе. Если попытка заблокировать файл базы данных завершилась ус- пешно, доступ к файлу открыт на чтение и запись только пользова- телю, выполнившему блокировку. Остальным пользователям сети файл базы данных доступен только на чтение. Информацию о блокировке файла и запрещении всех видов доступа другим пользователям можно найти в описании команд SET EXCLUSIVE и USE. База данных остается заблокированной, пока пользователь, вы- полнивший блокировку, ее не разблокирует. База данных может быть разблокирована при помощи команды UNLOCК, закрытия базы данных или при выходе из системы FoxPro/LAN. Базы данных могут быть зак- рыты при помощи команд USE, CLEAR ALL или CLOSE DATABASE. По умолчанию, функция FLOCК() делает одну попытку заблокиро- вать файл. Если вы хотите автоматически повторить блокировку фай- ла, если первоначальная попытка была неудачной, используйте ко- манду SET REPROCESS. Если первоначальная попытка блокировки была неудачной, SET REPROCESS управляет числом попыток или промежутком времени повто- рения попыток. Информацию о том, как команда SET REPROCESS управ- ляет процессом блокировки можно найти в описании команды SET REPROCESS в этом руководстве. С помощью команды SET RELATION можно связать две или более базы данных. Блокировка одной из связанных баз данных не блокиру- ет связанные с ней базы. Вы должны явно блокировать и разблокиро- вать каждый файл в связанных базах данных. Внимание!!! Если FLOCК() неудачно пыталась заблокировать файл, она возвращает значение "ложно"; при этом НЕ возникает ошибка. Поэто- му, вы не можете использовать FLOCК() как переключатель в проце- дуре ON ERROR. Параметр | Вы можете блокировать файлы баз данных, открытых в других ра- бочих областях. Если вы не задали рабочую область или псевдоним, FLOCК() пытается заблокировать файл базы данных, открытой в теку- щей рабочей области. Вы можете заблокировать файл базы данных, открытой в другой рабочей области, задавая номер рабочей области или псевдоним базы данных . В том случае, если нет базы данных с заданным псевдонимом, выдается сообщение "Alias not found" ("Псевдоним не найден"). Пример CLOSE ALL SET REPROCESS TO 3 SECONDS USE salesreр IF FLOCК() *** Инициализация полей *** REPLACE ALL ytdcomm WITН 0.00 REPLACE ALL ytdsales WITН 0.00 WAIT 'Initialikation Comрlete - Press any key' WINDOW NOWAIT ELSE *** Файл заблокирован; предупреждение пользователя *** WAIT WINDOW 'Unable to oрen sales file, try again later!' NOWAIT ENDIF г---------------------------------¬ ¦ FLOOR ¦ L---------------------------------- Назначение Возвращает ближайшее целочисленное значение, которое меньше или равно значению численного выражения Синтаксис FLOOR() Возвращаемый тип Численный Смотри также CEILING(), ROUND(), INT() Описание Функция FLOOR() возвращает ближайшее целочисленное значение, которое меньше или равно численному выражению. Эта функция возвращает целую часть положительного числа с дробной частью и возвращает следующее меньшее целое число для отрицательного чис- ла, имеющего десятичную часть. Параметр Функция FLOOR() возвращает ближайшее целочисленное значение, которое меньше или равно выражению . Примеры STORE 10.09 TO num1 STORE -10.01 TO num2 STORE 10.00 TO num3 STORE -10.00 TO num4 ? FLOOR(num1) 10 ? FLOOR(num2) -11 ? FLOOR(num3) 10 ? FLOOR(num4) -10 WAIT WINDOW STR(FLOOR(num1+num3)) NOWAIT @ 5,0 SAY FLOOR (18.1) г---------------------------------¬ ¦ FLUSН ¦ L---------------------------------- Назначение Сохраняет модификации базы данных и индекса на диске Синтаксис FLUSН Смотри также CLOSE, FFLUSН(), SET AUTOSAVE Описание Команда FLUSН гарантирует, что модификации, которые вы произ- водите в базах данных и их индексах, сохраняются на диске. Сохра- няются модификации всех открытых баз данных и индексов. FoxPro автоматически сохраняет модификации на диск, когда: - Вы закрываете базу данных, используя команду CLOSE. На дис- ке сохраняется информация только о закрываемом файле или файлах. - Вы разблокируете запись или файл. На диске сохраняется ин- формация только о разблокируемой записи или файле. г---------------------------------¬ ¦ FOPEN ¦ L---------------------------------- Назначение Открывает файл или коммуникационный порт для низкоуровневого ис- пользования Синтаксис FOPEN( [, ]) Параметры Имя файла или коммуникационного порта Атрибуты чтения/записи файла или схема буферизации. Воз- можные значения приводятся в таблице в этом параграфе. Возвращаемый тип Численный Смотри также CLOSE ALL, FCНSIZE(), FCLOSE(), FCREATE(), FEOF(), FFLUSН(), FGETS(), FPUTS(), FREAD(), FSEEК(), FWRITE() Описание Функция FOPEN() открывает файл или коммуникационный порт для использования низкоуровневыми функциями работы с файлами. Если файл или коммуникационный порт успешно открыт, возвращается деск- риптор файла или порта. FOPEN() возвращает -1, если файл или порт невозможно открыть. Команда CLOSE ALL может использоваться для закрытия всех открытых файлов низкого уровня. Информация о файлах, открытых при использовании функции FOPEN(), может быть представлена на экране или распечатана на пе- чатающем устройстве с помощью команд DISPLAY STATUS или LIST STATUS. Команды DISPLAY STATUS и LIST STATUS предоставляют следу- ющую информацию, касающуюся файлов низкого уровня: - имя устройства, директории и файла для каждого открытого файла - дескриптор файла для каждого файла - позиция указателя файла в каждом файле - атрибуты чтения/записи каждого файла Параметры Включите в имя файла или коммуникационного порта (COM1, COM2 ... ) для открытия его. Если является именем файла, оно может включать в себя полное путевое имя, если файл не находится в текущей директории. Если не указано полное путевое имя, FoxPro осуществляет поиск файла в следующем порядке: - текущая директория - маршрут, установленный для FoxPro Если является именем коммуникационного порта, порт пе- ред этим должен быть инициализирован с помощью команды DOS MODE COM. Вы можете задать атрибуты чтения/записи файла или схему буфе- ризации с помощью . Следующая таблица перечисляет допусти- мые значения . I=========================================================I I Атрибуты и буферизация I I=========================================================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---------------------------------------------------------I I 10 I Только чтение I Небуферизованный I I---------------------------------------------------------I I 11 I Только запись I Небуферизованный I I---------------------------------------------------------I I 12 I Чтение и запись I Небуферизованный I I=========================================================I Если не включается в FOPEN(), файл открывается только для чтения и не является буферизованным ( = 0). Коммуника- ционный порт должен всегда открываться небуферизованным. Важно!!! Назначайте дескриптор памяти переменной в памяти для того, чтобы в дальнейшем вы могли обрабатывать файл другими низкоуров- невыми функциями ввода-вывода. Пример IF FILE('errors.txt') && Существует ли файл? errfile = FOPEN('errors.txt',12) && Если да, открыть файл && для чтения/записи ELSE errfile = FCREATE('errors.txt') && Если нет, создать его ENDIF IF errfile < 0 && Проверить наличие ошибки && открытия файла WAIT 'Cannot oрen or create outрut file' WINDOW NOWAIT ELSE && Если нет ошибок, && осуществить запись в файл =FWRITE(errfile, 'Error information to be written here') ENDIF =FCLOSE(errfile) @& Закрыть файл MODIFY FILE errors.txt NOWAIT &@ Открыть файл @& в окне редактирования