备注文件的结构(.FPT)
请参阅
备注文件包含一个头记录以及任意数目的块结构。头记录中包含指向下一个自由块的指针以及以字节为单位表示的块大小。块的大小是在创建文件时由 SET BLOCKSIZE 命令确定的。头记录从文件位置 0 开始并占用 512 个字节。命令 SET BLOCKSJZE TO 0 设置块大小为 1。
头记录之后是包含块标头与备注文本的各个块。表文件包含有用于引用备注块的块编号。备注文件中某个块的位置可由该块的编号与块大小(在备注文件的头记录中建立)相乘得到。所有的备注块均由偶数的块边界地址开始。每一备注块可以占用一个以上的连续块。
备注头记录
|
字节偏移 |
说明 |
|
00 - 03 |
下一个自由块的位置1 |
|
04 – 05 |
未使用 |
|
06 – 07 |
块大小(每个块的字节数)1 |
|
08 – 511 |
未使用 |
|
1 存储整数时,高位字节在前。 |
|
备注块标头与备注文本
|
字节偏移 |
说明 |
|
00 – 03 |
块签名 1 (指示块中数据的类型) |
|
04 – 07 |
备注长度 1 (以字节为单位) |
|
08 – n |
备注文本(n = 长度) |
|
1 存储整数时,高位字节在前。 |
|
表文件(.dbc、.frx、.lbx、.mnx、.pjx、.scx、.vcx)的表结构
请参阅
关于表结构的说明存储在 FILESPEC 目录下的文件中。FILESPEC 目录包含两个项目:50SPEC.pjx 和 26SPEC.pjx。50SPEC.pjx 包含说明 Visual FoxPro 6.0 和 5.0 版表文件的表和报表。而 26SPEC.pjx 包含说明 FoxPro 2.6 版表文件的表和报表。
要查看关于某种表结构的说明,请打印相应的报表。下表列出了文件类型及其相关报表。有的文件类型由于列太多而无法放在同一页上,因而需要多个报表。
注释 所有报表均设置为横向打印格式。
Visual FoxPro 6.0 和 5.0
|
要查看下列表结构… |
打印此报表 |
使用 | |
|
数据库1 |
60DBC.frx |
60DBC.dbf | |
|
表单和 |
60SCX1.frx |
60SCX.dbf | |
|
菜单2 |
60MNX.frx |
60MNX.dbf | |
|
项目 |
60PJX1.frx |
60PJX.dbf | |
|
报表和 |
60FRX1.frx |
60FRX.dbf | |
|
1 可以在 60DBCPRO.frx 中打印数据库的属性。
|
| ||
FoxPro 2.6 版
|
要查看下列表结构… |
打印此报表 |
使用 |
|
屏幕 |
26SCX1.frx |
26SCX.dbf |
|
菜单 |
26MNX.frx |
26MNX.dbf |
|
项目 |
26PJX1.frx |
26PJX.dbf |
|
报表和 |
26FRX1.frx |
26FRX.dbf |
表文件的结构(.dbc、.dbf、.frx、.lbx、.mnx、.pjx、.scx、.vcx)
请参阅
Visual FoxPro 使用表存储数据,并根据存储数据的不同定义了不同的文件类型,作为表文件保存的文件类型有:
-
表(.dbf)
-
数据库(.dbc)
-
表单(.scx)
-
标签(.lbx)
-
菜单(.mnx)
-
项目(.pjx)
-
报表(.frx)
-
可视类库(.vcx)
由于上述文件实际上就是表,因此能够以浏览 .dbf 文件的方式使用和浏览这些文件。
表文件由头记录及数据记录组成。头记录定义该表的结构并包含与表相关的其他信息。头记录由文件位置 0 开始。数据记录1紧接在头记录之后(连续的字节),包含字段中实际的文本。
有关各种文件类型的表结构的详细内容,请参阅“表文件的表结构”。
记录的长度(以字节为单位)等于所有字段定义的长度之和。表文件中存储整数时低位字节在前。
表头记录的结构
|
字节偏移 |
说明 |
|
0 |
文件类型 |
|
1 – 3 |
最近一次更新的时间(YYMMDD) |
|
4 – 7 |
文件中的记录数目 |
|
8 – 9 |
第一个数据记录的位置 |
|
10 – 11 |
每个数据记录的长度(包括删除标记) |
|
12 – 27 |
保留 |
|
28 |
表的标记 |
|
29 |
代码页标记 |
|
30 – 31 |
保留,包含 0x00 |
|
32 – n |
字段子记录 |
|
n+1 |
头记录终止符(0x0D) |
|
n+2 到 n+264 |
此范围内的 263 个字节包含后链信息(相关数据库 (.dbc) 的相对路径)。如果第一个字节为 0x00,则该文件不与数据库关联。因此数据库文件本身总是包含 0x00。 |
1 头记录中的第 8 到第 9 个字节指示数据文件中数据的起始位置。数据记录从删除标记字节开始。如果此字节为 ASCII 空格 (0x20),该记录没有删除标记,如果第一字节为星号 (0x2A),该记录有删除标记。在标记之后是字段记录中所命名各字段中的数据。
字段子记录结构
|
字节偏移 |
说明 |
|
0 - 10 |
字段名(最多 10 个字符 —若少于 10 则用空字符 (0x00) 填充) |
|
11 |
字段类型 |
|
12 - 15 |
记录中该字段的偏移量 |
|
16 |
字段长度(以字节为单位) |
|
17 |
小数位数 |
|
18 |
字段标记 |
|
19 – 32 |
保留 |
有关对每个记录中字符的限制以及字段数目的最大值等详细内容,请参阅“Visual FoxPro 系统容量”。
说明
除非在文件中添加下列功能,否则 Visual FoxPro 将不修改按 FoxPro 2.x 文件格式保存的文件标头:
-
支持 null 值
-
日期时间型、货币型及双精度型数据
-
字符字段和备注字段标记为二进制
-
在数据库 (.dbc) 文件中添加表
提示 可以使用下面的公式求出表文件中字段的数目:(x – 296/32) 公式中,x 表示第一个记录的位置(表头记录的第 8 到第 9 个字节),296 表示 263(后链信息)+ 1(头记录终止符)+ 32(第一个字段子记录),32 是字段子记录的长度。
复合索引文件的结构(.cdx)
请参阅
所有复合索引均为压缩索引。
存在一种追踪 .cdx 文件中所有标识的文件结构。该结构与压缩索引文件的结构只有一点不同:该结构中最低层的叶结点指向复合索引中的标识。
索引中所有标识均有各自的完整结构,并与 .idx 文件的压缩索引结构等价。
压缩索引文件的结构(.idx)
请参阅
压缩索引头记录
|
字节偏移 |
说明 |
|
00 - 03 |
指向根结点的指针 |
|
04 - 07 |
指向自由结点列表的指针(如果不存在,则为 – 1 ) |
|
08 - 11 |
保留供内部使用 |
|
12 - 13 |
关键字长度 |
|
14 |
索引选项(下列某一数值或它们的和) |
|
15 |
索引签名 |
|
16 - 19 |
保留供内部使用 |
|
20 - 23 |
保留供内部使用 |
|
24 - 27 |
保留供内部使用 |
|
28 - 31 |
保留供内部使用 |
|
32 - 35 |
保留供内部使用 |
|
36 - 501 |
保留供内部使用 |
|
502 - 503 |
升序或降序 |
|
504 - 505 |
保留供内部使用 |
|
506 - 507 |
FOR 表达式池长度1 |
|
508 - 509 |
保留供内部使用 |
|
510 - 511 |
关键字表达式池长度1 |
|
512 - 1023 |
关键字表达式池(未编译) |
|
1 该信息追踪关键字表达式池中使用的空间。 | |
压缩索引内部结点记录
|
字节偏移 |
说明 |
|
00 - 01 |
结点属性(下列某一数值或它们的和): |
|
02 - 03 |
现有关键字的数目(0,1 或更多) |
|
04 - 07 |
当前结点的左结点指针(在同一层次上;如果不存在,则为 - 1) |
|
08 - 11 |
当前结点的右结点指针(在同一层次上;如果不存在,则为 - 1) |
|
12 - 511 |
最多有 500 个字符,其中包括关键字长度的值,用四字节的十六进制数表示(按照一般的自左而右的格式存储): |
压缩索引外部结点记录
|
00 - 01 |
结点属性(下列某一数值或它们的和): |
|
02 - 03 |
现有关键字的数目(0,1 或更多) |
|
04 - 07 |
当前结点的左结点指针(在同一层次上;如果不存在,则为 - 1) |
|
08 - 11 |
当前结点的右结点指针(在同一层次上;如果不存在,则为 - 1) |
|
12 - 13 |
结点上可用的自由空间 |
|
14 - 17 |
记录号掩码 |
|
18 |
重复字节计数掩码 |
|
19 |
后缀字节计数掩码 |
|
20 |
用作记录号的比特位数 |
|
21 |
用作重复计数的比特位数 |
|
22 |
用作后缀计数的比特位数 |
|
23 |
包含记录号、重复计数及后缀计数的字节数 |
|
24 - 511 |
索引关键字的信息2 |
|
2 每项均由记录号、重复字节计数及后缀字节计数组成,并且都为压缩形式。关键字文本放置在结点的逻辑末尾,向后起作用,适用于当前的各个关键字项。 | |
索引文件的结构(.idx)
请参阅
索引文件包含一个头记录以及一个或多个结点记录。头记录包含根结点、当前的文件大小、关键字长度、索引选项与签名以及用可打印的 ASCII 表示的关键字值和 FOR 表达式。头记录从文件位置 0 开始。
其余的结点记录包含属性值,现有的关键字数目以及指向当前结点的左结点和右结点(在同一层次上)的指针。另外还包含有一组字符,其中包括关键字值和指向某个低级结点或实际的表记录编号的指针。输出到文件中的每个记录的大小为 512 字节。
索引头记录
|
字节偏移 |
说明 |
|
00 – 03 |
指向根结点的指针 |
|
04 - 07 |
指向自由结点列表的指针(如果不存在则为 - 1) |
|
08 - 11 |
指向文件尾的指针(文件大小) |
|
12 - 13 |
关键字长度 |
|
14 |
索引选项(下列某一数值或它们的和): |
|
15 |
索引签名(供将来使用) |
|
16 - 235 |
关键字表达式(未编译;最多 220 个字符)1,3 |
|
236 - 455 |
FOR 表达式(未编译;以 null 值字节结束,最多220 个字符) |
|
456 - 511 |
未使用 |
索引结点记录
|
字节偏移 |
说明 |
|
00 - 01 |
结点属性(下列某一数值或它们的和): |
|
02 - 03 |
现有关键字的数目(0,1 或更多) |
|
04 - 07 |
指向当前结点左结点的指针(在同一层次上;如果不存在,则为 - 1) |
|
08 - 11 |
指向当前结点右结点的指针(在同一层次上;如果不存在,则为 - 1) |
|
12 - 511 |
最多有 500 个字符,其中包括关键字长度的值,以及一个四字节的十六进制数表示(按照一般的自左而右的格式存储): 字节 02 - 03,指定在这组字符中关键字/四字节十六进制数组合出现的次数。 |
1 关键字类型并不存储在索引中。必须由关键字表达式确定。
2 除了字符串、关键字值和叶结点中四字节数以外的所有数值均以保留码 (Intel 8086 格式) 表示。
3 使用数字作为关键字时要经过特殊处理。将使用下列算法转换数字,使得它们可以按照与字符相同的 ASCII 的排序序列进行排序。
-
将数转换为 IEEE 浮点数格式。
-
交换字节的顺序,从 Intel 8086 顺序转换为自左而右的顺序。
-
如果是负数,则对该数逻辑求反(交换全部的 64 位,1 变成 0,0 变成 1);否则,只对最左边的位求反。
排序树结构示例
在下面结构中查找关键字时,需要在根结点和叶结点之间的某个路径上搜索。在最低层上的结点是叶结点。因为关键字已进行了排序,因而子树中的所有关键字均小于或等于父结点的关键字。
上图中,使用字母作为关键字值。另外,每个关键字之后还有一个四字节的十六进制数。与叶结点中关键字相关联的数是实际的表编号—其他结点中的关键字都有与之关联的内联索引指针。
索引结点记录的 12—511 字节可分解如下:
在 12—511 字节中,关键字值/十六进制数组合共出现 n 次, n 为现有关键字的数目。
宏文件的格式(.fky)
请参阅
文件头
|
字节偏移 |
说明 |
|
01 - 03 |
签名,十六进制 79FF |
|
04 - 15 |
忽略 |
|
16 - 17 |
宏的数目(二进制) |
|
18 - end |
宏 |
单独宏
|
字节偏移 |
说明 |
|
00 - 19 |
宏名 |
|
20 - 21 |
宏长度(以键击数表示,二进制) |
|
22 - 23 |
键击(两字节,二进制) |
|
24 - end |
宏键击 |
文件扩展名与文件类型
请参阅
本表列出了 Visual FoxPro 使用的文件扩展名及其关联的文件类型。
|
扩展名 |
文件类型 |
|
.act |
向导操作图的文档 |
|
.app |
生成的应用程序或 Active Document |
|
.cdx |
复合索引 |
|
.chm |
编译的 HTML Help |
|
.dbc |
数据库 |
|
.dbf |
表 |
|
.dbg |
调试器配置 |
|
.dct |
数据库备注 |
|
.dcx |
数据库索引 |
|
.dep |
相关文件(由“安装向导”创建) |
|
.dll |
Windows 动态链接库 |
|
.err |
编译错误 |
|
.esl |
Visual FoxPro 支持的库 |
|
.exe |
可执行程序 |
|
.fky |
宏 |
|
.fll |
FoxPro 动态链接库 |
|
.FMT |
格式文件 |
|
.FPT |
表备注 |
|
.FRT |
报表备注 |
|
.frx |
报表 |
|
.fxp |
编译后的程序 |
|
.h |
头文件( Visual FoxPro 或 C/C++ 程序需要包含的) |
|
.hlp |
WinHelp |
|
.htm |
HTML |
|
.idx |
索引,压缩索引 |
|
.lbt |
标签备注 |
|
.lbx |
标签 |
|
.log |
代码范围日志 |
|
.lst |
向导列表的文档 |
|
.mem |
内存变量保存 |
|
.mnt |
菜单备注 |
|
.mnx |
菜单 |
|
.mpr |
生成的菜单程序 |
|
.mpx |
编译后的菜单程序 |
|
.ocx |
ActiveX 控件 |
|
.pjt |
项目备注 |
|
.pjx |
项目 |
|
.prg |
程序 |
|
.qpr |
生成的查询程序 |
|
.qpx |
编译后的查询程序 |
|
.sct |
表单备注 |
|
.scx |
表单 |
|
.spr |
生成的屏幕程序(只适用于 FoxPro 以前的版本) |
|
.spx |
编译后的屏幕程序(只适用于 FoxPro 以前的版本) |
|
.tbk |
备注备份 |
|
.txt |
文本 |
|
.vct |
可视类库备注 |
|
.vcx |
可视类库 |
|
.vue |
FoxPro 2.x 视图 |
|
.win |
窗口文件 |
本文解析了VisualFoxPro中备注文件(.FPT)的结构,包括头记录与块结构的细节,以及如何通过块编号和块大小定位备注内容。同时介绍了表文件(.dbc、.dbf等)的结构和索引文件(.cdx、.idx)的组织方式。
318





