DBF文件结构中文说明.docx

上传人:b****1 文档编号:10756891 上传时间:2023-05-27 格式:DOCX 页数:13 大小:18.52KB
下载 相关 举报
DBF文件结构中文说明.docx_第1页
第1页 / 共13页
DBF文件结构中文说明.docx_第2页
第2页 / 共13页
DBF文件结构中文说明.docx_第3页
第3页 / 共13页
DBF文件结构中文说明.docx_第4页
第4页 / 共13页
DBF文件结构中文说明.docx_第5页
第5页 / 共13页
DBF文件结构中文说明.docx_第6页
第6页 / 共13页
DBF文件结构中文说明.docx_第7页
第7页 / 共13页
DBF文件结构中文说明.docx_第8页
第8页 / 共13页
DBF文件结构中文说明.docx_第9页
第9页 / 共13页
DBF文件结构中文说明.docx_第10页
第10页 / 共13页
DBF文件结构中文说明.docx_第11页
第11页 / 共13页
DBF文件结构中文说明.docx_第12页
第12页 / 共13页
DBF文件结构中文说明.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

DBF文件结构中文说明.docx

《DBF文件结构中文说明.docx》由会员分享,可在线阅读,更多相关《DBF文件结构中文说明.docx(13页珍藏版)》请在冰点文库上搜索。

DBF文件结构中文说明.docx

DBF文件结构中文说明

标准的DBF文件,是由头文件和实体信息两部分构成(如图所示)。

文件头

记录1

 

记录2

 

记录3

 

记录4

 

……

……

记录n

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表的时候,数据引擎会自动识别这个标志,如果此标志为真,则数据引擎将试图打开相应的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、D、G、L、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

日期型

用于区分年、月、日的数字和一个字符,内部存储按照YYYYMMDD格式。

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)、表文件由头记录及数据记录组成。

头记录定义该表的结构及与表相关的其他信息。

数据记录紧接在头记录之后,包含字段中实际的文本。

记录的长度等于所有字段定义的长度之和(以字节为单位)。

(2)、头记录以终止符(0x0D)结束,数据记录以终止符(0x1A)结束。

(3)、表文件中存储整数时低位字节在前。

(4)、数据记录从删除标记字节开始。

如果删除标记字节为 ASCII 空格 (0x20),则表示该记录未被删除,如果该字节为星号(0x2A),则表示该记录被删除。

在删除标记之后是字段记录中所命名的各字段的数据。

(5)、数据记录都是用ASCII码形式存放的,所以只要读出文件头和字段类型描述区的内容,就可以直接读取dbf文件中的每条记录。

 

文件头部结构(32字节)

位置

长度

含义

备注

0

1

文件类型

0x03,FoxBASE+/dBASEIIIPLUS,无备注

1-3

3

最近一次更新的时间(YYMMDD)

 

4-7

4

文件中的记录数目

 

8-9

2

文件中的第一个数据记录的位置

 

10-11

2

每个数据记录的长度(包括删除标记)

 

12-31

20

保留

 

 

 32-n 字段子记录 

字段的数目决定了字段子记录的数目。

 

字段记录结构(32字节)  

位置

长度

说明

备注

0-10

11

字段名

最多10个字符,若少于10则用空字符填充

11

1

字段类型

C-字符型

Y-货币型

N-数值型

F-浮点型

D-日期型

T-日期时间型

B-双精度型

I-整型

L-逻辑型

M-备注型

G-通用型

C-字符型(二进制)

M-备注型(二进制)

P-图片型

12-15

4

记录中该字段的偏移量(16进制)

 

16

1

字段长度

以字节为单位

17

1

小数位数

以字节为单位

18-31

14

保留

 

 

n+1头记录终止符(0x0D),n+2到n+264此范围内的263个字节包含后链信息(相关数据库(.dbc)的相对路径)。

如果第一个字节为0x00,则该文件不与数据库关联。

因此数据库文件本身总是包含0x00。

数据记录从除标记字节开始。

如果此字节为ASCII空格(0x20),该记录没有删除标记,如果第一字节为星号(0x2A),该记录有删除标记。

在标记之后是字段记录中所命名各字段中的数据

下面是读取这个dbf文件的代码:

voidOnReadDbf(CStringDbf)

{

      FILE*  m_Dbf;      //****Dbf文件指针

      //打开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++)

      {

             fread(date+i,    1,  1,m_Dbf);

      }

      

      intRecordNum;           //******

      fread(&RecordNum,       sizeof(int),  1,m_Dbf);

      shortHeaderByteNum;

      fread(&HeaderByteNum, sizeof(short),1,m_Dbf);

      shortRecordByteNum

      fread(&RecordByteNum, sizeof(short),1,m_Dbf);

      shortReserved1;          

      fread(&Reserved1,  sizeof(short),1,m_Dbf);

      

      BYTEFlag4s;

      fread(&Flag4s,               sizeof(BYTE), 1,m_Dbf);

      BYTEEncrypteFlag;

      fread(&EncrypteFlag,          sizeof(BYTE), 1,m_Dbf);

      

      for(i=0;i<3;i++)

      {

             fread(&Unused,      sizeof(int),  1,m_Dbf);

      }

      BYTEMDXFlag;

      fread(&MDXFlag,   sizeof(BYTE), 1,m_Dbf);

      

      BYTELDriID;

      fread(&LDriID,              sizeof(BYTE), 1,m_Dbf);

      shortReserved2;

      fread(&Reserved2,  sizeof(short),1,m_Dbf);

      BYTEname[11];

      BYTEfieldType;

      intReserved3;

      BYTEfieldLength;

      BYTEdecimalCount;

      shortReserved4;

      BYTEworkID;

      shortReserved5[5];

      BYTEmDXFlag1;

      intfieldscount;

      fieldscount=(HeaderByteNum-32)/32;

      //读取记录项信息-共有8个记录项

      for(i=0;i

      {

             //FieldName----11  bytes

             fread(name,   11,1,m_Dbf);

             //FieldType----1    bytes

             fread(&fieldType,  sizeof(BYTE),1,m_Dbf);

             //Reserved3----4    bytes

             Reserved3     =0;

             fread(&Reserved3,sizeof(int), 1,m_Dbf);

             //FieldLength--1    bytes

             fread(&fieldLength,sizeof(BYTE),1,m_Dbf);

             //DecimalCount-1  bytes

             fread(&decimalCount,sizeof(BYTE),1,m_Dbf);

             //Reserved4----2    bytes

             Reserved4     =0;

             fread(&Reserved4,sizeof(short), 1,m_Dbf);

             //WorkID-------1   bytes

             fread(&workID,           sizeof(BYTE),1,m_Dbf);

             //Reserved5----10  bytes

             for(j=0;j<5;j++)

             {

                    fread(Reserved5+j,sizeof(short), 1,m_Dbf);

             }

             //MDXFlag1-----1 bytes

             fread(&mDXFlag1,      sizeof(BYTE),1,m_Dbf);

      }

      BYTEterminator;

      fread(&terminator,       sizeof(BYTE),1,m_Dbf);

      //读取dbf文件头结束

      doubleArea,Perimeter,Centroid_y,Centroid_x;

      intSoils_,Soils_id;

      CStringSoil_code,suit;

      BYTE  deleteFlag;

      charmedia[31];

      //读取dbf文件记录 开始

      for(i=0;i

      {

             fread(&deleteFlag, sizeof(BYTE),1,m_Dbf);

             //读取Areadouble

             for(j=0;j<31;j++)

                    fread(media+j,sizeof(char),1,m_Dbf);

             Area=atof(media);

             //读取Perimeterdouble

             for(j=0;j<31;j++)

                    fread(media+j,sizeof(char),1,m_Dbf);

             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),1,m_Dbf);

             Soils_     =atoi(media);

             //读取Soils_id int

             for(j=0;j<31;j++)

                    strcpy(media+j,"");

             for(j=0;j<11;j++)

                    fread(media+j,sizeof(char),1,m_Dbf);

             Soils_id  =atoi(media);

             //读取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_xdouble

             for(j=0;j<31;j++)

                    strcpy(media+j,"");

             for(j=0;j<31;j++)

                    fread(media+j,sizeof(char),1,m_Dbf);

             Centroid_x     =atof(media);

      }

      //读取dbf文件记录 结束

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2