DBF文件结构中文说明_第1页
DBF文件结构中文说明_第2页
DBF文件结构中文说明_第3页
DBF文件结构中文说明_第4页
DBF文件结构中文说明_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.标准的DBF文件,是由头文件和实体信息两部分构成(如图所示)。文件头记录1记录2记录3记录4记录nDBF文件的结构1)文件的文件头其中文件头部分的长度是不定长的,它主要对DBF文件作了一些总体说明(表),其中最主要的是对这个DBF文件的记录项的信息进行了详细地描述,比如对每个记录项的名称、数据类型、长度等信息都有具体的说明。在文件中的位置内容说明01个字节表示当前的版本信息133个字节表示最近的更新日期,按照YYMMDD格式。471个32位数文件中的记录条数。891个16位数文件头中的字节数。10111个16位数一条记录中的字节长度。12132个字节保留字节,用于以后添加新的说明性信息时使用

2、,这里用0来填写。141个字节表示未完成的操作。 151个字节dBASE IV编密码标记。162712个字节保留字节,用于多用户处理时使用。281个字节DBF文件的MDX标识。在创建一个DBF 表时 ,如果使用了MDX 格式的索引文件,那么 DBF 表的表头中的这个字节就自动被设置了一个标志,当你下次试图重新打开这个DBF表的时候,数据引擎会自动识别这个标志,如果此标志为真,则数据引擎将试图打开相应的MDX 文件。291个字节Language driver ID.30312个字节保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。32X(n*32)个字节记录项信息描述数组。n表示记录项

3、的个数。这个数组的结构在表2.8中有详细的解释。X11个字节作为记录项终止标识。文件(.dbf)的文件头位置内容说明01011个字节记录项名称,是ASCII码值。111个字节记录项的数据类型,是ASCII码值。(B、C、D、G、L、M和N,具体的解释见表2.9)。12154个字节记录中该字段的偏移量。161个字节记录项长度,二进制型。171个字节记录项的精度,二进制型。201个字节工作区ID。213010个字节保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。311个字节MDX标识。如果存在一个MDX 格式的索引文件,那么这个记录项为真,否则为空。 记录项信息描述代码数据类型允许输入

4、的数据B二进制型 双精度型?各种字符。C字符型各种字符。D日期型用于区分年、月、日的数字和一个字符,内部存储按照YYYYMMDD格式。G(Generalor OLE) 通用类型各种字符。N数值型(Numeric)- . 0 1 2 3 4 5 6 7 8 9 L逻辑型(Logical)? Y y N n T t F f (? 表示没有初始化)。 M(Memo)各种字符。Y货币型F浮点型I整形P图片表2.9 dbf文件中的数据类型2) 文件的实体信息实体信息部分就是一条条记录,每条记录都是由若干个记录项构成,因此只要依次循环读取每条记录就可以了。3) 一个读取dbf文件的例子假设要读取一个名为s

5、oil的dbf文件(存储了土地利用信息),它含有8个记录项,记录项信息如表所示:记录项名称数据类型长度小数位数Area 数值型(double)3115Perimeter数值型(double)3115soils_数值型(int)110soils_id数值型(int)110soil_code字符型(character)3无Suit字符型(character)1无Centroid_x数值型(double)3115Centroid_y数值型(double)3115 dbf文件中的数据类型2、行情文件格式说明:(1)、表文件由头记录及数据记录组成。头记录定义该表的结构及与表相关的其他信息。数据记录紧接在

6、头记录之后,包含字段中实际的文本。记录的长度等于所有字段定义的长度之和(以字节为单位)。(2)、头记录以终止符(0x0D)结束,数据记录以终止符(0x1A)结束。(3)、表文件中存储整数时低位字节在前。(4)、数据记录从删除标记字节开始。如果删除标记字节为ASCII空格(0x20),则表示该记录未被删除,如果该字节为星号(0x2A),则表示该记录被删除。在删除标记之后是字段记录中所命名的各字段的数据。(5)、数据记录都是用ASCII码形式存放的,所以只要读出文件头和字段类型描述区的内容,就可以直接读取dbf文件中的每条记录。文件头部结构(32字节)位置长度含义备注01文件类型0x03,FoxB

7、ASE+/dBASE III PLUS,无备注0x02 FoxBASE0x03 FoxBASE+/dBASE III PLUS,无备注0x30 Visual FoxPro0x43 dBASE IV SQL 表文件,无备注0x63 dBASE IV SQL 系统文件,无备注0x83 FoxBASE+/dBASE III PLUS,有备注0x8B dBASE IV 有备注0xCB dBASE IV SQL 表文件,有备注0xF5 FoxPro 2.x(或更早版本)有备注0xFB FoxBASE1 - 33最近一次更新的时间(YYMMDD)4 - 74文件中的记录数目8 - 92文件中的第一个数据记

8、录的位置10 - 112每个数据记录的长度(包括删除标记)12 - 3120保留28:0x01 具有 .cdx 结构的文件0x02 文件包含备注。0x04 文件是数据库(.dbc)29代码页标记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字段长度以字节为

9、单位171小数位数以字节为单位18 - 3114保留n+1 头记录终止符(0x0D),n+2 到 n+264 此范围内的 263 个字节包含后链信息(相关数据库 (.dbc) 的相对路径)。如果第一个字节为 0x00,则该文件不与数据库关联。因此数据库文件本身总是包含 0x00。数据记录从 除标记字节开始。如果此字节为 ASCII 空格 (0x20),该记录没有删除标记, 如果第一字节为星号 (0x2A),该记录有删除标记。在标记之后是字段记录中所命名各字段中的数据下面是读取这个dbf文件的代码:void OnReadDbf(CString DbfFileName) FILE* m_DbfFi

10、le_fp; /*Dbf文件指针 /打开dbf文件 if(m_DbfFile_fp=fopen(DbfFileName,rb)=NULL) return; int i,j; /*读取dbf文件的文件头 开始 BYTE version; fread(&version, 1, 1,m_DbfFile_fp); BYTE date3; for(i=0;i3;i+) fread(date+i, 1, 1,m_DbfFile_fp); int RecordNum; /* fread(&RecordNum, sizeof(int), 1,m_DbfFile_fp); short HeaderByteNum

11、; fread(&HeaderByteNum, sizeof(short), 1,m_DbfFile_fp); short RecordByteNum fread(&RecordByteNum, sizeof(short), 1,m_DbfFile_fp); short Reserved1; fread(&Reserved1, sizeof(short), 1,m_DbfFile_fp); BYTE Flag4s; fread(&Flag4s, sizeof(BYTE), 1,m_DbfFile_fp); BYTE EncrypteFlag; fread(&EncrypteFlag, size

12、of(BYTE), 1,m_DbfFile_fp); for(i=0;i3;i+) fread(&Unused, sizeof(int), 1,m_DbfFile_fp); BYTE MDXFlag; fread(&MDXFlag, sizeof(BYTE), 1,m_DbfFile_fp); BYTE LDriID; fread(&LDriID, sizeof(BYTE), 1,m_DbfFile_fp); short Reserved2; fread(&Reserved2, sizeof(short), 1,m_DbfFile_fp); BYTE name11; BYTE fieldTyp

13、e; int Reserved3; BYTE fieldLength; BYTE decimalCount; short Reserved4; BYTE workID; short Reserved55; BYTE mDXFlag1; int fieldscount; fieldscount = (HeaderByteNum - 32) / 32; /读取记录项信息共有8个记录项 for(i=0;i HeaderByteNum;i+) /FieldName-11 bytes fread(name, 11, 1,m_DbfFile_fp); /FieldType-1 bytes fread(&f

14、ieldType, sizeof(BYTE), 1,m_DbfFile_fp); /Reserved3-4 bytes Reserved3 =0; fread(&Reserved3, sizeof(int), 1,m_DbfFile_fp); /FieldLength-1 bytes fread(&fieldLength,sizeof(BYTE), 1,m_DbfFile_fp); /DecimalCount-1 bytes fread(&decimalCount,sizeof(BYTE), 1,m_DbfFile_fp); /Reserved4-2 bytes Reserved4 =0; f

15、read(&Reserved4, sizeof(short), 1,m_DbfFile_fp); /WorkID-1 bytes fread(&workID, sizeof(BYTE), 1,m_DbfFile_fp); /Reserved5-10 bytes for(j=0;j5;j+) fread(Reserved5+j,sizeof(short), 1,m_DbfFile_fp); /MDXFlag1-1 bytes fread(&mDXFlag1, sizeof(BYTE), 1,m_DbfFile_fp); BYTE terminator; fread(&terminator, si

16、zeof(BYTE), 1,m_DbfFile_fp); /读取dbf文件头结束 double Area,Perimeter,Centroid_y,Centroid_x; int Soils_,Soils_id; CString Soil_code,suit; BYTE deleteFlag; char media31; /读取dbf文件记录 开始 for(i=0;iRecordNum;i+) fread(&deleteFlag, sizeof(BYTE), 1,m_DbfFile_fp); /读取 Area double for(j=0;j31;j+) fread(media+j, size

17、of(char), 1,m_DbfFile_fp); Area =atof(media); /读取 Perimeter double for(j=0;j31;j+) fread(media+j, sizeof(char), 1,m_DbfFile_fp); Perimeter =atof(media); /读取 soils_ int for(j=0;j31;j+) strcpy(media+j,); for(j=0;j11;j+) fread(media+j, sizeof(char), 1,m_DbfFile_fp); Soils_ =atoi(media); /读取 Soils_id in

18、t for(j=0;j31;j+) strcpy(media+j,); for(j=0;j11;j+) fread(media+j, sizeof(char), 1,m_DbfFile_fp); Soils_id =atoi(media); /读取 soil_code string for(j=0;j31;j+) strcpy(media+j,); for(j=0;j3;j+) fread(media+j, sizeof(char), 1,m_DbfFile_fp); Soil_code =media; /读取 suit string for(j=0;j31;j+) strcpy(media+j,); for(j=0;j1;j+) fread(media+j, sizeof(char), 1,m_DbfFile_fp); suit =media; /读取 Centroid

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论