DBF文件结构中文说明.docx
- 文档编号:16471267
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:14
- 大小:30.91KB
DBF文件结构中文说明.docx
《DBF文件结构中文说明.docx》由会员分享,可在线阅读,更多相关《DBF文件结构中文说明.docx(14页珍藏版)》请在冰点文库上搜索。
DBF文件结构中文说明
标准的DBF文件,是由头文件和实体信息两部分构成(如图所示)。
1)文件的文件头
其中文件头部分的长度是不定长的,它主要对DBF文件作了一些总体说明(表),其中
最主要的是对这个DBF文件的记录项的信息进行了详细地描述,比如对每个记录项的名称、数据类型、长度等信息都有具体的说明。
在文件中的位置
内容
说明
0
1个字节
表示当前的版本信息
1—3
3个字节
表示最近的更新日期,按照YYMMDD格式。
4—7
1个32位数
文件中的记录条数。
8—9
1个16位数
文件头中的字节数。
10—11
1个16位数
一条记录中的字节长度。
12—13
2个字节
保留字节,用于以后添加新的说明性信息时使用,这里用0
来填写。
14
1个字节
表示未完成的操作。
15
1个字节
dBASEIV编密码标记。
16—27
12个字节
保留字节,用于多用户处理时使用。
28
1个字节
DBF文件的MDX标识。
在创建一个DBF表时,如果使用了MDX格式的索引文件,那么DBF表的表头中的这个字节就自动被设置了一个标志,当你下次试图重新打开这个DBF表的
时候,数据引擎会自动识别这个标志,如果此标志为真,贝U数据引擎将试图打开相应的MDX文件。
29
1个字节
LanguagedriverID.
30—31
2个字节
保留字节,用于以后添加新的说明性信息时使用,这里用0
来填写。
32—X
(n*32)个字节
记录项信息描述数组。
n表示记录项的个数。
这个数组的结构在表2.8中有详细的解释。
X+1
1个字节
作为记录项终止标识。
文件(.dbf)的文件头
位置
内容
说明
0—10
11个字节
记录项名称,是ASCII码值。
11
1个字节
记录项的数据类型,是ASCII码值。
(B、C、DGL、M和N,具体的解释见表2.9)。
12—15
4个字节
记录中该字段的偏移量。
16
1个字节
记录项长度,二进制型。
17
1个字节
记录项的精度,二进制型。
20
1个字节
工作区ID。
21—30
10个字节
保留字节,用于以后添加新的说明性信息时使用,这里用0
来填写。
31
1个字节
MDX标识。
如果存在一个MDX格式的索引文件,那么这个记录项为真,否则为空。
记录项信息描述
代码
数据类型
允许输入的数据
B
二进制型双精度型]
各种字符。
C
字符型
各种字符。
D
日期型
用于区分年、月、日的数字和一个字符,内部存储按照YYYYMMD格式。
G
(GeneralorOLE)通用类型
各种字符。
N
数值型(Numeric)
-.0123456789
L
逻辑型(Logical)
?
YyNnTtFf(?
表示没有初始
化)。
M
(Memo)
各种字符。
Y
货币型
F
浮点型
I
整形
P
图片
表2.9dbf文件中的数据类型
2)文件的实体信息
实体信息部分就是一条条记录,每条记录都是由若干个记录项构成,因此只要依次循环
读取每条记录就可以了。
3)一个读取dbf文件的例子
假设要读取一个名为soil的dbf文件(存储了土地利用信息),它含有8个记录项,记录项信息如表所示:
记录项名称
数据类型]
长度
小数位数
Area
数值型(double)
31
15
Perimeter
数值型(double)
31
15
soils_
数值型(int)
11
0
soils_id
数值型(int)
11
0
soil_code
字符型(character)
3
无
Suit
字符型(character)
1
无
Centroid_x
数值型(double):
31
15
Centroid_y
数值型(double)
31
15
dbf文件中的数据类型
2、行情文件格式
说明:
(1)、表文件由头记录及数据记录组成。
头记录定义该表的结构及与表相关的其他信息。
数据
记录紧接在头记录之后,包含字段中实际的文本。
记录的长度等于所有字段定义的长度之和(以
字节为单位)。
0x1A)结束。
ASCII空格(0x20),则表示该记录
在删除标记之后是字段记录中所命
(2)、头记录以终止符(OxOD)结束,数据记录以终止符(
(3)、表文件中存储整数时低位字节在前。
(4)、数据记录从删除标记字节开始。
如果删除标记字节为
未被删除,如果该字节为星号(0x2A),则表示该记录被删除。
名的各字段的数据。
(5)、数据记录都是用ASCII码形式存放的,所以只要读岀文件头和字段类型描述区的内容,就可以直接读取dbf文件中的每条记录。
文件头部结构(32字节)
位置
长度
含义
备注
0
1
文件类型
0x03,FoxBASE+/dBASEHIPLUS,无备注
1-3
3
最近一次更新的时间(YYMMDD)
4-7
4
文件中的记录数目
8-9
2
文件中的第一个数据记录的位置
10-11
2
每个数据记录的长度(包括删除标记)
12-31
20
保留
32-n字段子记录
字段的数目决定了字段子记录的数目。
字段记录结构(32字节)
位置长度说明备注
0-1011字段名最多10个字符,若少于10则用空字符填
111字段类型C-字符型
Y-货币型
N-数值型
F-浮点型
D-日期型
T-日期时间型
B-双精度型
I-整型
L-逻辑型
M-备注型
G-通用型
C-字符型(二进制)
M-备注型(二进制)
P-图片型
12-154记录中该字段的偏移量(16进
制)
161字段长度以字节为单位
171小数位数以字节为单位
18-3114保留
n+1头记录终止符(OxOD),n+2到n+264此范围内的263个字节包含后链信息(相关数据库
(.dbc)的
相对路径)。
如果第一个字节为
0x00,则该文件不与数据库关联。
因此数据库文件本身总是包含
0x00。
数据记录从除标记字节开始。
如果此字节为ASCII空格(0x20),该记录没有删除标记,如果第一字节
为星号(0x2A),该记录有删除标记。
在标记之后是字段记录中所命名各字段中的数据
F面是读取这个dbf文件的代码:
voidOnReadDbf(CStringDbf)
FILE*m_Dbf;〃****Dbf文件指针
II打开dbf文件
if((m_Dbf(Dbf,"rb"))==NULL)
{
return;
}
inti,j;
//////****读取dbf文件的文件头开始
BYTEversion;
fread(&version,1,1,m_Dbf);
BYTEdate[3];
for(i=0;i<3;i++)
{
1,1,m_Dbf);
fread(date+i,
}
intRecordNum;
fread(&RecordNum,
shortHeaderByteNum;
//******
sizeof(int),
1,
i_Dbf);
fread(&HeaderByteNum,sizeof(short),1,m_Dbf);
shortRecordByteNum
1,m_Dbf);
Dbf);
_Dbf);
m_Dbf);
fread(&Reserved1,
BYTEFlag4s;fread(&Flag4s,
BYTEEncrypteFlag;fread(&EncrypteFlag,
sizeof(short),1,m_Dbf);
sizeof(BYTE),
sizeof(BYTE),1,m_
for(i=0;i<3;i++)
{
fread(&Unused,
}
BYTEMDXFlag;
fread(&MDXFIag,sizeof(BYTE),1,m
BYTELDriID;
fread(&LDrilD,
shortReserved2;
fread(&Reserved2,sizeof(short),1,m_Dbf);
BYTEname[11];
sizeof(int),1,m
i_Dbf);
sizeof(BYTE),1,
BYTEfieldType;
BYTEfieldLength;
BYTEdecimalCount;
shortReserved4;
BYTEworkID;
shortReserved5[5];
BYTEmDXFIag1;
intfieldscount;
fieldscount=(HeaderByteNum-32)/32;
II读取记录项信息-共有8个记录项for(i=0;i bytes 11,1,m_Dbf); bytes sizeof(BYTE),1,m_Dbf); bytes =0; { IIFieldName——11fread(name, IIFieldType——1fread(&fieldType,IIReserved3——4Reserved3 fread(&Reserved3,sizeof(int),1,m_Dbf); IIFieldLength--1bytes fread(&fieldLength,sizeof(BYTE),1,m_Dbf); IIDecimalCount-1bytes //WorkID1bytes ),1,m_Dbf); fread(&worklD,sizeof(BYTE 〃Reserved5----10bytes for(j=0;j<5;j++) { 1,m_Dbf); fread(Reserved5+j,sizeof(short), } 〃MDXFIag1-----1bytes 1,m_Dbf); fread(&mDXFIag1,sizeof(BYTE), } BYTEterminator; fread(&terminator,sizeof(BYTE),1,m_Dbf); //读取dbf文件头结束 doubleArea,Perimeter,Centroid_y,Centroid_x; intSoils_,Soils_id; CStringSoil_code,suit; BYTEdeleteFlag; charmedia[31]; //读取dbf文件记录开始 for(i=0;i 1,m_Dbf); 1,m_Dbf); //读取Areadouble for(j=0;j<31;j++) fread(media+j,sizeof(char), 1,m_Dbf); Area=atof(media); //读取Perimeterdoublefor(j=0;j<31;j++) fread(media+j,sizeof(char), Perimeter=atof(media); //读取soils_int for(j=0;j<31;j++) strcpy(media+j,""); for(j=0;j<11;j++) fread(media+j,sizeof(char), Soils_=atoi(media); //读取Soils_idint for(j=0;j<31;j++) strcpy(media+j,""); for(j=0;j<11;j++) fread(media+j,sizeof(char), //读取soil_codestring for(j=0;j<31;j++) strcpy(media+j,""); for(j=0;j<3;j++) fread(media+j,sizeof(char), 1,m_Dbf); Soil_code=media; //读取suitstring for(j=0;j<31;j++) strcpy(media+j,""); for(j=0;j<1;j++) fread(media+j,sizeof(char), 1,m_Dbf); suit=media; //读取Centroid_ydouble for(j=0;j<31;j++) strcpy(media+j,""); for(j=0;j<31;j++) fread(media+j,sizeof(char), 1,m_Dbf); Centroid_y=atof(media); //读取Centroid_xdoublefor(j=0;j<31;j++) strcpy(media+j,""); for(j=0;j<31;j++) fread(media+j,sizeof(char), Centroid_x=atof(media); } II读取dbf文件记录结束
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DBF 文件 结构 中文 说明