文章 姚 鑫 · 二月 14, 2021 1m read

第三十四章 Caché 变量大全 $ZNAME 变量

包含当前例程名称。

大纲

$ZNAME
$ZN

描述

$ZNAME包含在当前进程上执行的例程的名称。通常,这是ZLOAD加载的当前例程。如果当前没有执行任何例程,则$ZNAME包含空字符串。

当ZLOAD加载一个例程时,它将成为所有名称空间中当前进程的当前加载例程。因此,可以使用$ZNAME显示任何名称空间中当前加载的例程的名称,而不仅仅是加载该例程的名称空间。

例程名称区分大小写。

请注意,尝试ZLOAD例程失败会删除当前加载的例程,并将$ZNAME设置为空字符串。

不能使用SET命令修改此特殊变量。尝试这样做会导致<SYNTAX>错误。

$ZNAME值可以通过以下任何命令设置:

  • ZLOAD command
  • ZSAVE command
  • 无参数ZREMOVE命令(设置为空字符串)
  • DO command
  • GOTO command with ^routine
0
0 103
文章 姚 鑫 · 二月 13, 2021 2m read

第三十三章 Caché 变量大全 $ZMODE 变量

包含当前I/O设备打开参数。

大纲

$ZMODE
$ZM

描述

$ZMODE包含使用OPENUSE命令为当前设备指定的参数。返回的字符串包含用于以规范形式打开当前I/O设备的参数。这些参数值由反斜杠分隔符分隔。TCP/IP IO上的开放参数(如“M”)被规范化为“PSTE”“Y”“K”参数值始终放在最后。

不能使用SET命令修改此特殊变量。尝试这样做会导致<SYNTAX>错误。

示例

以下示例使用$ZMODE返回当前设备的参数:

/// d ##class(PHA.TEST.SpecialVariables).ZMODE()
ClassMethod ZMODE()
{
	WRITE !,"当前的开放模式有: ",$PIECE($ZMODE,"\")
	WRITE !,"NLS集合为: ",$PIECE($ZMODE,"\",2)
	WRITE !,"网络编码是: ",$PIECE($ZMODE,"\",4)
}
  • 终端
DHC-APP> d ##class(PHA.TEST.SpecialVariables).ZMODE()
 
当前的开放模式有: RY
NLS集合为: Latin1
网络编码是: GB18030
  • 控制台
0
0 116
文章 姚 鑫 · 二月 12, 2021 2m read

第三十二章 Caché 变量大全 $ZJOB 变量

包含JOB状态信息。

大纲

$ZJOB
$ZJ

描述

$ZJOB包含一个数字,其中每个位代表作业状态的一个特定方面。 $ZJOB返回一个整数,该整数由设置的状态位的总和组成。例如,如果$ZJOB = 5,则表示设置了1位和4位。

要测试单个$ZJOB位设置,可以使用整数除(\)和模(#)运算符。例如,$ZJOB\x#2,其中x是位号。下表显示了位的布局(按位的位置值)、其设置和含义:

BitSet toMeaning
11Job 从终端提示符启动。
10Jobroutine开始.
21JobJOB命令启动.
20Job 通过在终端提示下登录或从例程登录开始。
41<INTERRUPT> 已启用。 CTRL-C可以中断正在运行的程序。
40<INTERRUPT>被禁用,但已通过OPENUSE命令显式启用了<INTERRUPT>的终端行除外。
81<Interrupt>已收到并挂起。
80未收到<Interrupt>。值8由OPENUSE命令以及CTRL-C引起的错误陷阱清除。
10241无论其他条件如何,日志记录都会被禁用。
10240如果其他条件指示日志记录,则为此作业启用日志记录。
1
0 142
文章 姚 鑫 · 二月 11, 2021 1m read

第三十一章 Caché 变量大全 $ZIO 变量

包含有关当前终端I / O设备的信息。

$ZIO
$ZI

描述

$ZIO包含有关当前I / O设备的信息。

对于作为终端的终端设备,$ZIO包含字符串TRM:。如果当前终端设备是远程连接的,则$ZIO包含有关远程连接的信息。

对于通过TELNET连接的终端设备,$ZIO包含以下内容:host | port

参数描述
host远程主机IP地址,格式为IPv4:nnn.nnn.nnn.nnn(其中nnn是十进制数字)或IPv6格式:h:h:h:h:h:h:h:h,其中h为十六进制数。
por远程IP端口号。

这两个值由竖线字符分隔。例如127.0.0.1 | 23

如果当前设备不是终端:

  • 如果是文件,则$ZIO包含文件的完整规范路径名。
  • 如果不是文件,则$ZIO包含空字符串。

以下示例返回当前设备信息:

/// d ##class(PHA.TEST.SpecialVariables).ZIO()
ClassMethod ZIO()
{
   SET x = $CASE($ZIO,
				"TRM:":"终端",
				"CON:":"控制台",
				"":"既不是终端也不是文件")
   WRITE "当前设备是 ",x
}
0
0 128
文章 姚 鑫 · 二月 10, 2021 1m read

第三十章 Caché 变量大全 $ZHOROLOG 变量

包含自Caché启动以来经过的秒数。

大纲

$ZHOROLOG
$ZH

描述

$ZHOROLOG包含自最近的Caché启动以来经过的秒数。这是一个计数,与时钟变化和日期范围无关。该值表示为浮点数,表示秒和秒的分数。小数位数与平台有关。 $ZHOROLOG在此小数部分截断尾随零。

不能使用SET命令修改此特殊变量。尝试这样做会导致<SYNTAX>错误。

注意:由于Windows操作系统的限制,使Windows系统进入休眠或待机模式可能会导致$ZHOROLOG返回不可预测的值。此问题不会影响$HOROLOG$ZTIMESTAMP值。

示例

本示例输出当前的$ZHOROLOG值。

DHC-APP>WRITE $ZHOROLOG
94657.76444

以下示例说明如何使用$ZHOROLOG计时事件并进行基准测试。本示例通过100次执行对应用程序进行计时,然后找到平均运行时间。

0
0 93
文章 姚 鑫 · 二月 9, 2021 9m read

第二十九章 Caché 变量大全 $ZERROR 变量

包含上一个错误的名称和位置。

大纲

$ZERROR
$ZE 

描述

$ZERROR包含最新错误的名称,最新错误的位置(在适用的情况下)以及(对于某些错误代码而言)有关导致错误的原因的其他信息。 $ZERROR始终包含相应语言模式的最新错误。

$ZERROR值旨在错误后立即使用。由于$ZERROR值可能不会在例程调用中保留,因此希望保留$ZERROR值以供以后使用的用户应将其复制到变量中。强烈建议用户在使用后立即将$ZERROR设置为空字符串(“”)。

$ZERROR中包含的字符串可以是以下任何一种形式:

<error>
<error>entryref
<error> info
<error>entryref info
  • <error> 错误名称。错误名称始终以全部大写字母返回,并用尖括号括起来。它可能包含空格。
  • entryref 对发生错误的代码行的引用。它由标签名称和距该标签的行偏移量组成,后跟^和程序名称。此entryref紧跟在错误名称的右尖括号之后。从终端调用$ZERROR时,此entryref信息没有意义,因此不会返回。对最近使用ZLOAD加载到例程缓冲区中的例程的引用。
  • info 特定于某些错误类型的附加信息(见下表)。此信息与<error><error>entryref之间用空格分隔。如果有多个组件要提供信息,则用逗号分隔。
0
0 119
文章 姚 鑫 · 二月 8, 2021 1m read

第二十八章 Caché 变量大全 $ZEOS 变量

读取压缩流时包含流结束状态。

大纲

$ZEOS

大纲

$Zeos包含一个布尔值,该值指示是否已接收并处理传入(压缩)流的末尾。如果$Zeos=1,则已接收到压缩数据流的流结束。仅当流压缩/解压缩处于活动状态(/GZIP=1)时,$ZOS值才有意义。可以通过从OPENUSE命令发出/GZIP命令关键字来激活流压缩/解压缩。

在通过将设置更改为/GZIP=0来禁用流压缩/解压缩之前,必须检查$Zeos值。如果在处理压缩传入流的末尾之前发出/GZIP=0USE命令,则使用会生成<Translate>错误。如果尚未到达压缩传入流的末尾($ZEOS=0),则必须发出块读取命令,直到$ZEOS=1

不能使用SET命令修改此特殊变量。尝试这样做会导致<SYNTAX>错误。

示例

以下示例以/GZIP=1(启用压缩)开头。它执行一个循环,测试$ZEOS=1,并发出读取命令,直到$ZEOS=1。然后,它可以设置/GZIP=0(禁用压缩):

  OPEN dev:/GZIP=1
  READ block#length
  FOR {QUIT:$ZEOS
       READ x:10 }
  USE dev:/GZIP=0
0
0 84
文章 姚 鑫 · 二月 7, 2021 2m read

第二十七章 Caché 变量大全 $ZEOF 变量

包含指示是否已到达文件末尾的标志。

大纲

$ZEOF

描述

在每次顺序文件读取之后,Caché设置$ZEOF特殊变量以指示是否已到达文件末尾。提供此特殊变量是为了与使用$ZC设备状态检查的MSM例程兼容。

Caché将$ZEOF设置为上次使用的设备的文件状态。例如,如果从顺序文件读取,然后写入主设备,则Caché会将$ZEOF从顺序文件的文件结束状态重置为主设备状态。因此,应该在顺序文件读取之后立即检查$ZEOF值(如果需要,将其复制到变量)。

Caché将$ZEOF设置为下列值:

  • –1 文件结束
  • 0 不在文件末尾

要使用此功能,必须对顺序文件禁用<ENDOFFILE>错误。

  • 要对当前进程禁用此功能,请调用%SYSTEM.Process类的SetZEOF()方法。
  • 若要在系统范围内禁用此功能,请设置Config.Miscellous类的SetZEOF属性,或者转到管理门户并选择“系统管理”、“配置”、“附加设置”、“兼容性(系统、配置、兼容性设置)”。查看和编辑SetZEOF的当前设置。此选项控制在读取顺序文件时Caché遇到意外文件结尾时的行为。当设置为“true”时,Caché设置$ZEOF特殊变量以指示已到达文件末尾。当设置为“false”时,Caché会发出<ENDOFFILE>错误。默认值为“false”。
0
0 80
文章 姚 鑫 · 二月 6, 2021 2m read

第二十六章 Caché 变量大全 $ZCHILD 变量

当前进程的包含最后一个子进程的ID。

DHC-APP>job ##class(PHA.TEST.SpecialVariables).ZB()
 
DHC-APP>w $zchild
16636
DHC-APP>job ##class(PHA.TEST.SpecialVariables).ZB()
 
DHC-APP>w $zchild
5412

大纲

$ZCHILD
$ZC 

描述

$ZCHILD包含当前进程使用JOB命令创建的最后一个子进程的ID。如果进程没有使用JOB创建子进程,则$ZCHILD返回0(零)。

在MSM语言模式中,$ZC特殊变量(拼写如下)有不同的用途。用于确定顺序文件读取中的文件结尾。

不能使用SET命令修改此特殊变量。尝试这样做会导致<SYNTAX>错误。

注意

$ZCHILDJOB的成功启动

设置$ZCHILD并不意味着JOB已成功启动。它只表示进程已创建,参数已成功传递。

例如,如果使用JOB生成一个不存在的例程,则$TEST$ZCHILD都会报告作业命令成功,尽管JOB会立即终止并显示<NOROUTINE>错误。

MSM语言模式下的$ZC

MSM语言模式支持$ZC特殊变量的特殊使用。

0
0 87
文章 姚 鑫 · 二月 5, 2021 4m read

第二十五章 Caché 变量大全 $ZB 变量

包含当前I / O设备的状态信息。

大纲

$ZB

描述

$ZB包含读取操作后特定于当前I / O设备的状态信息

  • 从终端,顺序文件或其他基于字符的I / O设备读取时,$ZB包含读取操作的终止字符。它可以是终止符(例如),如果读取操作不需要终止符,则可以是输入数据的最后一个字符;如果需要终止符但未收到终止符,则可以是空字符串(例如,如果读取操作超时)。
  • 从磁带等基于块的I / O设备读取数据时,$ZB包含I / O缓冲区中剩余的字节数。写入磁带时,$ZB还包含I / O缓冲区中的字节数。

不能使用SET命令修改此特殊变量。尝试这样做会导致<SYNTAX>错误。

从基于字符的设备或文件中读取时,$ZB$KEY都可以用于返回READ终止字符。对于基于字符的读取,这两个特殊变量非常相似,但不完全相同。对于基于块的读写(例如磁带),请使用$ZB; $KEY不支持基于块的读取和写入操作。

文件结束行为

默认情况下,Caché通过发出<ENDOFFILE>错误来处理顺序文件的文件结尾;它不会设置$ZB。可以以与MSM兼容的方式配置文件结束行为。在这种情况下,遇到文件结尾时,Caché不会发出错误,而是将$ZB设置为“”(空字符串),并将$ZEOF设置为-1。

0
0 130
文章 姚 鑫 · 二月 4, 2021 5m read

# <center> 第二十四章 Caché 变量大全 $ZA 变量

包含当前设备上最后一次读取的状态。

# 大纲

```java
$ZA
```

# 描述

`$ZA`包含当前设备上最后一次读取的状态。

不能使用`SET`命令修改此特殊变量。尝试这样做会导致`<SYNTAX>`错误。

# 注意

## `$ZA`,带终端I / O

`$ZA`被实现为一系列位标志,每个位表示一条特定的信息。下表显示了可能的值、它们的含义,以及如何使用模(`#`)和整数除(`\`)运算符测试它们:

0
0 138
文章 姚 鑫 · 二月 3, 2021 2m read

第二十三章 Caché 变量大全 $Y 变量

包含光标的当前垂直位置。

大纲

$Y

描述

$Y包含光标的当前垂直位置。当字符写入设备时,Caché会更新$Y以反映垂直光标位置。

输出的每个换行符(换行符)(ASCII 10)将$Y递增1。换页符(ASCII 12)将$Y重置为0。

$Y是16位无符号整数。当其值达到65536时,$Y换行为0。换句话说,如果$Y为65535,则下一个输出字符将其重置为0。

可以使用set命令为$X$Y赋值。例如,可以使用特殊的转义序列来改变物理游标位置,而不更新$X$Y的值。在这种情况下,在使用转义序列之后,使用set将正确的值分配给$X$Y

注意

NLS字符映射

国家语言支持(NLS)实用程序$X/$Y选项卡定义当前区域设置的$X$Y光标移动字符。

带终端I/O的$Y

下表显示了不同字符对$Y的影响。

Echoed CharacterASCII CodeEffect on $X
<FORM FEED>12$Y=0
<RETURN>13$Y=$Y
<LINE FEED>10$Y=$Y+1
<BACKSPACE>8$Y=$Y
<TAB>9$Y=$Y
任何可打印的ASCII字符32-126$Y=$Y

OPENUSE命令的S(ECRET)协议关闭回显。它还可以防止$Y在输入过程中被更改,因此它指示真实的光标位置。

0
0 124
文章 姚 鑫 · 二月 2, 2021 3m read

第二十二章 Caché 变量大全 $X 变量

包含光标的当前水平位置。

大纲

$X

描述

$X包含光标的当前水平位置。将字符写入设备时,Caché会更新$X以反映水平光标位置。

输出的每个可打印字符将$X加1。回车符(ASCII 13)或换页符(ASCII 12)将$X重置为0(零)。

$X是16位无符号整数。

  • 在非UNICODE系统上,当$X的值达到65536时,它会换行为0。换句话说,如果$X为65535,则下一个输出字符将其重置为0。
  • 在UNICODE系统上,$X在其值达到16384时换行为0(其余两位用于日语音调编码)。

可以使用set命令为$X$Y赋值。例如,可以使用特殊的转义序列来改变物理游标位置,而不更新$X$Y的值。在这种情况下,在使用转义序列之后,使用set将正确的值分配给$X$Y

注意

NLS字符映射

国家语言支持(NLS)实用程序$X/$Y选项卡定义当前区域设置的$X$Y光标移动字符。

带终端I/O的$X

下表显示了不同字符对$X的影响。

0
0 111
文章 姚 鑫 · 二月 1, 2021 2m read

第二十一章 Caché 变量大全 $USERNAME 变量

包含当前进程的用户名。

大纲

$USERNAME

描述

$USERNAME包含当前进程的用户名。可以采用以下两种形式之一:

  • 当前用户的名称;例如:Mary。如果不允许多个安全域,则返回此值。
  • 当前用户的名称和系统地址;例如:Mary@jupiter。如果允许多个安全域,则返回此值。

要允许多个安全域,请转到管理门户,选择系统管理、安全、系统安全、系统范围安全参数。选中允许多个安全域复选框。对此设置的更改将应用于新调用的进程;更改它不会影响当前进程返回的值。

不能使用set命令或new命令修改此值。但是,新的$ROLES还会堆叠当前的$username值。

通常,$username值是在连接时指定的用户名。但是,如果允许未经验证的访问,则用户终端或ODBC客户端可以连接到Caché,而无需指定用户名。在本例中,$username包含字符串“UnnownUser”

使用JOB命令创建进程时,它继承与其父进程相同的$USERNAME$ROLES值。

0
0 147