文章目录

第116章 Caché 函数大全 $ZSEEK 函数

在当前顺序文件中建立新的偏移量。

大纲
$ZSEEK(offset,mode)

参数

  • offset 当前文件的偏移量(以字符为单位),指定为整数。可以是零、正整数或负整数。
  • mode 可选-确定偏移量相对位置的整数值。0=开始,1=当前位置,2=结束。默认值为0。
描述

$ZSEEK在当前设备中建立新的偏移量。当前设备必须是顺序文件。如果当前设备不是顺序文件,$ZSEEK会发出<Function>错误。

模式参数确定偏移点的基准点:起点、当前位置或终点。

$ZSEEK在执行偏移量后返回文件中的当前位置。不带参数的$ZSEEK返回文件中的当前位置,而不执行偏移量。

$ZSEEK仅在设备是顺序文件时才能使用。从终端调用$ZSEEK,或者当没有打开的顺序文件时,会导致<Function>错误。如果没有专门设置当前设备,$ZSEEK会假定该设备是主设备。

$ZPOS特殊变量包含当前文件位置。它与$ZSEEK(0,1)$ZSEEK()(没有参数)返回的值相同。

参数

offset

距由模式建立的点的偏移量(以字符为单位)。这是一个偏移量,而不是一个位置。因此,从文件开始的偏移量为0就是位置1,即文件的开始位置。偏移量1是位置2,即文件的第二个字符。

偏移量可以是文件结尾之后的位置。$ZSEEK用指定偏移量的空格填充。

如果模式为1或2,则偏移量可以是负数。如果指定负数导致文件开头之前的位置,则会导致<Function>错误。

mode

有效值为:

  • 0 偏移量是相对于文件开头的(绝对)。
  • 1 偏移量是相对于当前位置的。
  • 2 偏移量是相对于文件末尾的。

如果未指定模式值,则$ZSEEK假定模式值为0。

示例

下面的Windows示例打开一个顺序文件并写入“aaa”$ZSEEK(10)建立从文件开头开始的偏移量10个字符(填充7个空格),该示例在该位置写入“bbb”,然后不带参数的$ZSEEK()返回从文件开头产生的偏移量(在本例中为13)。

/// d ##class(PHA.TEST.Function).ZSEEK()
ClassMethod ZSEEK()
{
	SET $TEST=0
	SET myfile="C:\InterSystems\Cache\mgr\user\zseektestfile.txt"
	OPEN myfile:("WNS"):10
	IF $TEST=0 {WRITE "OPEN failed" RETURN}
	USE myfile
	WRITE "AAA"
	SET rtn=$ZSEEK(10) 
	WRITE "BBB"
	SET rtnend=$ZSEEK()
	CLOSE myfile
	WRITE "set offset:",rtn," end position:",rtnend
}
DHC-APP>d ##class(PHA.TEST.Function).ZSEEK()
set offset:10 end position:13

第116章 Caché 函数大全 $ZSEEK 函数_zseek

下面的Windows示例将字母“A”写入顺序文件十次,并且它们之间的空格数量不断增加。它使用$ZPOS来确定当前文件位置:

/// d ##class(PHA.TEST.Function).ZSEEK1()
ClassMethod ZSEEK1()
{
	SET $TEST=0
	SET myfile="C:\InterSystems\Cache\mgr\user\zseektestfile2.txt"
	OPEN myfile:("WNS"):10
	IF $TEST=0 {
		WRITE "OPEN failed" RETURN
	}
	USE myfile
	FOR i=1:1:10 {
		WRITE "A" SET rtn=$ZSEEK($ZPOS+i,0)
	}
	CLOSE myfile
}

第116章 Caché 函数大全 $ZSEEK 函数_Cache_02