S O R T 命 令

S O R T 命 令 - 图1S O R T 命 令 - 图2对当前选定表进行排序 并将排过序的记录输出到新表中

语 法

SORT TO TableName

O N FieldName1 [/A | /D] [/C]

[, FieldName2 [/A | /D] [/C] ...] [ASCENDING | DESCENDING]

[ Scope ] [FOR lExpression1 ] [ W H ILE lExpression2 ] [FIELDS FieldNameList

| FIELDS LIKE Skeleton

| FIELDS EXCEPT Skeleton ] [NOOPTIMIZE]

参 数 描 述

TableName

S O R T 命 令 - 图3S O R T 命 令 - 图4S O R T 命 令 - 图5S O R T 命 令 - 图6存 放 经 过 排 序 的 记 录 的 新 表 名 V isual FoxPro 为 表 取 .DBF 文 件 扩 展 名 如果 文 件 不 包 含 扩 展 名 则 自 动 为 它 指 定 .DBF 扩 展 名

O N FieldName1

S O R T 命 令 - 图7S O R T 命 令 - 图8在当前选定的 要排序的表中指定字段 字段的内容和数据类型决定了记录在新表中

S O R T 命 令 - 图9S O R T 命 令 - 图10S O R T 命 令 - 图11的顺序 默认情况是按升序排序 不能对备注或通用字段排序

S O R T 命 令 - 图12S O R T 命 令 - 图13S O R T 命 令 - 图14下例为下表按 cust-id 字段排序 Customer 表已打开并排序过 创建一个新 temp 表

S O R T 命 令 - 图15Temp 表中的记录按 cust-id 排序

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata') USE customer && 打开 Customer 表

CLEAR

LIST FIELDS company, cust_id NEXT 3 SORT TO temp ON cust_id

USE temp

LIST FIELDS company, cust_id NEXT 3

WAIT WINDOW 'Now sorted on CUST_ID' NOWAIT

S O R T 命 令 - 图16S O R T 命 令 - 图17S O R T 命 令 - 图18S O R T 命 令 - 图19S O R T 命 令 - 图20S O R T 命 令 - 图21S O R T 命 令 - 图22S O R T 命 令 - 图23要 进 一 步 排 序 新 表 可 以 包 含 附 加 字 段 名 ( FieldName2 FieldName3 ) 第 一个 字 段 FieldName1 是 主 排 序 字 段 第 二 个 字 段 FieldName2 是 第 二 级 排 序 字段 依 此 类 推

[/A | /D] [/C]

S O R T 命 令 - 图24S O R T 命 令 - 图25S O R T 命 令 - 图26S O R T 命 令 - 图27S O R T 命 令 - 图28S O R T 命 令 - 图29S O R T 命 令 - 图30对 于 排 序 中 包 含 的 每 个 字 段 可 以 指 定 排 序 顺 序 升 序 或 降 序 / A 为 字 段指 定 了 升 序 / D 指 定 了 降 序 / A 或 /D 可 以 作 用 于 任 何 类 型 的 字 段

S O R T 命 令 - 图31S O R T 命 令 - 图32S O R T 命 令 - 图33S O R T 命 令 - 图34S O R T 命 令 - 图35S O R T 命 令 - 图36默认情况下 字符型字段的排序顺序区分大小写 如果在字符型字段名后包含 /C 则忽略大小写 可 以 把 /C 选项同 /A 或 /D 选项组合起来 例 如 /AC 或 /DC

S O R T 命 令 - 图37S O R T 命 令 - 图38S O R T 命 令 - 图39如下例 创建新表 clients Orders 表以定货日期升序和运费降序排列

USE orders

SORT TO clients ON order_date/A ,freight/D ASCENDING

S O R T 命 令 - 图40将 所 有 不 带 /D 的 字 段 指 定 为 升 序 排 列

DESCENDING

S O R T 命 令 - 图41将 所 有 不 带 /A 的 字 段 指 定 为 降 序 排 列

S O R T 命 令 - 图42S O R T 命 令 - 图43如 果 省 略 ASCENDING 或 DESCENDING 参 数 则 排 序 顺 序 默 认 为 升 序

Scope

S O R T 命 令 - 图44S O R T 命 令 - 图45S O R T 命 令 - 图46S O R T 命 令 - 图47指 定 需 要 排 序 的 记 录 范 围 Scope 子 句 包 括 ALL NEXT nRecords

S O R T 命 令 - 图48RECORD nRecordNumber 和 REST

S O R T 命 令 - 图49S O R T 命 令 - 图50SORT 命 令 的 默 认 范 围 是 ALL 即 所 有 记 录

FOR lExpression1

S O R T 命 令 - 图51S O R T 命 令 - 图52S O R T 命 令 - 图53S O R T 命 令 - 图54S O R T 命 令 - 图55S O R T 命 令 - 图56在 当 前 表 中 指 定 排 序 中 只 包 含 逻 辑 条 件 lExpression1 为 真 (.T.) 的 记录 FOR 子 句 可 以 有 条 件 地 排 序 记 录 筛 掉 不 满 足 条 件 的 记 录

S O R T 命 令 - 图57S O R T 命 令 - 图58S O R T 命 令 - 图59S O R T 命 令 - 图60如 果 lExpression1 是 可 优 化 表 达 式 Rushmore 会 优 化 这 个 SORT ... FOR 命令 为 达 到 最 优 性 能 应 在 FOR 字 句 中 使 用 可 优 化 表 达 式

S O R T 命 令 - 图61相 关 信 息 请 参 阅 S O R T 命 令 - 图62 Microsoft Visual FoxPro 6.0 中 文 版 程 序 员 指 南 S O R T 命 令 - 图63 的 第 十 五章

W H ILE lExpression2

S O R T 命 令 - 图64S O R T 命 令 - 图65S O R T 命 令 - 图66S O R T 命 令 - 图67S O R T 命 令 - 图68S O R T 命 令 - 图69S O R T 命 令 - 图70指 定 一 个 条 件 在 当 前 表 中 只 要 逻 辑 表 达 式 lExpression2 的 计 算 值 为真 则 依 据 此 条 件 排 序 中 包 含 这 个 记 录

FIELDS FieldNameList

S O R T 命 令 - 图71指 定 用 SORT 命 令 创 建 的 新 表 中 要 包 含 的 原 表 中 的 字 段 如 果 省 略 FIELDS

S O R T 命 令 - 图72S O R T 命 令 - 图73字 句 新 表 中 将 包 括 原 表 中 所 有 字 段

FIELDS LIKE Skeleton

S O R T 命 令 - 图74在 新 表 中 包 含 那 些 与 字 段 梗 概 Skeleton 相 匹 配 的 原 表 字 段

FIELDS EXCEPT Skeleton

S O R T 命 令 - 图75在 新 表 中 包 含 那 些 不 与 字 段 梗 概 Skeleton 相 匹 配 的 原 表 字 段

S O R T 命 令 - 图76字段梗概 Skeleton 支持通配符

S O R T 命 令 - 图77S O R T 命 令 - 图78例如 列出新表中所有以字母 A 和 P 开头的字段使用如下命令

SORT TO mytable ON myfield FIELDS LIKE A*,P*

S O R T 命 令 - 图79LIKE 子句可与 EXCEPT 子句同时使用

SORT TO mytable ON myfield FIELDS LIKE A*,P* EXCEPT PARTNO*

NOOPTIMIZE

S O R T 命 令 - 图80关 闭 SORT 命 令 的 Rushmore 优 化

说 明

S O R T 命 令 - 图81当前表中的一个或多个指定字段决定了记录在新表中出现的顺序

S O R T 命 令 - 图82S O R T 命 令 - 图83S O R T 命 令 - 图84S O R T 命 令 - 图85S O R T 命 令 - 图86S O R T 命 令 - 图87S O R T 命 令 - 图88S O R T 命 令 - 图89重 要 提 示 要确保有足够的磁盘空间保存新表 以及存储在排序过程中创建的临时工作文件 排序所需的磁盘空间可能是原表的三倍 可以用 DISKSPACE ( ) 和SYS(2020) 函数确定可用磁盘空间大小 如果在排序过程中 磁盘空间不足 Visual FoxPro 会显示错误信息 并删除临时工作文件

S O R T 命 令 - 图90S O R T 命 令 - 图91S O R T 命 令 - 图92S O R T 命 令 - 图93S O R T 命 令 - 图94包含数字和空格的字符型字段可能不会按照所希望的那样排序 这是因为数值型字段从右向左填充 空格位于左边 而字符型字段是从左向右填充 空格位于右边

S O R T 命 令 - 图95S O R T 命 令 - 图96S O R T 命 令 - 图97S O R T 命 令 - 图98例如 表的两个记录包含字符型字段 一个是 1724 另一个是 18 而表按该字段以升

S O R T 命 令 - 图99S O R T 命 令 - 图100S O R T 命 令 - 图101S O R T 命 令 - 图102S O R T 命 令 - 图103S O R T 命 令 - 图104S O R T 命 令 - 图105S O R T 命 令 - 图106S O R T 命 令 - 图107S O R T 命 令 - 图108S O R T 命 令 - 图109S O R T 命 令 - 图110S O R T 命 令 - 图111S O R T 命 令 - 图112序排序 则包含 1724 的记录会出现在包含 18 的记录的前面 这是因为 Visual FoxPro 从左向右读取字符型字段中的字符 由于 17 1724 比 18 18 小 则 1724 出现在前面 为避免这类问题 应在位数较小的数字前加零 0018 或者使用数值型字 段

请 参 阅

COPY FILE , DISKSPACE ( ) , INDEX , SYS(2020)