zl程序教程

您现在的位置是:首页 >  工具

当前栏目

第四十章 Caché 命令大全 PRINT ZPRINT 命令

命令 大全 PRINT Cach
2023-09-11 14:15:37 时间

文章目录

第四十章 Caché 命令大全 PRINT ZPRINT 命令

显示当前设备上当前例程的代码行。

重点

  1. 注意:PRINTZPRINT命令在功能上是相同的。
  2. 类文件不行,只能打印例程。

大纲

PRINT:pc lineref1:lineref2
ZP:pc lineref1:lineref2

参数

  • pc 可选-后置条件表达式。
  • lineref1 可选-要显示的行,或要显示的行范围内的第一行,指定为文字。可以是标签名称,数字偏移量(+ n)或标签名称和数字偏移量。如果省略,则显示整个当前例程。
  • :lineref2 可选-要显示的一系列行中的最后一行,指定为文字。要定义范围,必须指定lineref1。

描述

PRINT命令显示当前加载的例程中的代码行。使用ZLOAD加载例程。 ZLOAD加载例程的INT代码版本。对于当前例程的名称,请访问$ZNAME特殊变量。

输出将发送到当前设备。从终端调用时,当前输出设备默认为终端。可以使用USE命令建立当前设备。对于当前设备的设备ID,请访问$IO特殊变量。

注意:PRINTZPRINT命令在功能上是相同的。

PRINT显示例程的INT代码版本。 INT代码不计算或不包含预处理程序语句。例程的MAC版本中的完全空白行(无论是在源代码中还是在多行注释中)都由编译器删除,因此在INT例程中既不显示也不计数。因此,PRINT在MAC例程中将以下多行注释显示为两行,而不是三行:

   /* This comment includes

      a blank line */ 

MAC代码中的#;##;///注释可能不会出现在INT代码中,因此可能会影响行数和偏移量。

PRINT将编辑指针设置为其打印的行的末尾。例如,指定PRINT,然后ZINSERT“ SET y = 2”将该行插入例程的末尾;指定PRINT +1:+4,然后ZINSERT“ SET y = 2”将该行插入为第5行。$TEXT函数从当前例程中打印一行,但不更改编辑指针。

PRINT有两种形式:

  • 有参
  • 无参

不带参数的PRINT显示当前加载的例程中的所有代码行。

带参数的PRINT显示指定的代码行。 PRINT lineref1显示由lineref1指定的行。PRINT lineref1:lineref2显示以lineref1开头并以lineref2(含端点)结尾的行范围。

lineref参数使用例程的INT代码版本对行和行偏移进行计数。修改例程后,必须重新编译PRINT例程,以正确计算与源(MAC)版本相对应的行和行偏移量。

可以使用$TEXT函数返回一行INT代码。

参数

pc

可选的后置条件表达式。如果后置条件表达式为true(计算为非零数值),则Caché执行PRINT命令。如果后置条件表达式为假(计算为零),则Caché不执行命令。

lineref1

要打印的行或要显示或打印的行范围中的第一行。可以用以下两种语法形式之一指定:

  • +offset其中offset是一个正整数,指定当前例程中的行号。 +1是例程中的第一行,可以是标签行。 +0始终返回空字符串。
  • label [+ offset],其中label是例程中的标签,而offset是从标签开始计数的行号(标签本身计数为offset 0)。如果省略偏移选项,或指定label + 0,则Caché将打印标签行。 label + 1在标签之后打印该行。

标签的长度可能超过31个字符,但在前31个字符内必须唯一。 PRINT仅匹配指定标签的前31个字符。标签名称区分大小写,并且可能包含Unicode字符。

lineref2

要显示的行范围中的最后一行。以与lineref1相同的方式进行指定。必须指定lineref1才能指定lineref2。 lineref1和lineref2用冒号(:)字符分隔。在冒号和lineref2之间可能没有空格。

如果lineref2在行序列中指定的标签或偏移量早于lineref1,则PRINT会忽略lineref2并显示由lineref1指定的单行代码。

如果lineref2指定不存在的标签或偏移量,则PRINT从lineref1显示到例程的末尾。

示例

给出以下代码行:

不带行引用参数的PRINT显示所有九行,包括注释行。

AviationLetters
Abc
	WRITE "A is Abel",!
	WRITE "B is Baker",!
	WRITE "C is Charlie",!
Def WRITE "D is Delta",!
	WRITE "E is Epsilon",!
	/* Not sure about E */
	WRITE "F is Foxtrot",!
	
	PRINT +0 
	PRINT +1
	PRINT +8 
	PRINT +10
	PRINT Def 
	PRINT Def+1
  • 不带行引用参数的PRINT显示所有九行,包括注释行。
  • PRINT +0显示空字符串。
  • PRINT +1显示AviationLetters标签。
  • PRINT +8显示/* Not sure about E */注释行。
  • PRINT +10显示空字符串。
  • PRINT DefPRINT Def + 0显示Def WRITE“ D is Delta” ,!行。这是一个标签行,还包括可执行代码。
  • PRINT Def + 1显示WRITE“ E is Epsilon” ,!行。
DHC-APP>d AviationLetters^PHA.TEST.Command
A is Abel
B is Baker
C is Charlie
D is Delta
E is Epsilon
F is Foxtrot
AviationLetters
         /* Not sure about E */
         PRINT +0
Def      WRITE "D is Delta",!
         WRITE "E is Epsilon",!

范围示例

AviationLetters
Abc
	WRITE "A is Abel",!
	WRITE "B is Baker",!
	WRITE "C is Charlie",!
Def WRITE "D is Delta",!
	WRITE "E is Epsilon",!
	/* Not sure about E */
	WRITE "F is Foxtrot",!

	PRINT +0:+3 
	PRINT +1:+3 
	PRINT +3:+3 
	PRINT +3:+1 
	PRINT +3:Abc+1 
	PRINT +3:abc+1 
	PRINT Abc+1:+4 
	PRINT Abc+1:Abc+2 
	PRINT Abc:Def 
	PRINT Abc+1:Def 
	PRINT Def:Abc 
  • PRINT +0:+3显示空字符串。
  • PRINT +1:+3显示前三行。
  • PRINT +3:+3显示第三行。
  • PRINT +3:+1显示第三行; lineref2被忽略。
  • PRINT +3:Abc + 1显示第三行。 lineref1和lineref2都指定同一行。
  • PRINT +3:abc + 1从第三行显示到例程末尾。行标签区分大小写,因此未找到范围终点。
  • PRINT Abc + 1:+4显示行3和4。
  • PRINT Abc + 1:Abc + 2显示行3和4。
  • PRINT Abc:Def显示第2、3、4、5和6行。
  • PRINT Abc + 1:Def显示第3、4、5和6行。
  • PRINT Def:Abc显示Def WRITE“ D is Delta” ,!行。由于lineref2在代码的前面,因此将被忽略。
DHC-APP>d AviationLetters^PHA.TEST.Command
A is Abel
B is Baker
C is Charlie
D is Delta
E is Epsilon
F is Foxtrot
AviationLetters
Abc
         WRITE "A is Abel",!
         WRITE "A is Abel",!
         WRITE "A is Abel",!
         WRITE "A is Abel",!
         WRITE "A is Abel",!
         WRITE "B is Baker",!
         WRITE "C is Charlie",!
Def      WRITE "D is Delta",!
         WRITE "E is Epsilon",!
         /* Not sure about E */
         WRITE "F is Foxtrot",!
         PRINT +0:+3
         PRINT +1:+3
         PRINT +3:+3
         PRINT +3:+1
         PRINT +3:Abc+1
         PRINT +3:abc+1
         PRINT Abc+1:+4
         PRINT Abc+1:Abc+2
         PRINT Abc:Def
         PRINT Abc+1:Def
         PRINT Def:Abc
abc()
         SET a=1,b=1,c=8
         WRITE "A is Abel",!
         WRITE "B is Baker",!
         WRITE "A is Abel",!
         WRITE "B is Baker",!
Abc
         WRITE "A is Abel",!
         WRITE "B is Baker",!
         WRITE "C is Charlie",!
Def      WRITE "D is Delta",!
         WRITE "A is Abel",!
         WRITE "B is Baker",!
         WRITE "C is Charlie",!
Def      WRITE "D is Delta",!
Def      WRITE "D is Delta",!