Распечатать страницу

Функции для MEMO-полей в Visual FoxPro

« Назад

Функция

MEMLINES(MemoFieldName)

возвращает число строк в memo-поле MemoFieldName текущей записи таблицы. Если адресуется memo-поле таблицы, открытой в нетекущей области, то имя поля предваряется псевдонимом таблицы и точкой. Длина и число строк memo-поля определяются установкой команды SET MEMOWIDTH (значение по умолчанию – 50).

Функция

MLINE(MemoFieldName, nLineNumber [, nNumberOfCharacters])

возвращает заданную строку memo-поля MemoFieldName. Результат имеет тип Character или Varbinary. Результат типа Varbinary возвращается при работе с полями типов Varbinary и Blob.

Параметры:

nLineNumber – номер возвращаемой строки. Возвращается пустая строка, если параметр nLineNumber отрицателен, равен нулю или больше числа строк в memo-поле.

nNumberOfCharacters – число символов от начала memo-поля, пропустив которые функция MLINE( ) возвращает заданную строку.

Обычно для задания nNumberOfCharacters используется системная переменная _MLINE, значение которой обновляется текущим отступом от начала memo-поля после каждого вызова MLINE( ).

Замечание. Для обработки двоичных полей лучше употреблять функцию ALINES( ), поскольку с такими полями MLINE( ) может возвращать не вполне ожидаемые результаты при разных установках SET MEMOWIDTH.

Функция MLINE( ) после чтения строки, например, с номером gnCount заносит в _MLINE новое значение, равное

_MLINE = _MLINE + Len(MLINE(MemoField, gnCount))

После чтения первой строки:

_MLINE = Len(MLINE(MemoField, gnCount))

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

Конец строки memo-поля определяет либо символ возврата каретки, либо при его отсутствии – установка команды SET MEMOWIDTH.

При обработке больших memo-полей рекурсивными процедурами использование _MLINE в качестве значения nNumberOfCharacters может улучшить производительность.

Для поиска в memo-поле употребляются функции ATLINE( ) и ATCLINE( ).

Пример. Приводятся 2 варианта использования MLINE( ) для получения строк memo-поля Notes текущей записи текущей таблицы. Во втором, более быстром, употребляется системная переменная _MLINE.

store Memlines(Notes) to gnNumLines     && Число строк в memo-поле

&&

&& Вариант 1

for gnCount = 1 to gnNumLines

? Mline(notes, gnCount)   && Печатаем строку memo-поля

next

&&

&& Вариант 2

store 0 to _MLINE              && Инициализация _MLINE

for gnCount = 1 to gnNumLines

? Mline(Notes, 1, _MLINE)       && Печатаем строку memo-поля

next