[an error occurred while processing this directive]

HP OpenVMS Systems Documentation

Content starts here

OpenVMS 用户手册


前页 目录 索引

9.9.3 说明文件限定词

以下限定词可以使用在说明文件中。(高性能 Sort/Merge 公用程序不支持说明文件。对这个特性的实现留待将来的 OpenVMS Alpha 发行版本。) 注意,这些限定词只在 Sort/Merge 说明文件中有效。

/CDD_PATH_NAME="cdd-path-name"

使用 CDD Repository 命令标识用于通用数据字典 (CDD/Plus) 而定义的字段和属性。一旦这些字段被标识,以后就可以用于其他说明文件限定词,如 /KEY、/CONDITION、/INCLUDE 或 /OMIT。
/CDD_PATH_NAME 可以用于代替/FIELD 语句或与 /FIELD 语句一起使用。
"cdd-path-name" 值是在 CDD/Plus 内的 CDD/Plus 记录定义。只当系统已安装 CDD/Plus 时,才可以使用 /CDD_PATH_NAME 限定词。
例子


/CDD_PATH_NAME="employee"

/CDD_PATH_NAME 限定词标识雇员记录,雇员记录以前已在 CDD/Plus 中定义。

/[NO]CHECK_SEQUENCE

(只应用于 MERGE 命令。) 指定是否检查输入文件中的记录顺序。按照默认,Merge 检查记录的顺序。
例子


/NOCHECK_SEQUENCE

/NOCHECK_SEQUENCE 限定词取代 Merge 公用程序的默认行为。

/COLLATING_SEQUENCE=(SEQUENCE=sequence-type
[,MODIFICATION=("char1" operator "char2")] [,IGNORE=character or character range,...] [,FOLD] [,[NO]TIE_BREAK])

为字符键字段指定三个预定义比较顺序 (ASCII、EBCDIC 或多国) 之一,或者一个用户自定义顺序。允许您修改任何预定义比较顺序或者任何以前定义的用户自定义顺序。
有关使用 ASCII、EBCDIC 和多国比较顺序的详情,请参阅 9.3 节
可以指定以下限定词值:
SEQUENCE 说明文件支持 ASCII、EBCDIC、多国和用户自定义比较顺序。有关这些比较顺序的详情,请参阅 9.3 节
MODIFICATION 指定更改在 SEQUENCE 任选项指定的比较顺序。可以修改 ASCII、EBCDIC、多国或用户自定义顺序。被修改的顺序必须用 SEQUENCE 限定词指定,即使这个顺序是默认的 (ASCII)。
字符 在比较顺序中,指定一个字符。
运算符 指定用来比较字符的运算符。可以指定大于 (>)、小于 (<) 或等于 (=)。
  MODIFICATION 任选项准许以下种类的更改:
-- 一个单或双字符可以等于一个已经指派有一个比较值的单字符 ("a"="A")。
-- 一个单或双字符可以大于一个已经指派有一个比较值的单字符 ("CH">"C")。
-- 一个单或双字符可以小于一个已经指派有一个比较值的单字符 ("D"<"A")。
-- 一个双字符可以等于以前定义的双字符 ("CH" = "SH")。
-- 一个单字符可以等于一个双字符 ("C" = "CH")。
IGNORE 指定 Sort/Merge 在进行初始比较时忽略在比较顺序中的一个字符或字符范围。注意,当发生分解时,Sort/Merge 考虑用 IGNORE 值指定的字符。
FOLD 指定所有小写字母具有与其大写字母相同的比较值。对于 ASCII、EBCDIC 和用户自定义顺序,小写字母是 a 至 z。
  在多国顺序中,因为小写字母与大写字母具有相同的比较值,因此使用 FOLD 是不必要的。
[NO]TIE_BREAK 指定 Sort/Merge 是否应该使用数值分解具有相同比较值的字符。按照默认,分解发生在多国顺序。指定 NOTIE_BREAK 取代这个默认,从而确保初始比较之后不进一步比较。
  必须为 ASCII、EBCDIC 和用户自定义顺序指定 TIE_BREAK 任选项,以处理分解发生。当为这些顺序指定 FOLD 或 MODIFICATION 值时,应该使用 TIE_BREAK。

例子
有关在说明文件中使用比较顺序的例子,请参阅 9.3 节9.7 节

/CONDITION=(NAME=condition-name,
TEST=(field-name operator test-condition [logical-operator...]))

说明文件可以用来更改记录的相对次序,或者改变记录中某些字段的内容。必须首先使用 /CONDITION 限定词来定义一个条件测试。一旦使用 /CONDITIONAL 限定词定义了一个测试,就可以使用同一测试以及 /KEY 或 /DATA 限定词更改记录的次序。您也可以使用测试以及 /OMIT 或 /INCLUDE 限定词更改记录的内容。
如果想要更改输出文件记录的次序,首先用 /CONDITION 限定词指定一个条件名,并且设置一个满足那个条件的测试。然后,用此格式的 /KEY 限定词指定相对次序:


/KEY=(IF condition-name THEN value ELSE value)

您可以使用任何值指定记录的相对次序。
/CONDITION 限定词也准许更改输出记录的字段内容。首先指定一个条件名,然后设置一个满足那个条件的测试。以此格式的 /DATA 限定词指定在那个字段想要的内容:


/DATA=(IF condition-name THEN "new-contents"
       ELSE "new-contents")

您可以指定以下限定词值:
NAME 指定测试的条件名。在已使用 /CONDITION 限定词定义它之后,这个 condition-name 可以在 /KEY、/DATA、/OMIT 和 /INCLUDE 限定词使用中。
TEST 指定条件测试。
field-name 指定测试的字段名。field-name 必须以前由 /FIELD 限定词定义。
operator 指定在条件测试中使用的逻辑或关系运算符。可以使用的逻辑运算符是 AND 和 OR。而关系运算符可以指定如下:
EQ = 等于
NE = 不等于
GT = 大于
GE = 大于或等于
LT = 小于
LE = 小于或等于
test-condition 指定要测试的常数或 field-name。常数指定为以下格式:
十进制数字 (默认)
%D十进制数字
%O八进制数字
%X十六进制数字
"字符"
  通常,不需要指定基数运算符 (%D);然而,test-condition 将假定与 field-name 有同样的数据类型。

例子
有关在说明文件中使用 /CONDITION 限定词的例子,请参阅 9.7 节

/DATA=field-name
/DATA=(IF condition THEN "new contents" ELSE "new contents")

使用 /DATA 限定词剔除或重新排序输出记录的字段。按想要它们在输出记录出现的次序,指定数据字段。/DATA 限定词必须标识要写入输出文件记录中的每个字段。只有那些被 /DATA 限定词标识的字段才被写入输出文件。
可以有条件地更改在输出记录中的字段内容,首先指定一个条件名,然后设置一个满足 /CONDITION 限定词条件的测试。于是您以此格式的 /DATA 限定词指定在那个字段想要的内容:


/DATA=(IF condition-name THEN "new-contents" ELSE "new-contents")

可以指定以下限定词值:
field-name 指定记录的一个字段名。field-name 以前必须在一个 /FIELD 限定词中定义。
condition-name 指定一个以前已在 /CONDITION 限定词定义的 condition-name。
new-contents 指定记录如何改变。new-contents 可以是一个常数或者是一个已在 /FIELD 限定词中定义的 field-name。

例子
有关在说明文件中使用 /DATA 限定词的例子,请参阅 9.7 节

/FIELD=(NAME=field-name,POSITION:n,SIZE:N, [DIGITS:n,]data-type)
/FIELD=(NAME=field-name,VALUE:n,SIZE:N,[DIGITS:n,] data-type)

当改变输出记录的次序或格式时,定义在输入文件中的字段。这些字段包括键字段、要比较的字段和要被写入输出文件的字段。标识每个字段时,要指定名称、它在记录中的位置和大小和它的数据类型。
字段名必须唯一;不允许重复的字段名。另外,最多只能定义 255 个字段。
也可以使用 /FIELD 定义常数,并为它指派一个任何有效的 Sort/Merge 数据类型的值用于 /CONDITION、/DATA 和 /KEY 语句中。
您可以指定以下限定词值:
NAME 指定字段名。field-name 不能有任何嵌入的空格,必须从一个字母字符开始    ,并且不能超过 31 个字符长。
POSITION: n 指定记录字段的位置。
VALUE: n 把一个值指派给一个用于 /CONDITION、/DATA 或 /KEY 语句中的常数字段。如果指定 VALUE: n,就不要指定 /POSITION: n,因为这个字段是常数并且不是输入记录的一部分。
SIZE: n 指定包含字符或二进制数据字段的大小。在说明文件中,SIZE 意味着字节长度。数据类型确定可接受什么值,如下所示:
-- 对于字符数据,其大小不得超过 32,767 个字符。
-- 对于二进制数据,其大小必须指定为 1、2、4、8 或 16 字节。
-- 对于浮点数据,不指定大小。
DIGITS: n 指定包含十进制数据字段的大小。包含十进制数据的字段大小必须不超过 31 个数字。注意,只当描述包含十进制数据的字段时,才使用 DIGITS:n。
data-type 指定字段的数据类型。如果它是字符,就不必指定 data-type;按照默认,Sort 假定字符数据类型。有关 Sort/Merge 识别的数据类型列表,请参阅 9.2.1 节

例子


/FIELD=(NAME=SALARY,POSITION:10,DIGITS:8,DECIMAL)

这个 /FIELD 限定词以名称 SALARY 标识记录中的一个字段,指定它从记录的位置 10 开始,8 个数字长,并且包括十进制数据。

/INCLUDE=(CONDITION=condition[,KEY=...] [,DATA=...])

您可以指定记录有条件地包括在输出文件中。用 /CONDITION 限定词定义一个条件后,用 /INCLUDE 限定词指定记录选择,请求满足条件的记录将被包括在输出文件中。
在说明文件中可以指定多个 /INCLUDE 和 /OMIT 限定词。在此指定的次序确定包含输入记录的测试次序。在最后的 /INCLUDE 限定词之后,将省略所有没有包括或明确省略的记录。
您可以无条件地包括任何记录,但不包括以前省略的或者通过指定 /INCLUDE 限定词包括但无条件的记录。
当排序多个记录格式时,必须为每个不同记录格式指定一个 /INCLUDE 限定词,使这些记录可以被排序。如果在 INCLUDE 限定词中不指定一个 KEY 任选项,Sort 就假定默认的键定义。如果在 INCLUDE 限定词中指定 KEY 任选项,就不使用默认的键定义。在 /INCLUDE 限定词中键字段的次序确定如何建立用于排序的内部键。在 /INCLUDE 限定词中 DATA 字段的次序确定格式化输出记录的方法。如果在 /INCLUDE 限定词中指定一个键或数据字段,必须定义记录的所有其他键或数据字段。
您可以指定以下限定词值:
CONDITION 引用上一个 /CONDITION 限定词指定的 condition-name。
KEY 定义一个键字段,因为不使用在 /KEY 限定词定义的默认记录类型。
DATA 定义一个数据字段,因为不使用在 /DATA 限定词定义的默认记录类型。

例子


/FIELD=(NAME=ZIP,POSITION:20,SIZE:6)
/CONDITION=(NAME=LOCATION,
            TEST=(ZIP EQ "01863"))
/INCLUDE=(CONDITION=LOCATION)

这些 /CONDITION 和 /INCLUDE 限定词指定有邮政编码 01863 的记录将包括在输出文件中。

/KEY=field-name
/KEY=(field-name,order) /KEY=([IF condition THEN value ELSE]...) value [,order]

指定在 Sort 操作中要使用的键字段。如果使用字符数据排序整个记录,就没有必要指定键字段。否则,按它们的优先级次序为每个键指定一个 /KEY 限定词。可以排序 255 个键字段。
有三种方法使用 /KEY 限定词:
  • 标识键字段名。
  • 标识键字段名,并指定排序次序。在这种情况下,把字段名和次序任选项括入圆括号内。
  • 作为条件限定词,在输出文件中更改记录的次序。首先,在一个 /CONDITION 限定词中指定 condition-name,并设置满足那个条件的测试。然后,以此格式的 /KEY 限定词指定相对次序:


    /KEY=(IF condition-name THEN value ELSE value)
    

    可以使用任何值指定记录的相对次序。

您可以指定以下限定词值:
field-name 指定键字段名。field-name 以前已在 /FIELD 限定词指定。
order 指定排序的次序。ASCENDING 任选项为 Sort 或 Merge 操作指定升序。这个任选项是默认的。DESCENDING 任选项为 Sort 或 Merge 操作指定降序。
value 指定键。其值可以是一个常数,或者是已在一个 /FIELD 限定词中定义的 field-name。

例子
  1.  


    /FIELD=(NAME=SALARY,POSITION:10,DIGITS:8,DECIMAL)
    /KEY=(SALARY,DESCENDING)
    

    这个 /KEY 限定词指定键字段是 SALARY 并且排序次序是递减的。
  2.  


    /FIELD=(NAME=ZIP,POSITION:20,SIZE:6)
    /CONDITION=(NAME=LOCATION,
                TEST=(ZIP EQ "01863"))
    /KEY=(IF LOCATION THEN 1
          ELSE 2)
    

    在这个例子中,所有有邮政编码 01863 的记录出现在已排序输出文件的开始。条件测试 LOCATION (已在一个 /CONDITION 限定词定义) 是在 ZIP 字段 (已在一个 /FIELD 子句命名) 上。在这个 /KEY 子句的值 1 和值 2 表示那些满足和不满足条件的记录的相对次序。

/OMIT=(CONDITION=condition-name)
基于 /CONDITION 限定词定义的条件指定从输出文件要省略的记录。
首先,必须用 /CONDITION 限定词定义一个条件。用 /OMIT 限定词请求 Sort 操作省略满足条件的任何记录。按照默认,Sort/Merge 在输出文件中包括所有其他输入记录。
在说明文件中可以指定多个 /OMIT 和 /INCLUDE 限定词。指定它们的次序可确定测试省略输入记录的次序。所有没有包括的或在最后的 /OMIT 限定词之后省略的记录都要包括。您可以无条件地省略以前没有省略或仅指定  /OMIT 限定词包括的任何记录。
例子


/FIELD=(NAME=ZIP,POSITION:20,SIZE:6)
/CONDITION=(NAME=LOCATION,
            TEST=(ZIP EQ "01863"))
/OMIT=(CONDITION=LOCATION)

这些 /CONDITION 和 /OMIT 限定词指定在输出文件中省略有邮政编码 01863 的记录。

/PAD=single-character
当重新格式化记录或者当比较长度不等的字符串时,指定 Sort 将用来扩展或填充字符串的字符。按照默认,Sort 使用空字符来填充,以确保与早期版本的一致。可以定义为单字符的双字符 ("ch" > "c") 不能用作填充字符。可以使用字符、十进制、八进制或十六进制数字。
填充字符应该指定为如下:
  • 对字符使用引号。例如," # " 将指定数字符号。
  • 对十进制数字使用十进制基数。例如,%D35 将指定十进制数 35。
  • 对八进制数使用八进制基数。例如,%O043 将指定八进制数 043。
  • 对十六进制数使用十六进制基数。例如,%X23 将指定十六进制数 23。

例子


/PAD="."

这个例子的 /PAD 限定词指定记录将填充句点。

/PROCESS=type
(只应用于 SORT 命令。) 为排序操作定义处理方法 (记录、标签、地址或索引)。如果打算重新格式化输出记录,不能使用地址或索引排序。指定进程类型为 RECORD、TAG、ADDRESS 或 INDEX。
有关四类进程的比较,请参阅 9.8.1 节
例子


/PROCESS=tag

这个例子的 /PROCESS 限定词指定 Sort 使用一个标签排序进程。

/[NO]STABLE
指定同键记录按它们的输入文件次序写入输出文件。默认条件是 /NOSTABLE。
按照默认,当排序同键记录时,那些记录在输出文件的次序可能与它们在输入文件的出现次序不一样。在说明文件中指定 /STABLE 限定词,就会按照在命令行指定的输入文件次序在输出文件中排列同键记录。当排序多个输入文件时,如果使用这个限定词,那么输出时,在第一个文件的同键记录将在第二个文件的同键记录之前,以此类推。
例子


/STABLE

这个例子的 /STABLE 限定词确保同键记录将在输入和输出文件中具有同样的次序。

/WORK_FILES=(device[,...])
(只应用于 SORT 命令。) 把工作文件重新指派到不同的磁盘结构设备以改进性能。如果在说明文件中使用 /WORK_FILES 限定词,就没有必要在命令或程序级调用 Sort 之前指派逻辑设备。
不同于 DCL 限定词 /WORK_FILES=n,说明文件限定词 /WORK_ FILES=(device[,...]) 指定工作文件分配,而不是工作文件的数目。
有关使用工作文件的详情,请参阅 9.8.3 节
例子


/WORK_FILES=("WRKD$:")

这个例子的 /WORK_FILES 限定词把一个 Sort 工作文件指派到设备 WRKD$: 因为这个设备有更多的可用空间。


前页 后页 目录 索引