关于DBF文件格式的详细说明
在网上搜索DBF文件的说明时,基本能找到两个版本,这个版本的解释比较详细,转载自:http://blog.donews.com/dgsheng/archive/2006/01/17/699067.aspx
转载到自己的空间是为了查找方便,在此向原文的作者表示感谢。以下是正文内容
DBF 文件结构:
表文件由头记录及数据记录组成。头记录定义该表的结构并包含与表相关的其他信息。头记录由文件位置 0 开始。数据记录1紧接在头记录之后(连续的字节),包含字段中实际的文本。 记录的长度(以字节为单位)等于所有字段定义的长度之和。表文件中存储整数时低位字节在前。 1.表头记录的结构: 字节偏移 说明 0 文件类型 0×02FoxBASE 0×03FoxBASE+/dBASE III PLUS,无备注 0×30Visual FoxPro 0×43dBASE IV SQL 表文件,无备注 0×63dBASE IV SQL 系统文件,无备注 0×83FoxBASE+/dBASE III PLUS,有备注 0×8BdBASE IV 有备注 0xCBdBASE IV SQL 表文件,有备注 0xF5FoxPro 2.x(或更早版本)有备注 0xFBFoxBASE 1 – 3 最近一次更新的时间(YYMMDD) 4 – 7 文件中的记录数目 8 – 9 第一个数据记录的位置 10 – 11 每个数据记录的长度(包括删除标记) 12 – 27 保留 28 表的标记 0×01具有 .cdx 结构的文件 0×02文件包含备注。 0×04文件是数据库(.dbc) 请注意,这个字节可以包含任何上面值的和。例如,0×03 表明表具有结构化.cdx和一个备注字段。 29 代码页标记 30 – 31 保留,包含 0×00 32 – n 字段子记录 字段的数目决定了字段子记录的数目。表中每个字段都对应一个字段子记录。 n+1 头记录终止符(0×0D),n+2 到 n+264 此范围内的 263 个字节包含后链信息(相关数据库 (.dbc) 的相对路径)。如果第一个字节为 0×00,则该文件不与数据库关联。因此数据库文件本身总是包含 0×00。 1 头记录中的第 8 到第 9 个字节指示数据文件中数据的起始位置。数据记录从 除标记字节开始。如果此字节为 ASCII 空格 (0×20),该记录没有删除标记, 如果第一字节为星号 (0×2A),该记录有删除标记。在标记之后是字段记录中所命名各字段中的数据 2.字段子记录结构 字节偏移 说明 0 – 10 字段名(最多 10 个字符 -若少于 10 则用空字符 (0×00) 填充) 11 字段类型 C-字符型 Y-货币型 N-数值型 F-浮点型 D-日期型 T-日期时间型 B-双精度型 I-整型 L-逻辑型 M-备注型 G-通用型 C-字符型(二进制) M-备注型(二进制) P-图片型 12 – 15 记录中该字段的偏移量 16 字段长度(以字节为单位) 17 小数位数 18 字段标记 0×01系统列(用户不可见) 0×02可存储 null 值的列 0×04二进制列(只适于字符型和备注型) 19 – 32 保留 格式保存的文件标头: 支持 null 值 日期时间型、货币型及双精度型数据 字符字段和备注字段标记为二进制 在数据库 (.dbc) 文件中添加表 提示 可以使用下面的公式求出表文件中字段的数目:(x – 296/32) 公式中,x 表示第一个记录的位置(表头记录的第 8 到第 9 个字节),296 表示 263(后链信息)+ 1(头记录终止符)+ 32(第一个字段子记录),32 是字段子记录的长度。 |
文件头数据结构描述(C和Pascal) 描述
因为dbf文件的记录在文件数据部分,都是用ASCII码形式存放的,所以只要读出文件头和字段类型描述区的内容,就可以直接读取dbf文件中的每条记录,dbf文件头结构和字段类型描述
文件头数据结构描述(C和Pascal)
C 描述 因为dbf文件的记录在文件数据部分,都是用ASCII码形式存放的,所以只要读出文件头和字段类型描述区的内容,就可以直接读取dbf文件中的每条记录,dbf文件头结构和字段类型描述结构用C语言表示如下: 这是我用Passcal描述的: Tdbf_head = packed record |
附程序:
附源码:
结构用C语言表示如下:
struct dbf_head { /* DBF文件头结构 */
char vers; /* 版本标志*/
unsigned char yy,mm,dd; /* 最后更新年、月、日 */
unsigned long no_recs; /* 文件包含的总记录数 */
unsigned short head_len,rec_len; /* 文件头长度,记录长度 */
char reserved[20]; /* 保留 */
};
struct field_element{ /* 字段描述结构 */
char field_name[11]; /* 字段名称 */
char field_type; /* 字段类型 */
unsigned long offset; /* 偏移量 */
unsigned char field_length; /* 字段长度 */
unsigned char field_decimal; /* 浮点数整数部分长度 */
char reserved1[2]; /* 保留 */
char dbaseiv_id; /* dBASE IV work area id */
char reserved2[10]; /*
char production_index;
};
需 要注意的是,输入的dbf文件是FoxPro 2.5 for DOS/Windows的版本,文件头中表示记录数等内容的unsigned long和unsigned short字段,寻址顺序是从高位到低位;而C程序在HP-UX操作系统下编译时,HP服务器使用的RISC CPU的寻址顺序与Intel x86系列CPU的寻址顺序相反,是从低位到高位,故程序中需要将读取的unsigned long和unsigned short进行反转操作,可以使用位操作编程实现:
void revert_unsigned_short(unsigned short *a)
{
unsigned short left,right;
left=right=*a;
*a=((left&0×00ff)<<8)|((right&0xff00)>>8);
}
void revert_unsigned_long(unsigned long *a)
{
unsigned long first,second,third,forth;
first=second=third=forth=*a;
*a=((first&0×000000ff)<<24)|
((second&0×0000ff00)<<8)|
((third&0×00ff0000)>>8)|
((forth&0xff000000)>>24);
}
这是我用Passcal描述的:
Tdbf_head = packed record
vers : char ; //版本标志
yy,mm,dd :byte; // 最后更新年、月、日
no_recs : longword ; // 文件包含的总记录数;
head_len,rec_len : word; //文件头长度,记录长度
reserved : array[0..19] of char ;
end;
Tfield_element =record // 字段描述结构
field_name:array[0..10] of char; // 字段名称
field_type:char; // 字段类型
offset:longword; // 偏移量
field_length:byte; // 字段长度
field_decimal:byte; // 浮点数整数部分长度
reserved1:array[0..1] of char; // 保留
dbaseiv_id:char; // dBASE IV work area id
reserved2:array[0..9] of char; //
production_index:char
end;
关于DBF文件格式的详细说明相关推荐
- txt格式转换成prg_持批量转换的转换器-dbf converter(dbf文件格式转换器) 官方版 v5.75 - 未来软件园...
DBF Converter是一个dbf文件格式转换器,可以将DBF文件转换成XML.CSV.TXT.HTML.RTF和PRG等格式的文件.它支持批量转换,以及命令行方式操作,并支持包括简体中文在内的五 ...
- c语言读dbf文件格式,C语言直接读取FOXBASE的DBF文件
维普资讯 http://doc.docsou.com 1◇~ l 1 ( B s I 据的读取. 一 . 问题的提出 位置 1 表 1 D B F文件的文件参数表长度( B ) 1 船 H F OX ...
- README 文件格式(详细好用)
如何为开发项目编写规范的README文件(windows),此文详解 - 战争热诚 - 博客园
- linux查看执行文件格式,Linux运行dat文件格式
广告 100%的CPU性能,计算能力不会降低!选择最主流的云服务器来满足各种业务需求,有数百种流行的云产品和8888元起价套餐,可帮助行业恢复工作! 在"域名解析列表"中,选择要导 ...
- 【科普】TS文件格式:什么是TS?如何打开,编辑和转换它?
概要 对于TS文件,相信很多人都对它很陌生,它并不像MP4格式那么流行.为了让大家进一步了解TS文件,本文将围绕TS文件格式,详细介绍它的来源.适用范围.打开方式以及如何编辑转换等. 什么是TS文件格 ...
- 关于如何使用C++读取.dbf文件
.dbf文件格式 .dbf文件格式描述可以看这两篇博客: DBF文件格式 shp系列(三) 关于dbf文件格式笔者不再赘述,因为上述两篇博客已经讲的很明白了.这篇文章主要是要讲怎么通过C++来读取任意 ...
- HTML中支持qlv文件格式吗,qlv格式怎么播放,格式工厂不支持qlv
qlv是什么格式文件?qlv是腾讯视频的一种加密格式,大部分转码工具是无法转换的,不过不用担心还是有方法可以将qlv文件转换成其它文件格式的,下面小编就详细的为大家介绍电脑系统中将qlv格式转换成mp ...
- GWAS(1)——文件格式及linux上的转换
目录 数据格式 hapmap vcf plink 数据格式转换 hmp转vcf,再转plink 变异结果vcf格式转换hmp 数据格式 hapmap hapmap格式的介绍网站:https://max ...
- Bowtie2详细文档
文章目录 Introduction How is Bowtie 2 different from Bowtie 1? Bowtie 2 与 Bowtie 1 有何不同? Obtaining Bowti ...
- 数码数字字体_档案数字化技术规范
1 适用范围 为统一公司纸质.照片.音频.视频档案数字化的主要技术要求,推动档案现代化和数字档案馆的建设,特制定本规范. 本规范适用于各单位档案的数字化处理及数字化成果的管理. 2 总则 2.1 基本 ...
最新文章
- BZOJ4566: [Haoi2016]找相同字符
- 使用VC++输出调幅波的数值和波形
- Echarts开源可视化库学习(三)主题的使用
- linux vnc 改端口号,基于Linux中vnc配置端口号的修改方法
- iOS12系统图片heic如何在电脑上查看
- AxureUX中后台管理信息系统通用原型方案
- 阿里笔试7/29 9-10点场
- 对象存储是什么?看过就明白了
- 爆款公众号:如何打造爆款公众号文章?公众号文章如何突破10w+?
- 淘客基地淘客小程序系统更新至1.2.4 版本
- python图片查看器
- 帮蔡徐坤刷出一亿转发,APP开发者一审获刑
- 英语3500词(三)professions主题 (2022.1.15)
- Redmi K30 Pro 标准版更换相机后魔改为变焦版过程
- 大咖说*计算讲谈社|不止能上路,更能做好服务:自动驾驶产品规模化的问题定义
- Flutter 功能最全的JsonToDart工具
- 如何写一份让 HR 眼前一亮的简历(附模板)
- html中<a>标签的安全问题
- JavaScript判断一个数字是否为素数
- Hessian矩阵以及在图像中的应用
热门文章
- HttpWatch工具简介及使用技巧(转)
- java ee与j2ee_JavaEE/J2EE与J2SE/JDK版本的相关性
- 阿根廷公布世界杯23人名单以及点评
- 微信小程序,获取农历日期方法
- seo入门需掌握的基础知识
- console口 - 配置口
- 新一代的核心路由器的发展趋势分析
- MATLAB中怎么表示对数函数及e
- php设置个性域名,利用nginx泛域名解析配置二级域名和多域名,实现二级域名子站,用户个性独立子域名。...
- git错误--ssh: Could not resolve hostname ssh.github.com: Name or service not known--解决方式