Show/Hide Toolbars

XSharp

语法

TEXT [TO <VariableName> [ADDITIVE] [TEXTMERGE] [NOSHOW] [FLAGS nValue] [PRETEXT eExpression]]
    TextLines
ENDTEXT

参数

TextLines 指定要发送到当前输出设备的文本。TextLines 可以由文本、内存变量、数组元素、表达式、函数或它们的任意组合组成。
注意
只有将 SET TEXTMERGE 设为 ON 并用 SET TEXTMERGE DELIMITERS 指定的分隔符括起来时,X# 才会计算用 TextLines 指定的表达式、函数、内存变量和数组元素。如果 SET TEXTMERGE 为 OFF,Visual FoxPro 将以字符串字面形式输出表达式、函数、内存变量和数组元素及其分隔符。
 
例如,当您指定 DATE( ) 函数为 TextLines 时,只有当 SET TEXTMERGE 为 ON 时,X# 才会求值并输出当前日期,并且 TextLines 包含函数和适当的定界符,如 <<DATE()>>。如果 SET TEXTMERGE 为 OFF,X# 输出 <<DATE( )>> 将以字符串字面形式输出。
 
如果将注释放在 TEXT...ENDTEXT 中或单反斜线字符 (\) 或双反斜线字符 (\\) 之后,X# 将输出注释。

 

TO <VariableName>指定用于传递 TEXT...ENDTEXT 内容的内存变量名。该变量可以已经存在。
 
如果变量尚未声明,X# 会自动将其创建为私有变量。TO 子句的作用与 SET TEXTMERGE 的设置无关。如果 SET TEXTMERGE 被设置为文件,并且包含 TO 语句,Visual FoxPro 将同时输出文件和变量。

 

ADDITIVE 决定 TO 变量的内容是被覆盖还是添加到现有内容中。
 
如果 TO VarName 中的内容不是字符串,X# 将始终覆盖 VarName 中的内容。

 

 

TEXTMERGE 无需将 SET TEXTMERGE 设置为 ON,即可评估分隔符包围的内容。

 

NOSHOW 禁止在屏幕上显示合并文本。

 

FLAGS nValue指定一个数值,用于决定是否抑制输出到输出文件,或是否在输出中包含任何文本前的空行。

值(附加)


1

禁止输出到使用 _TEXT 系统变量指定的文件。

2

当包含 NOSHOW 子句时,TEXT...ENDTEXT 中出现的文本前保留空行。将 nValue 设置为 2 时,当前的 TEXT...ENDTEXT 输出将与之前的 TEXT...ENDTEXT 输出换行分隔。

 

如果将 nValue 设置为 2 和 PRETEXT 设置为 4,则当前的 TEXT...ENDTEXT 输出将与之前的 TEXT...ENDTEXT 输出以换行方式分开,同时删除 TEXT...ENDTEXT 输出中的空行。

 

 

 

PRETEXT eExpression指定在 TEXT...ENDTEXT 或数字表达式之间的每行文本合并内容之前插入的字符串。
 
下表根据 eExpression 指定的表达式描述了 PRETEXT 子句的行为。

 

eExpressionPRETEXT 行为  

 

Character expression在 TEXT...ENDTEXT 语句之间出现的文本合并内容的每一行之前插入表达式。与 TEXT...ENDTEXT 一起使用 PRETEXT 时,eExpression 的最大长度限制为 255 个字符。
eExpression 会覆盖 _PRETEXT 系统变量的内容。当 eExpression 包含一个需要求值的表达式(例如用户定义函数 (UDF))时,Visual FoxPro 只在 TEXT 命令首次出现时求值一次。

 

Numeric expression 指定加法标志值,以确定在 TEXT...ENDTEXT 语句之间出现的文本合并内容的行为。
 
例如,值为 7 时,Visual FoxPro 将消除所有空白,包括空格、制表符和回车。超出 0-15 范围的值将产生错误。
 
注意
指定值为 0 不会消除空白。
 
当 eExpression 是数字表达式时,可以使用 _PRETEXT 系统变量在 Visual FoxPro 消除空白后插入附加文本。
下表列出了可以在 eExpression 中使用的数字加法标志,用于指定附加行为。

值(附加)

描述

1

取消每行前的空格。

2

取消每行前的制表符

4

取消每行前的回车,例如空行。

8

取消换行

注意事项  
与 _PRETEXT 系统变量不同,PRETEXT 子句不具有全局范围,仅适用于出现该子句的 TEXT...ENDTEXT 语句。
 
使用 PRETEXT 子句删除的字符仅适用于 TEXT...ENDTEXT 语句中的文本,而不适用于从 cExpression 合并的已评估文本。在下面的示例中,内存变量 myvar 中的空格与 TEXT...ENDTEXT 中的文本合并时不会被删除:

 
myvar = "   AAA"
TEXT TO x NOSHOW ADDITIVE TEXTMERGE PRETEXT 7
Start Line
<<myvar>>
     BBB
  CCC
ENDTEXT

 

默认情况下,TEXT ... ENDTEXT 会将输出发送到终端窗口。要禁止向终端窗口输出,请执行 SET CONSOLE OFF。要将输出发送到打印机或文本文件,请使用 SET PRINTER。要将 TEXT ... ENDTEXT 的输出发送到使用 FCREATE( ) 或 FOPEN( ) 创建或打开的底层文件,请将 FCREATE( ) 或 FOPEN( ) 返回的文件句柄存储到 _TEXT 系统变量中,然后使用该变量将输出导向相应的底层文件。

 

文本合并过程通常包括 TEXT...ENDTEXT 语句中每行前可能出现的空白。但是,包含空白可能会导致文本合并失败,例如在 Web 浏览器中使用 XML 时。您必须删除这些空白,以避免 XML 格式错误。

 

不建议嵌套 TEXT...ENDTEXT 语句,尤其是在使用 PRETEXT 子句时,因为嵌套语句会影响外层语句的格式。

示例1

 

下面的示例演示了创建名为 myNamesFile.txt 的底层文件,并将其文件句柄存储在 _TEXT 系统变量中。如果无法创建 myNamesFile.txt 文件,程序将退出。

 

代码打开客户表,并将前十位联系人的姓名输出到 CotactList.txt。

代码将文本和函数结果输出到文本文件。

 

CLEAR
CLOSE DATABASES
SET TEXTMERGE ON    
SET TEXTMERGE TO ContactList.TXT
USE customer  
TEXT
        CONTACT NAMES
  <<DATE( )>>    <<TIME( )>>
ENDTEXT
WAIT "按任意键生成前十个名称。"
SCAN NEXT 10
  TEXT
     <<contact>>
  ENDTEXT
ENDSCAN
CLOSE ALL
 
 

示例2

下面的示例显示了一个自定义过程,该过程使用 TEXT...ENDTEXT 将 XML 数据集存储到变量中。在示例中,所有空格、制表符和回车符都被删除。

PROCEDURE myProcedure
  DO CASE
  CASE nValue = 1
    TEXT TO myVar NOSHOW TEXT PRETEXT 7        && 1 + 2 + 4
        <?xml version="1.0" encoding="utf-8"?>
        <DataSet xmlns="http://tempuri.org">
        <<ALLTRIM(STRCONV(leRetVal.item(0).xml,9))>>
        </DataSet>
    ENDTEXT
  OTHERWISE
  ENDCASE
ENDPROC

参见

FOPEN( ) 函数

_PRETEXT 系统变量

SET TEXTMERGE 命令

SET TEXTMERGE DELIMITERS 命令

_TEXT 系统变量

#text 指令

#endtext 指令