在当前顺序文件中建立新的偏移量。
大纲$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
下面的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
}