菜鸟科技网

VFP命令list有哪些具体用法与参数?

LIST 命令是 VFP 中用于显示数据记录和数据库信息的“瑞士军刀”,它的基本功能是在当前工作区中,按指定条件筛选并显示数据表中的记录。

VFP命令list有哪些具体用法与参数?-图1
(图片来源网络,侵删)

基本语法

LIST 命令的语法非常灵活,可以根据不同的需求进行组合。

LIST [FIELDS <字段名列表>] [FOR <条件表达式>] [WHILE <条件表达式>]
     [OFF] [TO PRINTER [PROMPT] | TO FILE <文件名>]
     [<范围>] [NOCONSOLE]

核心参数详解

让我们逐一分解每个参数的作用。

<范围>

指定要显示哪些记录,VFP 提供了四种范围选项:

  • ALL (默认值): 显示表中的所有记录。
  • NEXT : 从当前记录开始,显示接下来的 nNumRecords 条记录。
  • RECORD : 仅显示记录号为 nRecordNumber 的那条记录。
  • REST: 从当前记录开始,显示到表末尾的所有剩余记录。

示例:

VFP命令list有哪些具体用法与参数?-图2
(图片来源网络,侵删)
* 显示第 5 条记录
LIST RECORD 5
* 从当前记录开始,显示接下来的 3 条记录
LIST NEXT 3
* 显示从当前记录到表末尾的所有记录
LIST REST

FIELDS <字段名列表>

指定要显示哪些字段,如果不使用此子句,默认会显示所有字段。

  • 使用逗号 分隔多个字段名。
  • 可以使用通配符 来代表所有字段(这与默认行为相同)。
  • 可以使用 -> 或 来访问关联表(Set Relation)中的字段。

示例:

* 只显示姓名和年龄字段
LIST FIELDS 姓名, 年龄
* 显示除了备注字段之外的所有字段(这是一种间接方法,更常用的是直接指定字段)
LIST FIELDS 姓名, 年龄, 地址, 电话
* 显示主表和关联表中的字段
* 假设当前表为学生表,与成绩表建立了关联
LIST FIELDS 学生表.姓名, 成绩表.科目, 成绩表.分数

FOR <条件表达式>WHILE <条件表达式>

这两个子句用于筛选记录,只显示满足条件的记录。

  • FOR <条件表达式>: 遍历指定范围内的所有记录,将符合条件的记录全部显示出来,这是最常用的筛选方式。
  • WHILE <条件表达式>`: 从当前记录开始,一旦遇到不符合条件的记录,就立即停止显示,不再检查后续记录。

关键区别: FOR 会扫描整个范围,而 WHILE 扫描到第一个不满足条件的记录就停止。

示例:

* 显示所有年龄大于 30 的记录
LIST FOR 年龄 > 30
* 显示所有女性记录 (假设性别字段为 '女')
LIST FOR 性别 = '女'
* 从当前记录开始,连续显示所有年龄小于 25 的记录,一旦遇到年龄>=25的记录就停止
LIST WHILE 年龄 < 25

OFF

在显示结果时,不显示记录号,默认情况下,VFP 会在每条记录前显示其记录号(如 1 姓名...),使用 OFF 可以让输出更简洁。

示例:

* 显示所有男生的姓名和年龄,不显示记录号
LIST FIELDS 姓名, 年龄 FOR 性别 = '男' OFF

TO PRINTER [PROMPT]TO FILE <文件名>

LIST 的输出结果发送到指定的地方。

  • TO PRINTER: 将结果直接输出到打印机。
  • TO PRINTER PROMPT: 在发送到打印机前,会弹出打印对话框,让用户可以选择打印机、设置打印份数等。
  • TO FILE <文件名>`: 将结果输出到一个文本文件中,如果文件已存在,默认会覆盖。

示例:

* 将所有信息打印出来
LIST TO PRINTER
* 将所有女性员工信息保存到 a.txt 文件中
LIST FIELDS * FOR 性别 = '女' TO FILE a.txt

NOCONSOLE

在执行 LIST 命令时,结果不会在 VFP 的主窗口或当前输出窗口中显示,但会发送到 TO PRINTERTO FILE 指定的目标,这对于后台处理很有用。

示例:

* 静默地将结果保存到文件,不在屏幕上显示
LIST FOR 年龄 > 40 TO FILE old_staff.txt NOCONSOLE

使用示例

假设我们有一个名为 employees.dbf 的表,包含字段:emp_id (员工号), name (姓名), gender (性别), department (部门), salary (薪水), hire_date (入职日期)。

USE employees  && 打开 employees 表
* 示例 1: 显示所有记录(默认行为)
LIST
* 示例 2: 显示所有女性员工的信息,不显示记录号
LIST FIELDS name, department, salary FOR gender = '女' OFF
* 示例 3: 显示销售部所有员工的姓名和薪水
LIST FIELDS name, salary FOR department = '销售部'
* 示例 4: 显示薪水最高的前 5 条记录(这里需要技巧,LIST本身不支持TOP)
* 一个变通方法是先按薪水降序排序,然后显示前5条
INDEX ON salary TAG salary DESC
LIST NEXT 5
* 示例 5: 显示 2025 年之后入职的员工信息
LIST FOR hire_date > {^2025-01-01}
* 示例 6: 将所有技术部员工的名单打印出来
LIST FIELDS name FOR department = '技术部' TO PRINTER PROMPT
* 示例 7: 将所有信息导出到一个文本文件
LIST TO FILE employees_backup.txt
CLOSE DATABASES  && 关闭表

LISTDISPLAY 的关键区别

在 VFP 中,LISTDISPLAY 命令非常相似,但有一个至关重要的区别:

特性 LIST DISPLAY
默认范围 ALL (所有记录) 当前记录
暂停显示 不暂停,一次性显示所有符合条件的记录。 会暂停,当一屏显示不下时,会显示 "Press any key to continue...",按任意键后继续显示下一屏。
记录指针 执行后,记录指针指向表末尾 执行后,记录指针指向最后一条被显示的记录
  • 当你想快速查看所有符合条件的记录,并且不希望被中断时,使用 LIST
  • 当你只想查看当前记录,或者希望结果分页显示以便于阅读时,使用 DISPLAY

DISPLAY 默认只显示当前记录:

GO 3      && 跳转到第3条记录
DISPLAY   && 只显示第3条记录的信息

LIST 默认会显示所有记录:

LIST      && 显示所有记录

希望这份详细的解释能帮助你全面掌握 VFP 的 LIST 命令!

分享:
扫描分享到社交APP
上一篇
下一篇