26 | 05 | 2017

 ГЛАВА 6. Функции Clipperа (часть2)

FCOUNT()

Написание: FCOUNT()

Цель:
Получить количество полей в структуре текущего файла базы
данных.

Возвращает: Целое число.
FCOUNT() возврашает количество полей файла базы данных DBF, открытом
в текущей рабочей области. Если нет открытого файла базы данных DBF,
FCOUNT() возвращает ноль.

FCOUNT() полезна в приложениях, где Вы создали программы,
независящие от данных и которые могут работать с любым файлом
базы данных. В основном это прогаммы с приемом/передачей данных
и подготовки отчетов. Обычно, Вы используете FCOUNT() для
определения верхних пределов циклов FOR/NEXT и DO WHILE, которые
обрабатывают за один раз одну запись. Для примера, отобразить имена

- 162 -
всех полей в текущей рабочей области:

FOR i=1 TO FCOUNT()
? FIELD(i)
NEXT

Примеры: USE Sales
? FCOUNT() && Результат: 5
COPY STRUCTURE EXTENDED TO Temp
USE Temp
? LASTREC() && Результат: 5

library: CLIPPER.LIB
Смотри
также: FIELD()/FIELDNAME(),TYPE().



FCREATE()


Написание: FCREATE(<вырC>,[,<вырN>])

Цель:
Создать новый файл или уменьшить длину существующего до нуля.

Аргументы: <вырC> - имя создаваемого/существующего файла.
<вырN> - атрибуты DOS-файла. Если опущен, то по умолчанию
принимается ноль.

Таблица 6-9. Атрибуты DOS-файла.
----------------------------------------------------------------
Величина Атрибут Описание
----------------------------------------------------------------
0 Нормальный Чтение/запись.
1 Только Попытка открыть для строки результатов
чтение вернет ошибку.
2 "Невидимый" Исключен из поиска в "нормальных"
директориях.
4 Системный Исключен из поиска в "нормальных"
директориях.
----------------------------------------------------------------

Возвращает: Числовую величину.
FCREATE() возвращает DOS-системный номер нового файла, который
находится в пределах от 0 до 65535. Если произошла ошибка, то
возвращает -1.

Успешно созданный при помощи FCREATE() файл является открытым с
модой открытия файла - 2 (мода 2 - мода доступа на чтение/
запись, общедоступность).
Поскольку системный номер файла требуется для идентификации
файла привыполнении других файловых операций, всегда
присваивайте его какой-либо изменяемой для дальнейшего
использования величину, возвращаемую из FCREATE().

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

- 163 -
? DOSТУП К ФАЙЛАМ В ДРУГИХ ДИРЕКТОРИЯХ. FCREATE() не ?
? подчиняется установкам SET DEFALT и PATH. Она записывает ?
? напрямую в текущий директорий DOS. ?
????????????????????????????????????????????????????????????????

Примеры: handle = FCREATE("Testfile",0)

library: EXTEND.LIB
Смотри
также:
FCLOSE(),FERROR(),FOPEN(),FREAD(),FREADSTR(),FSEEK(),FWRITE().
????????????????????????????????????????????????????????????????
? Внимание! Эти функции дают Вам низкоуровневый доступ к ?
? DOS-файлам и устройствам и требуют при использовании особой ?
? аккуратности и достаточного знания операционной системы. ?
????????????????????????????????????????????????????????????????


FERROR()


Написание: FERROR()

Цель:Проверить на наличие DOS-ошибки после выполнения файловой
функции.

Возвращает: Целую числовую величину.
FERROR() возвращает DOS-ошибку из последней файловой операции
(см. в Приложении F полный перечень DOS-ошибок). Если ошибки
нет, то FERROR() возвращает ноль.

Примеры: handle = FCREATE("Temp.txt")
IF FERROR() <> 0
? "Не могу создать файл, DOS-ошибка :",FERROR()
ENDIF

library: EXTEND.LIB
Смотри
также:
FCLOSE(),FCREATE(),FOPEN(),FREAD(),FREADSTR(),FSEEK(),FWRITE().
????????????????????????????????????????????????????????????????
? Внимание! Эти функции дают Вам низкоуровневый доступ к ?
? DOS-файлам и устройствам и требуют при использовании особой ?
? аккуратности и достаточного знания операционной системы. ?
????????????????????????????????????????????????????????????????



FIELD()/FIELDNAME()


Написание: FIELD(<вырN>)/FIELDNAME(<вырN>)

Цель: Получить имя указанного поля в текущем файле базы данных.

Аргументы:
<вырN> - числовая позиция поля в структуре файла базы данных.

- 164 -

Возвращает: Символьную строку.
Если <вырN> вне пределах номеров полей, содержащихся в файле
базы данных, FIELD() возвращает пустую строку (""). Имена
возвращаемых полей даются заглавными буквами.

FIELD() позволяет управлять структурой файла базы данных, как
если бы она была массивом, в котором каждому номеру поля
приписано имя этого поля. Такой массив полей удобен при создании
программ, независящих от данных и выполняющих прием/пердачу
данных и составление отчетов.
Если Вам необходима другая информация о структуре файла базы
данных, используйте TYPE() и LEN(). Если Вам нужно также и число
десятичных знаков в числовом поле, используйте следующее
выражение:

LEN(SUBSTR(STR(<имя поля>),RAT(".",STR(<имя поля>)) + 1))

????????????????????????????????????????????????????????????????
? Отметьте ! AFIELDS() дает то же самое, но с расширенными ?
? возможностями для манипулирования информацией об атрибутах ?
? полей. ?
????????????????????????????????????????????????????????????????

Примеры: USE Sales
? FIELD(1) && Результат: BRANCH
? FCOUNT() && Результат: 5
? LEN(FIELD(0) && Результат: 0
? LEN(FIELD(40) && Результат: 0

library: CLIPPER.LIB
Смотри
также:
COPY STRUCTURE EXTENDED,AFIELDS(),FCOUNT(),LASTREC(),TYPE().



FILE()


Написание: FILE(<вырC>)

Цель: Определить, существует ли файл в Clipper-пути.

Аргументы:
<вырС> - имя искомого файла, которое должно содержать расширение

Если файл не найден на дисководе и в директории, принимаемых по
умолчанию, то просматривается Clipper-путь.
Обратите внимание на то, что DOS-путь не просматривается. Если у
Вас нет установки Clipper-пути SET PATH, то для доступа к файлу
Вы должны указать явно путь, включая дисковод и имя директория.

Возвращает: Логическую величину.
Если файл существует, то FILE() возвращает "истину"(.T.).

FILE() полезна для определения наличия какого-либо файла прежде

- 165 -
чем записывать в него информацию.

Примеры: ? FILE("Sales.dbf") && Результат: .F.
? FILE("\APPS\DBF\Sales.dbf") && Результат: .T.
SET PATH TO \APPS\DBF
? FILE("Sales.dbf") && Результат: .T.
SET PATH TO
SET DEFAULT TO \APPS\DBF\
? FILE("Sales.dbf") && Результат: .T.

library: CLIPPER.LIB
Смотри
также: SET PATH,SET DEFAULT.



FLOCK()


Написание: FLOCK()

Цель:
Залокировать (закрыть) файл базы данных совместного пользования,
открытого командой USE в текущей рабочей области, для
использования его другими.

Возвращает: Логическую величину.
Если попытка локирования файла базы данных закончилась успешно,
то FLOCK() возвращает "истину"(.T.). В других случаях она
возвращает "ложь"(.F.).

Файл остается залокированным до тех пор, пока не встретится
команды UNLOCK, CLOSE DATABASE или RLOCK().
Отметьте, что в отличии от dBASEIII PLUS, Clipper не локирует
автоматически другие рабочие области, находящиеся в состоянии
связанности с текущей рабочей областью. Таким же образом, UNLOCK
не действует на рабочие области, связанные с текущей.
Обращайтесь к Главе 10 за более подробной информацией о
локировании файлов и записей.

Примеры: IF FLOCK()
DELETE ALL
ENDIF

library: CLIPPER.LIB
Смотри
также: USE..EXCLUSIVE,SET EXCLUSIVE,UNLOCK,RLOCK().



FOPEN()


Написание: FOPEN(<вырC>[,<вырN>])

Цель: Открыть файл.


- 166 -
Аргументы: <вырC> - имя открываемого файла, включая путь.
<вырN> - запрашиваемая DOS-мода открытия, показывающая вид
доступа к открытому файлу. Виды доступа могут быть следующие:

Таблица 6-10. DOS-моды открытия файла.
----------------------------------------------------------------
Мода открытия Операция
----------------------------------------------------------------
0 Только чтение.
1 Только запись.
2 Чтение/запись.
----------------------------------------------------------------

По умолчанию принимается мода открытия 2.

Возвращает: Числовую величину.
FOPEN() возвращает системный номер открытого файла - число в
пределах от 0 до 65535. Если возникает ошибка, то возвращает -1.

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

????????????????????????????????????????????????????????????????
? DOSТУП К ФАЙЛАМ В ДРУГИХ ДИРЕКТОРИЯХ. FOPEN() не подчиняется ?
? установкам SET DEFALT и PATH. Если путь не задан явно в ?
? имени файла, то поиск осуществляется в текущем директории. ?
????????????????????????????????????????????????????????????????

Примеры: handle = FOPEN("Temp.txt")
IF FERROR() <> 0
? "Не могу открыть файл, DOS-ошибка :", FERROR()
ENDIF

library: EXTEND.LIB
Смотри
также:
FCLOSE(),FERROR(),FCREATE(),FREAD(),FREADSTR(),FSEEK(),FWRITE().
????????????????????????????????????????????????????????????????
? Внимание! Эти функции дают Вам низкоуровневый доступ к ?
? DOS-файлам и устройствам и требуют при использовании особой ?
? аккуратности и достаточного знания операционной системы. ?
????????????????????????????????????????????????????????????????



FOUND()


Написание: FOUND()

Цель:
Определить, успешно ли отработала предыдущая команда поиска,
использующая FIND, LOCATE/CONTINUE или SEEK.

Возвращает: Логическую величину.
FOUND() возвращает "истину"(.T.), если последняя команда поиска

- 167 -
была успешной.
Каждая рабочая область имеет флаг FOUND(). Это означает, что
если одна рабочая область имеет установку SET RELATION для связи
с другими рабочими областями, то запрос FOUND() в дочерней
рабочей области возвращает "истину"(.T.), если в ней существует
величина, соответствующая связанной величине из основной рабочей
области.
Отметьте, что все другие команды, отличные от команд поиска,
обновляют значение флага FOUND() на "ложь"(.F.) автоматически.
Это означает, что, например, команда SKIP не может быть
использована с FOUND().

FOUND() полезна для определения, был ли поиск в файле базы
данных успешным, до выполнения следующего шага в программе.

Примеры: USE Sales INDEX Sales
? INDEXKEY(0) && Результат: SALESMAN
SEEK "100"
? FOUND() && Результат: .T.
SEEK "1000"
? FOUND() && Результат: .F.
SEEK "100"
? FOUND() && Результат: .T.
SKIP
? FOUND() && Результат: .F.
LOCATE FOR Brach = "100"
? FOUND() && Результат: .T.
LOCATE FOR Brach = "1000"
? FOUND() && Результат: .F.

library: CLIPPER.LIB
Смотри
также:
SEEK,FIND,LOCATE,CONTINUE,SET RELATION,SET SOFTSEEK,EOF().



FREAD()


Написание: FREAD(<вырN1>,@<перемC>,<вырN2>)

Цель: Прочесть и переслать символы из файла в переменную.

Аргументы:
<вырN1> - системный номер файла, полученный из FOPEN() или
FCREATE() или назначенный ранее системой DOS.
<перемC> - имя соответствующей символьной изменяемой,
передаваемое как ссылка, используемой в качестве буфера. Длина
этой изменяемой должна быть, по крайней мере, такой же, как и
значение выражения <вырN2>.
<вырN2> - количество байтов, считываемых в буфер, начиная с
текущей позиции DOS-указателя. Величина, возвращаемая успешно
выполненной FREAD(), должна быть равна <вырN2>.

Возвращает: Целую числовую величину.
FREAD() возвращает количество байт, успешно прочтенных из файла.

- 168 -
Ноль в качестве возвращаемой величины, указывает на то, что либо
указатель файла установлен на конце файла, либо произошла
ошибка.

FREAD() читает файл, начиная с текущей позиции указателя файла.
Отметьте, что FREAD() читает все символы, включая управляющие,
пустые и принадлежащие Расширенной ASCII Таблице (старше
CHR(128)).
Для того, чтобы перемещать указатель без чтения, используйте
FSEEK().

Примеры: block = 128
buffer = SPACE(512)
handle = FOPEN("Temp.txt")
*
IF FERROR() <> 0
bytes = FREAD(handle,@buffer,block)
IF bytes <> block
? "Ошибка при чтении файла Temp.txt"
ENDIF
ENDIF

library: EXTEND.LIB
Смотри
также:
FCLOSE(),FERROR(),FCREATE(),FOPEN(),FREADSTR(),FSEEK(),FWRITE().
????????????????????????????????????????????????????????????????
? Внимание! Эти функции дают Вам низкоуровневый доступ к ?
? DOS-файлам и устройствам и требуют при использовании особой ?
? аккуратности и достаточного знания операционной системы. ?
????????????????????????????????????????????????????????????????



FREADSTR()


Написание: FREADSTR(<вырN1>,<вырN2>)

Цель: Прочесть символы из файла.

Аргументы:
<вырN1> - системный номер файла, полученный из FOPEN() или
FCREATE() или назначенный ранее системой DOS.
<вырN2> - количество байтов, которые требуется прочесть, начиная
с текущей позиции указателя DOS-файла. Это может быть
положительное или отричательное число, в зависимости от
направления (вперед - к концу файла или назад - к началу), в
котором должно осуществляться чтение от текущей позиции
указателя.

Возвращает: Символьную строку.
FREADSTR() возвращает строку длиной до 65535 байтов (64 К).
Пустая величина ("") указывает на ошибку или конец файла.

FREADSTR() читает, начиная с текущей позиции указателя DOS-
файла, количество байтов, указанное в выражении <вырN2>, или до

- 169 -
тех пор, пока не встратит пустой символ (ASCII-код 0).
Аналогично функции FREAD(), она читает все символы, включая
управляющие.

Примеры: handle = FOPEN("New.txt")
IF FERROR() <> 0
? ""
RETURN
ELSE
buffer = FREADSTR(handle,16)
? " ",LEN(buffer)
?
FOR i = 1 TO LEN(buffer)
?? TRANSFORM(ASC(SUBSTR(buffer,i,1)),;"99")
NEXT
FCLOSE(handle)
ENDIF
RETURN

library: EXTEND.LIB
Смотри
также: FCLOSE(),FERROR(),FCREATE(),FOPEN(),FREAD(),FSEEK(),FWRITE().
????????????????????????????????????????????????????????????????
? Внимание! Эти функции дают Вам низкоуровневый доступ к ?
? DOS-файлам и устройствам и требуют при использовании особой ?
? аккуратности и достаточного знания операционной системы. ?
????????????????????????????????????????????????????????????????



FSEEK()


Написание: FSEEK(<вырN1>,<вырN2>[,<вырN3>])

Цель: Установить указатель файла на новую позицию.

Аргументы:
<вырN1> - системный номер файла, полученный из FOPEN() или
FCREATE() или назначенный системой DOS.
<вырN2> - количество байтов, на которое передвигается указатель
файла из позиции, определенной выражением <вырN3>. Это может
быть положительное или отрицательное число, в зависимости от
направления передвижения указателя.
<вырN3> - определяет способ передвижения и показывает величину
из следующего списка:

Таблица 6-11. Способы передвижения указателя DOS-файла.
----------------------------------------------------------------
Способ Описание
----------------------------------------------------------------
0 От начала файла.
1 От текущей позиции.
2 От конца файла.
----------------------------------------------------------------

По умолчанию принимается 0.

- 170 -

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

Примеры: handle = FOPEN("Temp.txt")
*
* Получить длину файла.
length = FSEEK(handle,0,2)
*
* Установить в начало файла.
FSEEK(handle,0)

library: EXTEND.LIB
Смотри
также:
FCLOSE(),FERROR(),FCREATE(),FOPEN(),FREAD(),FREADSTR(),FWRITE().
????????????????????????????????????????????????????????????????
? Внимание! Эти функции дают Вам низкоуровневый доступ к ?
? DOS-файлам и устройствам и требуют при использовании особой ?
? аккуратности и достаточного знания операционной системы. ?
????????????????????????????????????????????????????????????????



FWRITE()


Написание: FWRITE() (<вырN1>,<перемС>[,<вырN2>])

Цель:
Записать значение изменяемой, используемой в качестве буфера, в
указанный файл.

Аргументы:2
0<вырN1> - системный номер файла, полученный из FOPEN(),
FCREATE() или назначенный системой DOS.
<перемС> - существующая в памяти символьная переменная,
используемая в качестве выходного буфера.
<вырN2> - указывает количество байтов, записывыаемых из
изменяемой в файл, начиная с текущей позиции указателя файла.
Если этот аргумент опущен, то содержимое буферной изменяемой
записывается полностью.

Возвращает: Числовую величину.
FWRITE() возвращает число записанных байтов. Если возвращаемая
величина равна нулю, то либо полон диск, либо произошла ошибка.
Проверьте FERROR() точный номер DOS-ошибки. Отметьте, что
величина, возвращаемая успешно выполненной FWRITE(), должна быть
равна <вырN2>.

Пример: buffer = SPACE(512)
infile = FOPEN("Temp.txt")
*
outfile = FCREATE("Newfile.txt")
IF FERROR() <> 0
? "Не могу создать файл, DOS-ошибка:",FERROR()

- 171 -
RETURN
ENDIF
*
FREAD(infile,@buffer,512)
IF FERROR() <> 0
? "Не могу прочесть файл, DOS-ошибка:",FERROR()
RETURN
ENDIF
*
FWRITE(outfile,buffer,512)
IF FERROR() <> 0
? "Не могу записать в файл, DOS-ошибка:",FERROR()
ENDIF

library: EXTEND.LIB
Смотри
также:
FCLOSE(),FCREATE(),FERROR(),FOPEN(),FREAD(),FREADSTR(),FSEEK()
????????????????????????????????????????????????????????????????
? Внимание! Эти функции дают Вам низкоуровневый доступ к ?
? DOS-файлам и устройствам и требуют при использовании особой ?
? аккуратности и достаточного знания операционной системы. ?
????????????????????????????????????????????????????????????????



HARDCR()


Написание: HARDCR(<вырC>)

Цель:
Заменить все символы CHR(141) ("мягкий" возврат каретки) на
символы CHR(13) ("жесткий" возврат каретки) для высвечивания
мемо-полей, содержащих "мягкие" возвраты каретки.

Аргументы:
<вырС> - символьная строка или мемо-поле, которое преобразуется.

Возвращает: Символьную строку.
HARDCR() возвращает строку длиной до 65535 символов (64 К).

Пример:
Высветить мемо-поле, сформатированное при помощи MEMOEDIT() с
использованием автоматической прокрутки (word-wrapping).

? HARDCR(notes)

library: EXTEND.LIB
Смотри
также: ?,@...SAY,REPORT FROM,MEMOEDIT(),MEMOLINE(),MEMOREAD(),
MEMOTRAN(),MEMOWRIT(),MLCOUNT()



IF()/IIF()


- 172 -

Написание: IF(<вырL>,<выр1>,<выр2>)/IIF(<вырL>,<выр1>,<выр2>)

Цель:
Возвратить результат одного из двух указанных выражений, в
зависимости от значения логического выражения.

Аргументы: <вырL> - оцениваемое логическое условие.
<выр1> - величина, возвращаемая в случае, если <вырL>
истинно (.Т.).
<выр2> - величина, возвращаемая в случае если <вырL> ложно
(.Т.).

Отметьте, что в отличии от других диалектов, <выр1> и <выр2>
могут быть различных типов.

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

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

IF(<логическое условие>,0,1)

Это приводит к числовым приложениям. Вы можете также
форматировать при помощи логического поля:

IF(paid,SPACE(0),"Go get'em")

Вы также можете напечатать индикаторный символ в различных
колонках, в зависимости от величины логического поля. Для примера:

@ <строка>, IF(in_hosp,10,12) SAY "X"

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

INDEX ON IF(EMPTY(name),company,name) TO <.ntx-файл>

Другая область где Вы можете использовать IF() - заставить LABEL
FORM печатать пустые строки. Для примера:

IF(EMPTY(<вырC>,CHR(255),<вырC>)

Примеры: a = 100

- 173 -
? IIF(a > 50,"greater","less") && Результат: greater
a = 10
? IIF(a > 50,"greater","less") && Результат: less

library: CLIPPER.LIB
Смотри
также: DO CASE



INDEXEXT()


Написание: INDEXEXT()

Цель:
Определить было ли текущее приложение слинковано с
использованием NDX.OBJ для использования совместимых с dBASEIII
PLUS индексами.

Возвращает: Символьную строку.
INDEXEXT() возвращает "NDX", если индексный файл, который Вы
используете, совместимый с dBASEIII PLUS или "NTX", если файл
совместимый с Clipperом.

Пример: * Добавление "NTX" или "NDX" к имени "Name."
*
IF .NOT.FILE("Name." + INDEXEXT())
INDEX ON field1 TO Name
ENDIF

library: CLIPPER.LIB
Смотри
также: INDEXKEY(),INDEXORD().



INDEXKEY()


Написание: INDEXKEY(<вырN>)

Цель: Определить ключевое выражение в указанном индеексе.

Аргументы:
<вырN> - позиция индекса в списке индексных файлов, открытых при
помощи команд USE...INDEX или SET INDEX TO для текущей рабочей
области. Нулевая величина в аргументе указывает на текущий
управляющий индекс, независимо от того, каков его фактический
номер в списке.

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

Примеры: USE Customers INDEX Name,Serial

- 174 -
SET ORDER TO 2
? INDEXKEY(1) && Результат: Name
? INDEXKEY(2) : Serial
? INDEXKEY(0) : Serial

library: CLIPPER.LIB
Смотри
также: USE,SET INDEX,SET ORDER,INDEXEXT(),INDEXORD().



INDEXORD()


Написание: INDEXORD()

Цель:
Определить позицию текущего управляющего индекса в списке
индексных файлов, открытых при помощи USE...INDEX или SET INDEX
TO в текущей рабочей области.

Возвращает: Целую числовую величину.
INDEXORD() возвращает позицию текущего управляющего индекса в
списке открытых индексных файлов. Ноль в качестве возвращаемой
величины показывает, что нет управляющего индекса и у Вас
осуществляется доступ к файлу базы данных в его естественном
порядке.

Использование:
INDEXORD() полезен для запоминания последнего управляющего
индекса, что позволяет Вам востановить нужный порядок записей
позднее для дальнейшего использования.

Пример: USE Customers INDEX Name,Serial
last_ord = INDEXORD() && Результат: 1
SET ORDER TO 2
? INDEXORD() && Результат: 2
SET ORDER TO last_ord
? INDEXORD() && Результат: 1

library: CLIPPER.LIB
Смотри
также: USE,SET INDEX,SET ORDER,INDEXEXT(),INDEXKEY().



INKEY()


Написание: INKEY([<вырN>])

Цель: Прочитать символ с клавиатуры.

Аргументы:
<вырN> - указывает количество секунд, в течении которых INKEY()
ожидает нажатия клавиши. Указание нуля задерживает выполнение
программы до тех пор, пока не будет нажата какая-либо клавиша.

- 175 -
Отметьте, что время ожидания вычисляется по часам операционной
системы и, таким образом, не зависит от скорости
микропроцессора.

Возвращает: Целую числовую величину.
INKEY() возвращает число от -39 до 386, идентифицирующее ASCII-
код нажатой клавиши (такую же величину возвращает функция (FUNC)
LASTKEY()). Если буфер клавиатуры пуст, INKEY() возвращает ноль.
INKEY() возвращает величины для всех функциональных клавиш, а
также для комбинаций: Alt-функцйональная,Ctrl-функцйональная,
Alt-символ,Ctrl-символ. Смотрите в Приложении G полный список
значений возвращаемых величин.

Использование:
INKEY() полезна для выполнения посимвольного приема с клавиатуры
и осуществления задержки программы. Для примера, Вы можете
использовать INKEY() для прекращения команд, работающих с
порцией записей (такими как LIST, LABEL FORM, REPORT FORM),
включенных в условие команды WHILE следующим образом:

REPORT FORM Report WHILE INKEY() <> 27

Для того, чтобы сделать Ваши клавишные операции легкими для
манипулирования, создайте в памяти ряд клавишных переменных,
используя CHR(). Позднее в Вашей программе Вы можете сравнить
результат INKEY() с клавишными переменными, используя выражение
CHR(INKEY()).

Пример: * Высвечивает символ и его код после нажатия клавиши.
i = 0
DO WHILE LASTKEY() <> 27
? "Нажмите любую клавишу:"
i = INKEY(0)
?? "Символ: ",CHR(i),"ASCII-код: ",LTRIM(STR(i))
ENDDO
RETURN

library: CLIPPER.LIB
Смотри
также: SET KEY,CHR(),LASTKEY().



INT()


Написание: INT(<вырN>)

Цель:
Преобразовать числовое выражение в целое, путем уничтожения всех
цифр после десятичной точки.

Аргументы: <вырN> - числовое выражение, преобразовываемое в целое.

Возвращает: Целую числовую величину.
INT() не округляет выражение в аргументе.


- 176 -
Использование: INT() полезна в операциях, где десятичное значение величины
не требуется.

Примеры: ? INT(100.00) && Результат: 100
? INT(.5) && Результат: 0
? INT(-100.00) && Результат: -100

library: CLIPPER.LIB
Смотри
также: ROUND().



ISCOLOR()


Написание: ISCOLOR()

Цель:
Определить, установлен ли на компьютере, выполняющем программу,
скомпилированную Clipperом, цветной графический адаптер.

Возвращает: Логическую величину.
ISCOLOR() возвращает истину (.Т.), если цветной графический
адаптер установлен.

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

Примеры:
* Устанавливает переменные атрибутов цвета в реальном времени
IF ISCOLOR()
c_box = "BG+/B,W/N"
c_say = "BG/B,W/N"
c_get = "W/N,N/W"
ELSE
c_box = "W+"
c_say = "W/N,W/N"
c_get = "W/N,N/W"
ENDIF

library: CLIPPER.LIB
Смотри
также: SET COLOR



LASTKEY()


Написание: LASTKEY()

Цель:
Определить последнюю клавишу, нажатую в состоянии ожидания.

Возвращает: Целую величину.

- 177 -
LASTKEY() возвращает число от -39 до 386, показывающее ACSII-
величину последней клавиши, нажатой в состоянии ожидания.
Командами и функция (FUNC)ми состояния ожидания являются ACCEPT,INPUT,
MENU TO,READ,WAIT и INKEY().
Смотрите в Приложении G возвращаемые величины.

LASTKEY() наиболее удобна при определении клавиши, используемой
для прекращения READ. Кроме этого, если Вы применяете
пользовательскую функцию с опцией VALID, Вы можете нажатием
назначенной клавиши уйти с текущего GET. Вы можете делать
разнообразные типы решений, основанные на возвращаемой величине.

Если Вам нужно знать изменил ли пользователь содержимое
какого либо GET, используйте UPDATE().

Примеры: USE Castomer
m_bal = Bal
@ 7,10 SAY TRIM(Last) + "," + TRIM(First)
@ 9,10 SAY "Текущий баланс" GET m_bal
@ 11,10 SAY "Нажмите <Esc> для отказа от изменений."
READ
*
* Если клавиша, использованная в конце редактирования, была не
* <Esc>, то делается замена значения поля базы данных.
*
IF LASTKEY() <> 27
REPLACE Bal with m_bal
ENDIF

library: CLIPPER.LIB
Смотри
также: KEYBOARD,INKEY(),CHR().



LASTREC()/RECCOUNT()


Написание: LASTREC()/RECCOUNT()

Цель:
Определить количество физических записей в текущем файле базы
данных.

Возвращает: Целую числовую величину.
LASTREC() возвращает количество физических записей в текущем
файле базы данных. Это означает, что команды фильтрации, такие
как SET FILTER или SET DELETED, не влияют на значение
возвращаемой величины.
LASTREC() возвращает ноль, если в текущей рабочей области нет ни
одного открытого USE файла базы данных.

Примеры: USE Sales
? LASTREC() && Результат: 84
? RECCOUNT() && Результат: 84
*
SET FILTER TO Salesman = "1001"

- 178 -
COUNT TO num_recs
? num_recs && Результат: 14
? RECCOUNT() && Результат: 84

library: CLIPPER.LIB
Смотри
также: FIELD().



LEN()


Написание: LEN(<вырC>/<массив>)

Цель:
Возвратить длину символьной строки или количество элементов в
массиве.

Аргументы: <вырС> - символьная строка, длина которой определяется.
<массив> - массив, в котором считаются элементы.

Возвращает: Целая числовая величина.
Если оцениваемая пустая символьная строка, то LEN() возвращает
ноль.

Примеры: ? LEN("строка символов") && Результат: 15
? LEN(SPACE(10)) && Результат: 10
? LEN(SPACE(0)) && Результат: 0
? LEN(TRIM(SPACE(10))) && Результат: 0
DECLARE test_array[10]
? LEN(test_array) && Результат: 10

library: CLIPPER.LIB
Смотри
также: DECLARE,LTRIM(),TRIM()/RTRIM().



LOG()


Написание: LOG(<вырN>)

Цель: Вычислить натуральный логарифм числового выражения.

Аргументы: <вырN> - число больше нуля, натуральный логарифм которого
вычисляется.

Возвращает: Числовую величину.
При указании числа меньшего или равного нулю, LOG() возвращает
числовое переполнение (последовательность звездочек).

Основанием натурального логарифма является число е, которое
равно 2.7183. LOG() является функцией обратной к EXP().

Отметьте, что из-за математического округления величины,

- 179 -
возвращаемые из LOG() и EXP() и используемые в качестве
аргументов для обратной функции могут не совпадать.

Примеры: ? LOG(10) && Результат: 2.30
? LOG(10 * 2) && Результат: 3.00
? EXP(LOG(1)) && Результат: 1.00
? LOG(2.71) && Результат: 1.00

library: CLIPPER.LIB
Смотри
также: SET DECIMALS,SET FIXED,EXP().



LOWER()


Написание: LOWER(<вырC>)

Цель:
Преобразовать символы верхнего регистра ( заглавные буквы) в
символы нижнего регистра (прописные буквы).

Аргументы: <вырC> - преобразуемое символьное выражение.

Возвращает: Символьную строку.
LOWER() возвращает прописные буквы всех алфавитных символов. Все
другие символы она игнорирует.

Примеры: ? LOWER("СТРОКА") && Результат: строка
? LOWER("1234 СИМВОЛ =") && Результат: 1234 символ =

library: CLIPPER.LIB
Смотри
также: UPPER().



LTRIM()


Написание: LTRIM(<вырC>)

Цель:
Удалить впередистоящие пробелы в указанной символьной строке.

Аргументы:
<вырC> - символьная строка, в которой удаляются начальные
пробелы.

Возвращает: Символьную строку.
Если аргументом является пустая строка, то LTRIM() возвращает
также пустую строку ("").

LTRIM() полезна при форматировании символьной строки, содержащей
начальные пробелы. Это может быть, например, числа,
преобразованные в символьные строки при помощи STR().

- 180 -

Примеры: number = 18
? STR(number) && Результат: 18
? LEN(STR(number)) && Результат: 10
? LTRIM(STR(number)) && Результат: 18
? LEN(LTRIM(STR(number))) && Результат: 2

library: CLIPPER.LIB
Смотри
также: TRIM(),STR(),SUBSTR().



MAX()


Написание: MAX(<выр1>,<выр2>)

Цель: Определить большее из двух числовых выражений или дат.

Аргументы: <выр1> - первое числовое выражение или дата.
<выр2> - второе числовое выражение или дата.
Отметьте, чтооба аргумента должны быть одного и того же типа.

Возвращает: Числовую величину или дату.
MAX() позволяет получить больший из двух аргументов. Она
возвращает правильный ответ даже если одно из выражений является
пустым.

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

Примеры: ? MAX(1,2) && Результат: 2
? MAX(2,1) && Результат: 2
*
? DATE() && Результат: 09/01/88
? MAX(DATE(), DATE()+30 ) && Результат: 10/01/88
? MAX(DATE(), CTOD("")) && Результат: 09/01/88

library: CLIPPER.LIB
Смотри
также: MIN()



MEMOEDIT()


Написание:
MEMOEDIT(<вырC>,[<вырN1>,<вырN2>,<вырN3>,<вырN4>][,<вырL>])

Цель:
Высветить или отредактировать символьные строки или мемо-поля.

Аргументы: <вырC> - редактируемая строка или мемо-поле.
<вырN1>,<вырN2>,<вырN3>,<вырN4> - определяет координаты окна
редактирования в следующем порядке: верхний, левый, нижний и

- 181 -
правый углы. Если они опущены, то для редактирования
используется весь экран.
<вырL> - определяет редактируется или просто высвечивается
мемо-поле. Если Вы указываете истину (.Т.), то высвечивается
мемо и Вы входите в режим редактирования. Если Вы указываете
ложь (.F.), то мемо только высвечивается. Отметьте, что если Вы
только высвечиваете мемо, то способность прокрутки отсутствует.
По умолчанию принимается истина (.Т.).


Таблица 6-12. Клавиши управления в MEMOEDIT().
----------------------------------------------------------------
Клавиша Использование
----------------------------------------------------------------
Стрелка вверх Передвинуться вверх на одну
или Ctrl-E строку.

Стрелка вниз Передвинуться вниз на одну
или Ctrl-X строку.

Стрелка влево Передвинуться влево на один
или Ctrl-S символ.

Стрелка вправо Передвинуться вправо на один
или Ctrl-D символ.

Ctrl-Стрелка влево Передвинуться влево на одно
или Ctrl-A слово.

Ctrl-Стрелка вправо Передвинуться вправо на одно
или Ctrl-F слово.

Home В начало текущей строки.

End В конец текущей строки.

Ctrl-Home В начало текущего окна.

Ctrl-End В конец текущего окна.

PgUp На одно окно редактирования вверх.

PgDn На одно окно редактирования вверх.

Ctrl-PgUp В начало мемо.

Ctrl-PgDn В конец мемо.
----------------------------------------------------------------



Таблица 6-13. Клавиши редактирования в MEMOEDIT().
----------------------------------------------------------------
Клавиша Использование
----------------------------------------------------------------
Ctrl-Y Удаление текущей строки.


- 182 -
Ctrl-T Удаление слова справа.

Ctrl-B Восстановление мемо в окне
редактирования.
----------------------------------------------------------------



Таблица 6-14. Клавиши окончания редактирования в MEMOEDIT().
----------------------------------------------------------------
Клавиша Использование
----------------------------------------------------------------
Ctrl-W Закончить изменение и
сохранить сделанные изменения.

Esc Отказ от редактирования.
----------------------------------------------------------------

Для управления переходом со строки на строку МEMOEDIT()
автоматически вставляет пару символов: "мягкий" возврат каретки
и перевод строки. ("Мягкий" возврат каретки - CHR(141); перевод
строки CHR(10)). Когда Вы нажимаете <Return>, вставляются
"твердый" возврат каретки/перевод строки и курсор переходит на
следующую строку. ("Твердый" возврат каретки - CHR(13)).

Отметьте, что символы "мягких" возвратов каретки могут влиять на
результаты выполнеия команд высвечивания (таких как ? и REPORT
FORM) или конфликтовать с текстами, созданными при помощи других
текстовых процессоров. Используйте HARDCR() и MEMOTRAN() вставки
необходимых символов.

Примеры: * Для редактирования текущего мемо-поля :

REPLACE Memo WITH;
MEMOEDIT(Memo, 5, 10, 20, 69, .T.)

* Для высвечивания мемо-поля без редактирования :

MEMOEDIT(Memo, 5, 10, 20, 69, .F.)
WAIT ""

* Для редактирования символьной строки, используя весь экран:

note = SPACE(1)
note = MEMOEDIT(note)

Этот пример показывает пользовательскую функцию, которая
редактирует мемо-поле, высвечиваемое внутри рамки с заголовком:

FUNCTION EditMemo
PARAMETERS memo, title, tr, lc, br, rc
PRIVATE temp_scr
SAVE SCREEN TO temp_scr
@ tr-1, lc-2 CLEAR TO br+1, rc+2
@ tr-1, lc-2 TO br+1, rc+2
@ tr-1, lc SAY "["+title+"]"
var = MEMOEDIT(memo, tr, lc, br, rc, .T.)

- 183 -
RESTORE SCREEN FROM temp_scr
RETURN (var)

library: EXTEND.LIB
Смотри
также: HARDCR(), MEMOLINE(), MEMOREAD(), MEMOTRAN(), MEMOWRIT(),
MLCOUNT().



MEMOLINE()

Написание: MEMOLINE(<вырC>,<вырЧ1>,<вырЧ2>)

Цель:
Извлечь сформатированную строку текста из символьного выражения
или мемо-поля.

Аргументы: <вырС> - символьное выражение или мемо-поле, из которого
производится извлечение.
<вырЧ1> - количество символов в строке.
<вырЧ2> - количество выдаляемых строк.

Возвращает: Символьная строка.

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

Примеры:
Следующий пример печатает мемо-поле, начиная со строки 12,
колонки 10 по строкам, длиной 40 символов.

SET DEVICE TO PRINT
width = 40
row = 12
col = 10
lines = MLCOUNT(Notes, width)
FOR line=1 TO lines
print_line = MEMOLINE(Notes, width, line)
@ row+line-1, col SAY print_line
NEXT
SET DEVICE TO SCREEN
RETURN

library: EXTEND.LIB
Смотри
также: HARDCR(), MEMOEDIT(), MEMOREAD(), MEMOTRAN(), MEMOWRIT(),
MLCOUNT().


MEMOREAD()

- 184 -

Написание: MEMOREAD(<вырC>)

Цель: Прочесть содержимое текстового файла на диске.

Аргументы:
<вырС> - имя файла, содержимое которого Вы хотите прочесть с
диска. Отметьте, что имя должно содержать расширение (если оно
существует) и может содержать путь.

Возвращает: Символьную строку.

MEMOREAD() возвращает содержимое текстового файла в виде
символьной строки. Максимальный размер файла, который может быть
прочтен, 65 535 символов (64К), что равно максимальному размеру
символьной изменяемой.

Примеры: Ниже MEMOREAD() используется для назначения содержимого
текстового файла как мемо-полю, так и символьной изменяемой

* Notes является мемо-полем.
REPLACE Notes WITH MEMOREAD("Temp.txt")
charvar = MEMOREAD("Temp.txt")

Эта простая программка использует MEMOREAD() для чтения файла
с диска, редактирования его и строки обратно на диск.

* Editor.prg
PARAMETERS file
MEMOWRIT(file, MEMOEDIT(MEMOREAD(file)))
RETURN

library: EXTEND.LIB
Смотри
также: REPLACE, HARDCR(), MEMOEDIT(), MEMOLINE(), MEMOTRAN(),
MEMOWRIT(), MLCOUNT().


MEMORY()

Написание: MEMORY(<вырЧ>)

Цель: Определить количество доступной памяти.

Аргументы:
<вырЧ> - числовое выражение, которое должно содержать ноль.

Возвращает: Целую числовую величину.

MEMORY(0) возвращает количество свободной памяти, доступное для
использования.

Использование:
Смотрите главу 9 "Среда исполнения" .

library: CLIPPER.LIB


- 185 -
MEMOTRAN()


Написание: MEMOTRAN(<вырС1>[,<вырС2>[,<вырС3>]])

Цель: Заменить пары "возврат каретки"/"перевод строки".

Аргументы:
<вырС1> - символьная строка или мемо-поле, в котором заменяются
"мягкие" или "твердые" возвраты каретки.
<вырС2> - символ, который заменяет пару "твердый" возврат
каретки/перевод строки.
<вырС3> - символ, который заменяет пару "мягкий" возврат
каретки/перевод строки.

Возвращает: Символьную строку.
Если Вы не укажете <вырС2> и <вырС3>, MEMOTRAN() все "твердые"
возвраты каретки на точку с запятой, все "мягкие" возвраты
каретки на пробелы, и удаляет все переводы строки.

Использование:
Величины замещения, принимаемые по умолчанию, соответствуют
требованиям команды REPORT FORM.

Если Вы вызываете REPORT FORM, который использует MEMOTRAN(), и
не используете MEMOTRAN() где-нибудь еще а программе, необходимо
объявить MEMOTRAN() для радактора связей посредством EXTERNAL.

Примеры: Стереть все форматирующие символы в мемо-поле.

REPLACE Notes WITH MEMOTRAN(Notes, " ", " ")

library: EXTEND.LIB
Смотри
также: REPLACE, HARDCR(), MEMOEDIT(), MEMOLINE(), MEMOREAD(),
MEMOWRIT(), MLCOUNT().


MEMOWRIT()

Написание: MEMOWRIT(<вырС1>,<вырС2>)

Цель: Записать символьную строку в указанный файл на диске.

Аргументы:
<вырС1> - имя файла с диска. Отметьте, что оно должно содержать
расширение и может содержать, в случае необходимости, путь.
<вырС2> - символьная строка, записываемая в качестве содержимого
файла.
Возвращает: Логическую величину.

MEMOWRIT() возвращает "истину"(.T.), если процедура строки
выполнилась успешно.

Примеры: status = MEMOWRIT("Temp.txt",Notes)
IF status
RUN Editor Temp.txt

- 186 -
ELSE
? "Ошибка строки."
ENDIF

library: EXTEND.LIB
Смотри
также: REPLACE, HARDCR(), MEMOEDIT(), MEMOLINE(), MEMOREAD(),
MEMOTRAN(), MLCOUNT().


MIN()

Написание: MIN(<выр1>,<выр2>)

Цель: Определить наименьшее из двух числовых выражений или дат.

Аргументы: <выр1> - первое из сравниваемых выражений.
<выр2> - второе из сравниваемых выражений.
Отметьте, что оба аргумента должны быть одного и того же типа.

Возвращает: Числовую величину или дату.

Использование:
MIN() полезна для того, чтобы убедиться, что величина выражения
меньше указанного максимума.

Примеры: a = 99
b = 100
? MIN(a,b) && Результат: 99
? DATE() && Результат: 09/01/88
? MIN(DATE(), DATE()+30) && Результат: 09/01/88

library: CLIPPER.LIB
Смотри
также: MAX().



MLCOUNT()

Написание: MLCOUNT(<вырС>,<вырЧ>)

Цель: Подсчитать количество отформатированных строк в строке
или мемо-поле.
Аргументы: <вырС> - символьная строка или мемо-поле, в котором
подсчитываются форматированные строки.
<вырЧ> - количество символов в форматированных строках.
Возвращает: Целую числовую величину.
Использование:
MLCOUNT() подсчитывает количество строк в символьной строке,
используя для подсчета количество символов в строчке. Если
конец строки прерывает слово, то слово переносится на следующую
строку.
MLCOUNT() используется главным образом вместе с MEMOLINE() для
форматирования мемо-полей или длинных символьных строк для
печати. Для того, чтобы сделать это, Вы сначала используете
MLCOUNT(), чтобы получить количество форматированных строк.

- 187 -
Затем используете MEMOLINE() в цикле для извлечения
форматированных строк по одной за один раз.

Примеры: count = MLCOUNT(memo, 40)
? count

library: EXTEND.LIB
Смотри
также: HARDCR(), MEMOEDIT(), MEMOLINE(), MEMOREAD(), MEMOTRAN(),
MEMOWRIT().

MONTH()

Написание: MONTH(<вырД>)

Цель:
Преобразовать дату в число, представляющее номер месяца в году.

Аргументы: <вырД> - преобразуемая дата.

Возвращает: Целую числовую величину.
MONTH() возвращает число в диапазоне от 0 до 12. Указывая
нулевую дату, функция (FUNC) возвращает ноль.

Использование:
MONTH() полезна, когда Вам нужен номер месяца при вычислениях
для таких вещей как периодические отчеты.

Примеры: ? DATE() && Результат: 09/01/88
? MONTH(DATE()) && Результат: 9
? MONTH(DATE()) + 1 && Результат: 10

library: CLIPPER.LIB
Смотри
также:
CDOW(), DOW(), CMONTH(), DAY(), YEAR(), CTOD(), DTOC(), DTOS(),
DATE().


NETERR()

Написание: NETERR()

Цель:
Определить, были ли команды USE, USE..EXCUSIVE или APPEND BLANK
выполнены успешно в сетевой среде.

Возвращает: Логическую величину.

NETERR() возвращает "истину"(.T.), если во время выполнения
команд возникли ошибки.

Таблица 6-15. Команды, при выполнении которых NETERR() сообщает
об ошибках.
----------------------------------------------------------------
Команда Обстоятельство
----------------------------------------------------------------

- 188 -
USE Файл используется другой станцией в режиме
USE EXCLUSIVE.
USE...EXCLUSIVE Файл используется другой станцией в режиме
USE EXCLUSIVE или USE.
APPEND BLANK Файл залокирован FLOCK() или возникла вторая
попытка выполнить APPEND BLANK в то же самое
время.
----------------------------------------------------------------

Использование:
Для получения более подробной информации смотрите главу 10
"Использование Clipperа в Локальной Сети".

Примеры: USE Customers
IF NETERR()
? "Файл Customers используется другими."
WAIT
RETURN
ENDIF

library: CLIPPER.LIB
Смотри
также: USE, USE...EXCLUSIVE, APPEND BLANK, FLOCK(), RLOCK().


NETNAME()

Написание: NETNAME()

Цель: Определить идентификацию данной станции.

Возвращает: Символьную строку.

NETNAME() возвращает обозначение данной станции в виде
символьной строки длиною до 15 символов. Если обозначение
станции не было установлено или Ваше приложение выполняется не
в среде IBM-PC Network, функция (FUNC) возвращает пустую строку ("").

Примеры: ? NETNAME()

library: CLIPPER.LIB




NEXTKEY()

Написание: NEXTKEY()

Цель:
Прочесть следующий клавишный код без удаления его из буфера
клавиатуры.

Возвращает: Целую числовую величину.

NEXTKEY() возвращает число в пределах от -39 до 386,
обозначающее ASCII-код нажатой клавиши (такую же величину

- 189 -
возвращают INKEY() и LASTKEY()). Если буфер клавиатуры пуст, то
NEXTKEY() возвращает ноль .
NEXKEY() возвращает величины для всех функциональных, а также
Alt-функциональных, Ctrl-функциональных, Alt-символьных,
Ctrl-символьных комбинаций. Полный перечень возвращаемых
величин.

Использование:
В виду того, что NEXTKEY() не удаляет код из буфера клавиатуры,
Вы можете использовать этот код для передечи управления
процедуре, которая использует состояние ожидания для получения
кода из буфера.

Примеры: KEYBOARD CHR(27)
? NEXTKEY(), LASTKEY() && Результат: 27 0
? INKEY(), LASTKEY() && Результат: 27 27

library: EXTEND.LIB
Смотри
также: INKEY(), LASTKEY().




PCOL()

Написание: PCOL()

Цель: Определить текущее положение печатающей головки принтера.

Возвращает: Целую числовую величину.
PCOL() возвращает число, представляющее номер колонки сследующий
после текущего положения печатающей головки принтера. Для примера,
если Вы печатаете строку длиной пять символов, начиная с первой
колонки, то PCOL() возвращает 6.
EJECT сбрасывает PCOL() в ноль. Если Вам нужно сбросить
внутреннюю величину печатающей колонки без выполнения EJECT,
используйте SETPRC().

Использование:
PCOL() помогает сохранить номер колонки, когда Вы хотите
разместить какой-либо текст относительно другого.

Примеры: SET DEVICE TO PRINT
@ 10, 0 SAY "Привет, "
@ 10, PCOL()+1 SAY "как поживаешь?"
EJECT
SET DEVICE TO SCREEN

Результат:

Привет, как поживаешь?

library: CLIPPER.LIB
Смотри
также: PROW(), SETPRC(), COL(), ROW().


- 190 -


Поделитесь в соцсетях и получите сюрприз!