Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

4.1.1. Слияние текста и его выражений

Команда

\TextLine | \\TextLine

выводит текст TextLine в окно VFP и/или в текстовый файл, например:

\Этот текст отобразится на экране монитора

Выводимый текст может содержать выражения, обрамленные разделителями. По умолчанию в качестве левого разделителя употребляются символы <<, а в качестве правого – символы >>. При этом выражение выводится как текст (без разделителей), если SET TEXTMERGE установлен в OFF, например:

set textmerge off

fi = Pi( ) / 4

\Синус угла <<fi>> равен <<Sin(fi)>>

Выведенный текст:

Синус угла fi равен Sin(fi)

После задания SET TEXTMERGE ON обрамленные разделителями выражения будут оцениваться, а выводимый текст будет содержать полученные в результате вычислений результаты, например:

set textmerge on

fi = Pi( ) / 4

\Синус угла <<fi>> равен <<Sin(fi)>>

Выведенный текст:

Синус угла 0.7854 равен 0.71

Команда \\ работает так же, как и команда \, за тем исключением, что команда \ начинает вывод с новой строки, а команда \\ продолжает выводить текст на текущей строке. Так, тот же, что и в предшествующем примере текст, выведет следующая программа:

set textmerge on

fi = Pi( ) / 4

\Синус угла <<fi>> равен

&& Продолжаем вывод на той же строке

\\ <<Sin(fi)>>

Комментарий, расположенный после команды \ | \\, выводится как обычный текст. Выражения, включенные в комментарий, будут оцениваться наряду с другими выражениями, присутствующими в строке команды, например:

set textmerge on

fi = Pi( ) / 4

\Синус угла <<fi>> равен <<Sin(fi)>> && Повторяем: <<Sin(fi)>>

Выведенный текст:

Синус угла 0.7854 равен 0.71 && Повторяем: 0.71

Аналогичным образом обрабатывается комментарий в рассматриваемой ниже команде TEXT … ENDTEXT.

Выводимый командами \ | \\ текст можно предварять символами, например знаками табуляции, записанными в системную переменную _PRETEXT, например:

set textmerge on

set textmerge to d:\a.txt show

close databases

open database 'd:\HomeLibrary\HomeLibrary'

use authors

store {^2004–01–01} to someDate

_PRETEXT = "" && или Chr(9) для знака табуляции

\ Список авторов, занесенных в базу после <<someDate>>

_PRETEXT = " * "

&& Просматриваем всех авторов с датой большей someDate scan for InputDate > someDate

\ <<Rtrim(Author)>>

endScan

close databases

set textmerge to

&& Просмотр файла d:\a.txt

modify file d:\a.txt noedit && Результат см. на рис. 4.1

Рис. 4.1. Текст с символами, заданными _PRETEXT

Команда

SET TEXTMERGE [ON | OFF] [TO [FileName] MEMVAR VarName [ADDITIVE]]

[WINDOW WindowName] [SHOW | NOSHOW]

активизирует или отключает режим оценки расположенных между разделителями текста выражений, присутствующих в тексте команд \ | \\ и TEXT ... ENDTEXT.

Опции:

ON, OFF – соответственно активизирует или отключает режим оценки выражений. По умолчанию оценка текста не выполняется – действует опция OFF.

TO [FileName] – направляет вывод команд \ | \\ и TEXT ... ENDTEXT в текстовый файл FileName. Вывод в окно VFP эта опция не отменяет. Если файл не существует, то он будет создан. Если не задана опция ADDITIVE, то существующий файл будет перезаписан. Причем если SET SAFETY установлен в ON и вывод направляется в файл d:\a.txt, то появится приведенный на рис. 4.2 диалог.

Рис. 4.2. Команда SET SAFETY установлена в ON

При выборе No вывод данных в файл d:\a.txt выполнен не будет.

Пример:

set textmerge on

&& Выводим текст в файл, не отображая результат на экране

set textmerge to d:\a.txt noshow

fi = Pi( ) / 4

\Синус угла <<fi>> равен <<Sin(fi)>>

&& Закрываем файл d:\a.txt

set textmerge to

&& Просмотр файла d:\a.txt

modify file d:\a.txt noedit && Результат см. на рис. 4.3

Рис. 4.3. Вывод текста командой \ в файл

Идентификатор файла, открываемого для записи текста, хранит системная переменная _TEXT. Команда

SET TEXTMERGE TO

закроет файл, идентификатор которого содержит эта системная переменная.

В приведенном выше примере будет закрыт файл d:\a.txt, поскольку после его открытия командой SET TEXTMERGE значение системной переменной _TEXT не изменялось. Если же переменная _TEXT получила иное значение, то для закрытия файла d:\a.txt можно употребить функцию FCLOSE, передав ей в качестве параметра идентификатор файла, например:

set textmerge on

set textmerge to d:\a.txt noshow

&& Сохраняем идентификатор файла d:\a.txt в переменной h

h = _TEXT

fi = Pi( ) / 4

\Синус угла <<fi>> равен <<Sin(fi)>>

&& Закрываем файл d:\a.txt

Fclose(h)

modify file d:\a.txt noedit

Замечание. Вывод в файл также обеспечит соответствующее употребление команды SET ALTERNATE.

MEMVAR VarName – обеспечивает запись текста, выводимого командами \ | \\ и TEXT ... ENDTEXT, в переменную VarName. Область видимости переменной VarName определяется в общепринятом порядке посредством команд LOCAL, PUBLIC и PRIVATE.

Выполнение SET TEXTMERGE TO без опции MEMVAR разрывает связь переменной VarName с командами \ | \\ и TEXT ... ENDTEXT.

Пример. Результат команд \ и TEXT ... ENDTEXT заносится в переменные txt1, txt2, txt3. Для обеспечения работоспособности программы перед каждым заданием VarName (используются имена txt1, txt2 и txt3) выполняется команда SET TEXTMERGE TO. При ее отсутствии возникнет ошибка Textmerge is recursive.

fi1 = Pi( ) / 3

fi2 = Pi( ) / 4

fi3 = Pi( ) / 5

set textmerge on noshow

&&

set textmerge to memvar txt1

\Синус угла <<fi1>> равен <<Sin(fi1)>>

&&

set textmerge to && Команда обязательна

&&

set textmerge to memvar txt2

\Синус угла <<fi2>> равен <<Sin(fi2)>>

&&

set textmerge to && Команда обязательна

&&

text to txt3 pretext 7

Синус угла <<fi3>> равен <<Sin(fi3)>>

endText

&&

set textmerge off

&&

? txt1

? txt2

? txt3

Результат:

Синус угла 1.0472 равен 0.87

Синус угла 0.7854 равен 0.71

Синус угла 0.6283 равен 0.59

Можно указать единственную переменную VarName для разных команд \ | \\ и TEXT ... ENDTEXT, например:

fi1 = Pi( ) / 3

fi2 = Pi( ) / 4

fi3 = Pi( ) / 5

set textmerge on noshow

set textmerge to memvar txt1

\Синус угла <<fi1>> равен <<Sin(fi1)>>

\Синус угла <<fi2>> равен <<Sin(fi2)>>

text pretext 7

Синус угла <<fi3>> равен <<Sin(fi3)>>

endText

&&

set textmerge to && Команда обязательна

&&

? txt1

Результат тот же, что и в вышеприведенном примере. Однако переменная txt1 не будет обнаружена VFP и возникнет ошибка Variable 'TXT1' not found, если перед употреблением переменной txt1 не выполнить команду SET TEXTMERGE TO.

ADDITIVE – обеспечивает добавление очередной порции данных в существующий файл. При ее отсутствии существующий файл перезаписывается.

WINDOW WindowName – направляет вывод в окно WindowName. Окно создается командой DEFINE WINDOW; окно может быть неактивным и невидимым.

Пример:

define window wForTextMerge at 10, 10 size 3, 40;

in desktop system float close title "Синус fi";

font "Times New Roman", 12

activate window wForTextMerge

set textmerge on window wForTextMerge show

fi = Pi( ) / 4

\Синус угла <<fi>> равен <<Sin(fi)>> && Результат см. на рис. 4.4

Рис. 4.4. Вывод направлен в пользовательское окно

SHOW | NOSHOW – разрешает (SHOW) или запрещает (NOSHOW) вывод текста в главное окно VFP, текущее окно или окно, указанное опцией WINDOW. По умолчанию действует опция SHOW.

Рассмотренная команда, а также команда TEXT ... ENDTEXT позволяет, используя некоторый шаблон, быстро создавать письма, программы, этикетки и др.

В командах \ | \\ и TEXT ... ENDTEXT могут быть использованы вложенные выражения. Для этого используются memo-поля, содержащие текст, ограниченный разделителями.

Пример. Memo-поле MemoField первой записи таблицы test.dbf содержит приведенную на рис. 4.5 строку.

Рис. 4.5. Memo-поле, предназначенное для оценки в команде \

Оценка memo-поля выполняется в следующей программе:

if not Used("Test") then

use d:\HomeLibrary\Test in 0

else

select Test

go top

endif

set textmerge on show

fi = Pi( ) / 4

\Пример вложенных выражений

\<<Test.MemoField>>

Результат.

Пример вложенных выражений

Синус угла 0.7854 равен 0.71

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

\<<Alltrim(Test.MemoField)>>

приведет к появлению следующего результата:

Пример вложенных выражений

Синус угла <<fi>> равен <<Sin(fi)>>

Команда

SET TEXTMERGE DELIMETERS [TO cLeftDelimiter [, cRightDelimiter]]

устанавливает разделители текста.

Параметры:

cLeftDelimiter, cRightDelimiter – задают соответственно левые и правые разделители. Если задан один параметр, то левые и правые разделители будут совпадать, например:

set textmerge on

set textmerge delimiters to "~"

fi = Pi( ) / 4

\Синус угла ~fi~ равен ~Sin(fi)~

Вызов команды без параметров восстановит заданные по умолчанию разделители.

Команда

TEXT [TO VarName [ADDITIVE] [TEXTMERGE] ; [NOSHOW] [FLAGS nValue] [PRETEXT eExpression]] TextLines ENDTEXT… ENDTEXT

посылает строки текста TextLines на текущее устройство вывода, оценивая, если SET TEXTMERGE установлен в ON, расположенные между разделителями выражения. В качестве выходного устройства могут быть указаны главное окно VFP (по умолчанию), пользовательское окно, текстовый файл и принтер. Также вывод можно направить в переменную VarName.

Команда оказывает такое же действие, что и совместное употребление команд \ | \\ и SET TEXTMERGE, но имеет большие возможности. Может совместно применяться с командами SET TEXTMERGE, SET TEXTMERGE DELIMETERS, SET ALTERNATE, SET CONSOLE, SET PRINTER и др.

Значение, хранимое системной переменной _PRETEXT, имеет в рассматриваемой команде тот же эффект, что и в команде \ | \\.

Команды SET TEXTMERGE и SET TEXTMERGE DELIMETERS при использовании с TEXT … ENDTEXT работают так же, как с командой \ | \\, например:

set textmerge on

&& Выводим текст в файл, не отображая результат на экране

set textmerge to d:\a.txt noshow

fi = Pi( ) / 4

text pretext 7

Синус угла <<fi>> равен <<Sin(fi)>>

endText

&& Закрываем файл d:\a.txt

set textmerge to

&& Просмотр файла d:\a.txt

modify file d:\a.txt noedit && Результат см. на рис. 4.3

Опции и параметры:

TO VarName – задает то же, что и опция MEMVAR VarName команды SET TEXTMERGE. Если SET TEXTMERGE установлен в файл, а в команде TEXT … ENDTEXT задана опция TO VarName, то вывод будет направляться как в файл, так и в переменную, и вдобавок в окно VFP, если не задана опция NOSHOW.

ADDITIVE, NOSHOW – имеют то же действие, что и одноименные опции команды SET TEXTMERGE.

FLAGS nValue – задает дополнительные установки вывода; параметр nValue задается как сумма следующих значений:

  • 1 – подавляет вывод в файл, заданный системной переменной _TEXT;

  • 2 – если присутствует опция NOSHOW, то сохраняет имеющиеся в TEXT ... ENDTEXT чистые линии, предшествующие тексту. Новый текст будет отделен от ранее выведенного символом новой строки. Если одновременно задать nValue = 2 и PRETEXT = 4, то чистые линии, имеющиеся в TEXT ... ENDTEXT и предшествующие тексту, будут удалены.

TEXTMERGE – задает режим оценки выражений, имеющихся в TextLines и обрамленных разделителями, без установки SET TEXTMERGE в ON.

PRETEXT eExpression – задает, если eExpression имеет тип Character, строку символов, размещаемую перед текстом каждой линии; длина строки не может быть более 255 символов. Строка eExpression замещает содержимое системной переменной _PRETEXT. Область действия опции PRETEXT – текущая команда TEXT … ENDTEXT.

Если тип eExpression – Numeric, то оно параметр задает дополнительный флаг, влияющий на способ вывода текста. Параметр может принимать указанные в табл. 4.2 значения или равняться их сумме или сумме любой пары значений.

Таблица 4.2

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]