如何创建DBF文件

合集下载

创建表空间

创建表空间

创建表空间第一篇:什么是表空间?在Oracle数据库中,表空间是数据库逻辑存储结构的一部分。

它是由一个或多个数据文件组成的逻辑存储单元,用于存储数据库中的表、索引、过程、触发器等对象。

一个表空间中可以包含多个数据文件,这些数据文件可以位于不同的磁盘上。

表空间的组织方式是物理和逻辑分离的,即表空间中的数据文件可以分散在不同的磁盘上,但是逻辑上它们是一个整体。

这种组织方式可以提高数据库的灵活性和可靠性。

在Oracle数据库中,默认情况下会创建一个表空间,这个表空间叫做SYSTEM表空间,它包含了数据库的系统表、系统索引和其他重要的对象。

除了SYSTEM表空间以外,我们还可以创建其他的表空间来存储用户表、索引、LOB数据等。

第二篇:创建表空间的步骤在Oracle数据库中,我们可以使用CREATE TABLESPACE语句来创建表空间。

下面是创建表空间的步骤:1. 打开SQL*Plus或者其他的Oracle命令行工具。

2. 以系统管理员的身份登录数据库。

3. 执行CREATE TABLESPACE语句。

语法如下:CREATE TABLESPACE tablespace_nameDATAFILE 'file_name' SIZE size[ AUTOEXTEND { ON | OFF } ] [ MAXSIZE max_size ][ LOGGING | NOLOGGING ][ ONLINE | OFFLINE ]其中,tablespace_name是要创建的表空间的名称,file_name是要创建的数据文件的名称,size是数据文件的大小,AUTOEXTEND参数指定数据文件是否可以自动扩展,MAXSIZE参数指定数据文件的最大大小,LOGGING参数指定是否将表空间的操作日志记录到日志文件中,ONLINE参数指定是否将表空间置为联机状态,OFFLINE参数指定是否将表空间置为脱机状态。

DBF文件结构中文说明

DBF文件结构中文说明

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

1)文件的文件头其中文件头部分的长度是不定长的,它主要对DBF文件作了一些总体说明(表),其中最主要的是对这个DBF文件的记录项的信息进行了详细地描述,比如对每个记录项的名称、数据类型、长度等信息都有具体的说明。

2)文件的实体信息实体信息部分就是一条条记录,每条记录都是由若干个记录项构成,因此只要依次循环读取每条记录就可以了。

3)一个读取dbf文件的例子假设要读取一个名为soil的dbf文件(存储了土地利用信息),它含有8个记录项, 记录项信息如表所示:2、行情文件格式 说明:(1)、表文件由头记录及数据记录组成。

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

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

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

(2) 、头记录以终止符(OxOD )结束,数据记录以终止符( (3) 、表文件中存储整数时低位字节在前。

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

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

名的各字段的数据。

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

0x1A )结束。

ASCII 空格(0x20),则表示该记录 在删除标记之后是字段记录中所命32 - n 字段子记录字段的数目决定了字段子记录的数目。

字段记录结构(32字节)F面是读取这个dbf文件的代码:void On ReadDbf(CStri ng Dbf)fread(&RecordByteNum, sizeof(short), 1,m_Dbf);FILE* m_Dbf;〃****Dbf 文件指针II 打开dbf 文件if((m_Dbf(Dbf,"rb"))==NULL) {return;} int i,j;//////**** 读取dbf 文件的文件头 开始BYTE versio n; fread(&versio n,1,1,m_Dbf); BYTE date[3]; for(i=0;i<3;i++) {fread(date+i,}fread(&HeaderByteNum, sizeof(short), 1,m_Dbf);short RecordByteNumint RecordNum; fread(&RecordNum, short HeaderByteNum;//****** sizeof( int),1, i_Dbf);1, 1,m_Dbf);short Reservedl;1,m_Dbf); Dbf);_Dbf);m_Dbf); fread(&Reserved1,BYTE Flag4s;fread(&F lag4s,BYTE En crypteFlag;fread(&EncrypteFlag,sizeof(short), 1,m_Dbf);sizeof(BYTE),sizeof(BYTE), 1,m_for(i=0;i<3;i++){fread(&Unu sed,}BYTE MDXFlag;fread(&MDXFIag, sizeof(BYTE), 1,mBYTE LDriID;fread(&LDrilD,short Reserved2;fread(&Reserved2, sizeof(short), 1,m_Dbf);BYTE n ame[11];sizeof( in t), 1,mi_Dbf);sizeof(BYTE), 1, BYTE fieldType;int Reserved3; fread(&decimalCou nt,sizeof(BYTE), 1,m_Dbf); IIReserved4——2 bytesBYTE fieldLength; BYTE decimalCou nt; short Reserved4; BYTE workID; short Reserved5[5]; BYTE mDXFIag1; int fieldsco unt;fieldscount = (HeaderByteNum - 32) / 32;II 读取记录项信息-共有8个记录项 for(i=0;i<HeaderByteNum;i++) {IIFieldName ——11 fread( name, IIFieldType ——1 fread( &fieldType, IIReserved3——4 Reserved3fread(&Reserved3, sizeof(i nt), 1,m_Dbf);IIFieldLe ngth--1bytesfread( &fieldLe ngth,sizeof(BYTE), 1,m_Dbf); IIDecimalCou nt-1bytesbytes 11, 1,m_Dbf);bytessizeof(BYTE), 1,m_Dbf);bytes =0;fread(&Reserved4, sizeof(short), 1,m_Dbf);//WorkID ----- 1 bytesfread(&worklD, sizeof(BYTE ),1,m_Dbf);〃Reserved5----10 bytesfor(j=0;j<5;j++){fread(Reserved5+j,sizeof(short),1,m_Dbf);}〃MDXFIag1-----1 bytesfread(&mDXFIag1, sizeof(BYTE),1,m_Dbf);}BYTE termi nator;fread(&termi nator, sizeof(BYTE), 1,m_Dbf);//读取dbf文件头结束double Area,Perimeter,Ce ntroid_y,Ce ntroid_x;int Soils_,Soils_id;CStri ng Soil_code,suit;BYTE deleteFlag;char media[31];//读取dbf文件记录开始fread(&Reserved4, sizeof(short), 1,m_Dbf); for(i=0;i<RecordNum;i++)fread(&deleteFlag,sizeof(BYTE), 1,m_Dbf);1,m_Dbf);// 读取 Area double for(j=0;j<31;j++)fread(media+j, sizeof(char),1,m_Dbf);Area =atof(media);// 读取 Perimeter double for(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_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);1,m_Dbf);Soils_id =atoi(media);// 读取soil_code stringfor(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;// 读取suit stringfor(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_y doublefor(j=0;j<31;j++)strcpy(media+j,"");for(j=0;j<31;j++)fread(media+j, sizeof(char), 1,m_Dbf);Cen troid_y =atof(media);// 读取Centroid_x double for(j=0;j<31;j++)strcpy(media+j,"");for(j=0;j<31;j++)fread(media+j, sizeof(char),Cen troid_x =atof(media);}II读取dbf文件记录结束。

VFP基础教程-数据库的创建和使用

VFP基础教程-数据库的创建和使用

4.1 VFP数据库1. 数据库的基本组成数据库由一个以上相互关联的数据表组成,可以包含一个或多个表、视图、到远程数据源的连接和存储过程。

视图(view):一个保存在数据库中的、由引用一个或多个表、或其他视图的相关数据组成的虚拟表,可以是本地的、远程的或带参数的。

存储过程(stored procedure):是保存在数据库中的一个过程。

该过程能包含一个用户自定义函数中的任何命令和函数。

创建数据库时系统自动生成3个文件:数据库文件: 扩展名为.DBC数据库备注文件: 扩展名为.DCT数据库索引文件: 扩展名为.DCX2. 数据库的设计过程1)明确建立数据库的目的和使用方式2)设计所需的数据表(包括表结构和表记录)3)建立表之间的关系4)改进设计4.2 数据库的创建1. 数据库的创建过程数据库的创建过程中一般会涉及下面一些常用操作:1)创建新表→用表设计器(设置字段属性和表属性)2)添加表→用数据库设计器按钮或数据库菜单3)创建视图→用视图向导、视图设计器4)建立关系→用鼠标将父表的索引拖到子表的相关索引上5)编辑关系→用数据库菜单或快捷菜单→参照完整性生成器6)移去关系→用快捷菜单或按delete键7)修改表→用表设计器8)删除表或视图→用数据库设计器按钮或数据库菜单2. 数据库的新建、打开、关闭(1)新建数据库:从文件菜单中单击新建→在新建对话框中选择数据库并单击新文件→在创建对话框中给出库文件名和保存位置→在数据库设计器中建立所需的数据库。

或从命令窗口中输入命令:create database 数据库名(2)打开数据库:从文件菜单中单击打开→在打开对话框中给出库文件名和保存位置并确定之。

或从命令窗口中输入命令:open database 数据库名(3)关闭数据库:从命令窗口中输入命令:close database&& 关闭当前数据库或close all&& 关闭所有被打开的数据库注意:1) 关闭了数据库表不等于关闭了数据库,但关闭了数据库则其中的数据表被同时关闭;2) 用鼠标关闭了数据库设计器窗口并不能代表关闭数据库。

EXCEL转换成DBF文件方法

EXCEL转换成DBF文件方法

EXCEL转换成DBF文件方法前提
1.安装OFFICE的EXCEL软件
2.安装OFFICE 的ACCESS软件
这个两个软office软件中都有。

步骤
我的操作都是office2010下完成的
1.【新建】一个【Microsoft Access数据库】,名称随便定义;
2.双击打开,进入【创建】面板,然后单击表;
3.下方就会新建一个【表1】:
4.右键单击【表1】,选择导入【EXCEL】;
5.选择要导入的EXCEL,选择第一个;
6.点击浏览,找到要导入的EXCEL,并确定;
7.点击【确定】,进入下图;
8.点击【下一步】,进入下图,选择;
9.点击【下一步】,进入下图;
10.点击【下一步】,进入下图,主键自己指定,就是每行记录的唯一标识;
11.点击【下一步】,进入下图,表名自己定义,
12.点击【完成】,进入下图;
13.点击【关闭】,完成导入,右键选择左边刚新建的表【管技346级成绩】,选择【导出】
-》dBASE文件,如下图;
14.单击,进入下图;
选择【确定】,完成dbf文件生成。

定文件生成位置。

visual foxpro 格式的 dbf

visual foxpro 格式的 dbf

visual foxpro 格式的dbfVisual FoxPro(VFP)是一种数据库管理系统,而DBF是VFP所使用的数据库文件格式。

使用VFP,用户可以创建、修改和查询DBF文件中的数据。

如果你想在VFP中打开或编辑DBF文件,你可以按照以下步骤操作:1.打开Visual FoxPro软件。

2.在菜单栏中点击“文件”选择“打开”选项。

3.在打开的窗口中,找到你的DBF文件存放位置,选择该文件,然后点击“打开”。

4.在VFP中,你可以查看、编辑和修改DBF文件中的数据。

5.当你完成对DBF文件的操作后,你可以选择“文件”菜单中的“关闭”选项来关闭文件。

另外,如果你想要在其他软件中打开DBF文件,你可能需要使用一种支持DBF格式的数据库软件或转换工具,如dBASE或DBF Viewer Plus等。

当然可以。

以下是更多关于DBF文件的操作步骤:1.打开文件:首先,你需要在Visual FoxPro中打开DBF文件。

你可以通过选择“文件”菜单,然后选择“打开”,之后在文件类型中选择“DBF Files (*.dbf)”,并找到你想要打开的DBF文件。

2.查看和编辑数据:一旦文件被打开,你就可以在VFP的表浏览器中查看数据。

你也可以使用各种工具和选项来编辑数据,如添加、删除或修改记录。

3.创建新的DBF文件:如果你想创建一个新的DBF文件,你可以选择“文件”菜单中的“新建”选项,然后选择“表”来创建一个新的DBF文件。

在创建过程中,你可以设置字段名、数据类型等属性。

4.导入和导出数据:VFP提供了强大的数据导入和导出功能。

你可以将DBF文件与其他格式的文件(如Excel、CSV等)进行转换。

5.创建查询和报告:VFP允许你创建复杂的查询来检索DBF文件中的数据,并生成报告。

6.设置索引和关系:为了提高数据检索的速度,你可以为DBF文件中的字段创建索引。

此外,VFP 还支持设置表之间的关系,以实现数据的参照完整性。

数据库VF教程

数据库VF教程

实验一 VFP数据表基本操作1、数据表的建立和数据的输入一、实验目的1、了解数据表的基本概念2、掌握数据表的建立2、掌握数据表中数据的添加3、掌握从其他数据表中添加数据二、实验内容及任务1、将所附带的VFPEX文件夹及该文件夹中的所有文件复制到C盘根目录下。

2、在文件夹VFPEX创建数据表XS.DBF,表结构如下:3、在创建表的同时,输入如下的记录:4、向数据表添加记录:5、从数据表XS1.DBF中成批添加数据到数据表XS.DBF中。

三、实验环境和实验材料1、Visual FoxPro 6.0中文版;2、素材软盘四、实验方法和步骤1、复制实验所需文件双击“我的电脑”,打开窗口,双击A驱动器,窗口中显示A盘中的内容,鼠标右击VFPEX文件夹,显示快捷菜单,选择“复制”命令;打开C盘根目录并右击,显示快捷菜单,选择“粘贴”命令,软盘中的VFPEX文件夹及其文件被复制到C盘根目录中。

2、创建数据表并输入数据1)进入Visual FoxPro 6.0环境。

2)选择“文件/新建”命令,显示“新建”对话框,如图1-1,选择“表”并单击“新建文件”,显示创建对话框,如图1- 2,“保存在”选择“VFPEX文件夹”,“输入表名”为“XS.DBF”,单击“保存”,显示表设计器,如图1-3。

图1-1 图1-23)按要求输入相关的字段名、字段类型、字段宽度等内容,具体如图1-3。

图 1-34)单击“确定”,显示“现在输入数据吗?”确认框,如图1-4,单击“是”,显示数据表窗口,如图1-5,将上述三条记录依次输入到数据表中,并关闭窗口。

图1-4图1-53、向数据表添加记录1)选择“文件/打开”命令,显示打开对话框,如图1-6,在“查找范围”中选择“VFPEX文件夹”,“文件类型”中选择“表(*.dbf )”,双击XS.DBF 数据表,打开数据表。

图1-62)选择“显示/浏览”命令,显示数据表窗口,如图1-5。

3)选择“表/追加新记录”命令,在数据表窗口中添加新的空记录,将上述记录添加到数据表,并关闭数据表4、从其他数据表添加数据到当前数据表1)打开数据表XS.DBF,并显示数据表窗口,如图1-5。

DBF文件如何打开 DBF文件怎么创建

DBF文件如何打开 DBF文件怎么创建

DBF文件是什么类型的文件格式?DBF文件如何打开?DBF文件如何创建?DBF文件是数据库存储的标准格式,就像PS软件有自己的格式,图片的格式有好多,如JPG、PNG 等。

DBF文件格式比较少见,毕竟数据库格式是专业方面的。

下面来看看什么是DBF文件,以及DBF文件打开和创建图文教程。

dbf是什么文件?DBF文件是一种数据库格式文件,Foxbase,Dbase,Visual FoxPro等数据库处理系统会运用到dbf格式文件,dbf格式数据库是常用的桌面型数据库。

作为一个在商业应用中的结构化数据存储标准格式,dbf格式文件得以广泛的应用于各类企业及事业单位用于数据交换。

DBF文件怎么打开?大部分的普通用户因为没有接触过数据库,自然对于dbf格式感到陌生。

要打开dbf格式文件,可以使用专门的DBF表查看器,像是DBFViewerPlus、sdbf、DataBaseBrowser数据库浏览器等,可以用于查看和编辑DBF文件。

可以搜索和筛选的字段值。

另外,office里的excel和access都可以打开DBF文件。

1、DBFViewerPlus,DBF表查看器,查看和编辑DBF文件。

可以搜索和筛选的字段值。

DBF查看器加是同为编辑和搜索的一些附加功能的便携式DBF表查看器。

2、sdbf(DBF文件查看器)DBF文件查看器是一款用户友好且直观的应用程序,可以轻松地打开和读取DBF文件,以及对其进行编辑或创建新的DBF文件。

DBF文件查看器能方便用户使用,旨在为您提供打开和使用数据库文件,而无需在您的系统上安装任何其他程序的手段。

若要使用该应用程序,没有必要安装它,由于其可移植性功能。

只是,可以解压缩存档和启动Sdbf。

它的接口是很基本的不起眼,但是可以管理,成功地完成其工作。

3、是数据库资料查询浏览的工具软件,可以查询数据库数据内容,也可以查询数据库的结构信息,包括数据库信息,表结构、索引、主键的信息,并且可以查询数据库查询及视图信息。

DBF3.1.0.52导入导出Excel格式

DBF3.1.0.52导入导出Excel格式

二、应用:
(一)打开dbf文件:Open
(二)增加记录(Depend):把光标放到最后一行,单击,在增加的记录里,最少输入一个字段的文字,否则增加的记录无效。

如下图:
(三)删除记录:分两步:第一步是将要删除的记录做标记,第二步是将做了删除的记录彻底删除。

1、将要删除的记录做标记:
1)选中要删除记录的行,然后单击:
2、将做了删除的记录彻底删除:Edit-Pack Table(装表)
弹出确认对话框:
单击:Yes,记录被彻底删除:
(四)dbf文件换名存盘
(五)字段的查询与修改
File-Structure :字段名,字段类型,宽度,小数,零
(六)导出Excel可以识别的类型:【导出Excel】
1)单击:
2)选择”保存类型“
3)输入文件名,等待导出,成功。

【编辑导出的Excel文件】
1、将之前用Excel编辑好的数据复制进来。

这是导出的EXCEL打开后的样子:
2、把数据复制进来,粘贴数值。

3、关键是把数字列全部加‘号,(变文本格式)
保存后,另存为CSV格式:
提示逗号分隔,是,成功保存为SCV格式。

(七)导入SCV格式:
1、单击:
2、选择:刚才保存SCV文件:
这是提示SCV编辑窗口没有关闭,
我们关闭EXCEL,再次导入,这是因为分隔符为分号”;“
我们选择逗号:”,“,在预览窗口中看到要导入的数据完全正确
下一步:
Important:
成功导入!
删除不要的记录。

DBF文件格式详细说明及程序设计

DBF文件格式详细说明及程序设计

DBF文件格式详细说明及程序设计三峡大学水利与环境学院肖泽云1 DBF文件格式说明DBF文件是一种以二进制进行存储的表格数据文件,其文件内部有着严格的格式要求,具体由文件头和记录项组成。

其中文件头中包括字段的相关信息。

DBF注意,在表格记录数据中每行数据具体占多长字节,这个由文件头中定义的字段数目以及字段长度来决定,如果该文件一共只有两个字段,其中第一个字段为数值,其长度为4,第二个字段为字符串,长度为50,则每一行数据占的字节长度为4+50=54,在读取数据时也是读取前4个为第一个字段对应的值,读取第5-54个为第二个字段对应的值。

另外,为便于理解表格与下面内容的关系,特说明字段即是指表格中的列,记录指表格中的行数据,DBF按行数据方式来存储,即在文件头中定义了列数、列的名称、列的数据类型、列长度等等,然后在后面的记录数据中插入每行数据。

每个字段定义格式如下表,每个字段定义都用32个字节来完成:2 DBF文件数据结构实例分析下面以一个具体实例来分析DBF数据结构:该表格数据为:列1 列21 22 43 64 85 106 127 148 169 1810 20用UltraEdit打开该dbf文件,其内容如下:现在先分解一下,找出文件头,并分析一下文件头的内容。

首先看第一个字节,值为03,这个是16进制的数据,第一个字节表示数据库类型,值03即0x03,对应FoxBASE+/Dbase III plus,。

然后看第4个字节到第7个字节,这一段表示文件中的记录条数,即表格的行数,其Byte值为0A 00 00 00,转换成Int32即为10,即表格的行数为10。

关于Byte数组转换成数值类型,其代码如下:/// <summary>/// 将字节组转换成为整型/// </summary>/// <param name="tempBytes">字节数组</param>/// <returns></returns>public static Int32 ConvertBytesToInt32(byte[] tempBytes){Int32 result = System.BitConverter.ToInt32(tempBytes, 0); return result;}接着看第8个和第9字节,其值为61 00,转换成Int16其值即为97,意思就是说文件头所占字节长度为97,所以文件头的范围就是下面红色框内:蓝色框为左边红色框对应的值,这个仅供参考。

shp系列(六)——利用C++进行Dbf文件的写(创建)

shp系列(六)——利用C++进行Dbf文件的写(创建)

shp系列(六)——利⽤C++进⾏Dbf⽂件的写(创建)上⼀篇介绍了shp⽂件的创建,接下来介绍dbf的创建。

推荐结合读取dbf的博客⼀起看!推荐结合读取dbf的博客⼀起看!推荐结合读取dbf的博客⼀起看!1.Dbf头⽂件的创建Dbf头⽂件的结构如下:记录项数组说明:字段类型说明:关于每项的具体含义参照读取dbf⽂件的解释,这⾥重点解释⼏项:HeaderByteNum指dbf头⽂件的字节数,数值不⽤除于2,具体为:从version到Reserved2(共32) + n个字段 * 每⼀个字段长度 32 + terminator。

RecordByteNum指每条记录的字节数,数值不⽤除于2,RecordByteNum根据记录的实际长度来写,具体为:∑每个字段的字节数(字段数量根据读取打开shp的字段数决定)。

例如我的例⼦中写了⼋个字段,则⼀条记录的实际长度为:1(deleteFlag) + 10 + 32 + 16 + 10 + 10 + 8 + 19 + 19 = 1 + 124 =125。

2.Dbf记录实体的创建记录实体就是每条记录,⼀个记录有多个字段,部分字段上存储必要的信息。

由于实际上每个shp⽂件的表的字段数可能不⼀样,并且每个字段的类型不固定,需要每次判定字段类型,然后根据不同类型设置来输出信息。

但是这费时费⼒,根据实际情况,简化⼀下,读取已知字段数和字段类型的DBF的信息,或者说,根据实际需要的字段数和字段类型来输出,牺牲普遍性来获取快速结果,以后修改也不困难。

3.创建Dbf的代码void WriteDbf(CString filename){//创建与Shp⽂件同名的指针int n = filename.ReverseFind('.');filename = filename.Left(n);filename = filename + ".dbf";FILE* m_DbfFile_fp;if ((m_DbfFile_fp = fopen(filename, "wb")) == NULL)return;//****创建dbf⽂件的⽂件头int i, j;BYTE version = 4;fwrite(&version, 1, 1, m_DbfFile_fp);CTime t = CTime::GetCurrentTime();int d = t.GetDay();int y = t.GetYear() % 2000;int m = t.GetMonth();BYTE date[3];date[0] = y;date[1] = m;date[2] = d;for (i = 0; i<3; i++) //记录时间fwrite(date + i, 1, 1, m_DbfFile_fp);int RecordNum = map->layer->objects.size(); //⽂件中的记录条数fwrite(&RecordNum, sizeof(int), 1, m_DbfFile_fp);short HeaderByteNum = 0; //⽂件头中的字节数,暂时写0,后⾯要返回来修改fwrite(&HeaderByteNum, sizeof(short), 1, m_DbfFile_fp);short RecordByteNum = 0; //⼀条记录中的字节长度,暂时写0,后⾯要返回来修改fwrite(&RecordByteNum, sizeof(short), 1, m_DbfFile_fp);short Reserved1 = 0;fwrite(&Reserved1, sizeof(short), 1, m_DbfFile_fp);BYTE Flag4s = 0;fwrite(&Flag4s, sizeof(BYTE), 1, m_DbfFile_fp);BYTE EncrypteFlag = 0;fwrite(&EncrypteFlag, sizeof(BYTE), 1, m_DbfFile_fp);int Unused[3] = { 0,0,0 };for (i = 0; i<3; i++)fwrite(Unused + i, sizeof(int), 1, m_DbfFile_fp);BYTE MDXFlag = 0;fwrite(&MDXFlag, sizeof(BYTE), 1, m_DbfFile_fp);BYTE LDriID = 0;fwrite(&LDriID, sizeof(BYTE), 1, m_DbfFile_fp);short Reserved2 = 0;fwrite(&Reserved2, sizeof(short), 1, m_DbfFile_fp);//****写记录项数组int fieldscount = fieldscount_final; //字段数量可以根据读取的shp⽂件确定for (i = 0; i< fieldscount; i++){RecordItem recordItem = recordItems[i]; //recordItems是⾃⼰设置的记录项数组(字段)的数组,//根据需求设定每个记录项数组(字段)的参数,以供调⽤//****name--------11 bytesfwrite(, 11, 1, m_DbfFile_fp);//****FieldType----1 bytesfwrite(&(recordItem.fieldType), sizeof(BYTE), 1, m_DbfFile_fp);//****Reserved3----4 bytesfwrite(&(recordItem.Reserved3), sizeof(int), 1, m_DbfFile_fp);//****FieldLength--1 bytesfwrite(&(recordItem.fieldLength), sizeof(BYTE), 1, m_DbfFile_fp);//****DecimalCount-1 bytesfwrite(&(recordItem.decimalCount), sizeof(BYTE), 1, m_DbfFile_fp);//****Reserved4----2 bytesfwrite(&(recordItem.Reserved4), sizeof(short), 1, m_DbfFile_fp);//****WorkID-------1 bytesfwrite(&(recordItem.workID), sizeof(BYTE), 1, m_DbfFile_fp);//****Reserved5----10 bytesfor (j = 0; j<5; j++)fwrite(recordItem.Reserved5 + j, sizeof(short), 1, m_DbfFile_fp);//****MDXFlag1-----1 bytesfwrite(&(recordItem.mDXFlag1), sizeof(BYTE), 1, m_DbfFile_fp);}BYTE terminator = 13; //头⽂件终⽌标识符fwrite(&terminator, sizeof(BYTE), 1, m_DbfFile_fp);fseek(m_DbfFile_fp, 8, SEEK_SET); //转到头⽂件字节数RecordByteNum,开始重写HeaderByteNum = 32 + 32 * fieldscount + 1; //从version到Reserved2(共32) + n个字段 * 每⼀个字段长度 32 + terminator fwrite(&HeaderByteNum, sizeof(short), 1, m_DbfFile_fp);RecordByteNum = 1 + 124; //RecordByteNum根据记录的实际长度来写,∑每个字段的长度// 1 + 10 + 32 + 16 + 10 + 10 + 8 + 19 + 19 = 1 + 124 =125fseek(m_DbfFile_fp, 10, SEEK_SET); //转移每条记录长度RecordByteNumfwrite(&RecordByteNum, sizeof(short), 1, m_DbfFile_fp);fseek(m_DbfFile_fp, 0, SEEK_END);//****写dbf⽂件头结束//****写每条记录BYTE deleteFlag;char media[40];for (i = 1; i <= RecordNum; i++){CGeoPolygon* polygon = (CGeoPolygon*)map->layer->objects[i - 1];deleteFlag = 32; //默认写32fwrite(&deleteFlag, sizeof(BYTE), 1, m_DbfFile_fp); //读取删除标记 1字节//****写 ObjectID intstringstream ss;ss << (i - 1);string str = ss.str();int length = str.length();memset(media, '\0', 40);for (int m = 0; m < 10 - length; m++)media[m] = ' ';for (int c = 10 - length; c < 10; c++)media[c] = str[c - 10 + length];//****写Dest stringmemset(media, '\0', 40);media[0] = '/';for (int c = 1; c <32; c++)media[c] = ' ';for (j = 0; j<32; j++)fwrite(media + j, sizeof(char), 1, m_DbfFile_fp); //--32 //****写Ec stringfor (j = 0; j<16; j++)fwrite(media + j, sizeof(char), 1, m_DbfFile_fp); //--16 //****写EcRm intss << -8888;str = ss.str();length = str.length();memset(media, '\0', 40);for (int m = 0; m < 10 - length; m++)media[m] = ' ';for (int c = 10 - length; c < 10; c++)media[c] = str[c - 10 + length];for (j = 0; j<10; j++)fwrite(media + j, sizeof(char), 1, m_DbfFile_fp); //--10 //****写Elevt intfor (j = 0; j<10; j++)fwrite(media + j, sizeof(char), 1, m_DbfFile_fp); //--10 //****写Cc intstr = polygon->objectAttribute;memset(media, '\0', 40);length = str.length();for (int c = 0; c < length; c++)media[c] = str[c];for (int c = length; c < 8; c++)media[c] = ' ';for (j = 0; j<8; j++)fwrite(media + j, sizeof(char), 1, m_DbfFile_fp); //--8 //****写shape_length doubleCString str1;double shape_length = polygon->getAllLength();str1.Format(_T("%.11e"), shape_length);memset(media, '\0', 40);media[0] = ' ';for (int c = 1; c < 16; c++)media[c] = str1[c - 1];if (str1.GetLength() == 18)for (int c = 16; c < 19; c++)media[c] = str1[c - 1];else {media[16] = '0';media[17] = str1[15];media[18] = str1[16];}//*(media + length ) = '\0';for (j = 0; j<19; j++)fwrite(media + j, sizeof(char), 1, m_DbfFile_fp); //--19 //****写shape_Area doubledouble shape_area = polygon->shapeArea;str1.Format(_T("%.11e"), shape_area);memset(media, '\0', 40);media[0] = ' ';for (int c = 1; c < 16; c++)media[c] = str1[c - 1];if (str1.GetLength() == 18)for (int c = 16; c < 19; c++)media[c] = str1[c - 1];else {media[16] = '0';media[17] = str1[15];media[18] = str1[16];}}//****写dbf⽂件记录结束fclose(m_DbfFile_fp);}下⼀篇将介绍Shx的创建。

DBF详解

DBF详解

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

…………DBF文件的结构1)文件的文件头其中文件头部分的长度是不定长的,它主要对DBF文件作了一些总体说明(表),其中最主要的是对这个DBF文件的记录项的信息进行了详细地描述,比如对每个记录项的名称、数据类型、长度等信息都有具体的说明。

文件(.dbf)的文件头记录项信息描述表2.9 dbf文件中的数据类型2)文件的实体信息实体信息部分就是一条条记录,每条记录都是由若干个记录项构成,因此只要依次循环读取每条记录就可以了。

3)一个读取dbf文件的例子假设要读取一个名为soil的dbf文件(存储了土地利用信息),它含有8个记录项,记录项信息如表所示:dbf文件中的数据类型下面是读取这个dbf文件的代码:void OnReadDbf(CString DbfFileName){FILE* m_DbfFile_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 date[3];for(i=0;i<3;i++){fread(date+i, 1, 1,m_DbfFile_fp);}int RecordNum; //******fread(&RecordNum, sizeof(int), 1,m_DbfFile_fp);short HeaderByteNum;fread(&HeaderByteNum, sizeof(short), 1,m_DbfFile_fp);short RecordByteNumfread(&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, sizeof(BYTE), 1,m_DbfFile_fp);for(i=0;i<3;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 name[11];BYTE fieldType;int Reserved3;BYTE fieldLength;BYTE decimalCount;short Reserved4;BYTE workID;short Reserved5[5];BYTE mDXFlag1;int fieldscount;fieldscount = (HeaderByteNum - 32) / 32;//读取记录项信息-共有8个记录项for(i=0;i< HeaderByteNum;i++){//FieldName----11 bytesfread(name, 11, 1,m_DbfFile_fp);//FieldType----1 bytesfread(&fieldType, sizeof(BYTE), 1,m_DbfFile_fp);//Reserved3----4 bytesReserved3 =0;fread(&Reserved3, sizeof(int), 1,m_DbfFile_fp);//FieldLength--1 bytesfread(&fieldLength,sizeof(BYTE), 1,m_DbfFile_fp);//DecimalCount-1 bytesfread(&decimalCount,sizeof(BYTE), 1,m_DbfFile_fp);//Reserved4----2 bytesReserved4 =0;fread(&Reserved4, sizeof(short), 1,m_DbfFile_fp);//WorkID-------1 bytesfread(&workID, sizeof(BYTE), 1,m_DbfFile_fp); //Reserved5----10 bytesfor(j=0;j<5;j++){fread(Reserved5+j,sizeof(short), 1,m_DbfFile_fp); }//MDXFlag1-----1 bytesfread(&mDXFlag1, sizeof(BYTE), 1,m_DbfFile_fp);}BYTE terminator;fread(&terminator, sizeof(BYTE), 1,m_DbfFile_fp);//读取dbf文件头结束double Area,Perimeter,Centroid_y,Centroid_x;int Soils_,Soils_id;CString Soil_code,suit;BYTE deleteFlag;char media[31];//读取dbf文件记录开始for(i=0;i<RecordNum;i++){fread(&deleteFlag, sizeof(BYTE), 1,m_DbfFile_fp); //读取 Area doublefor(j=0;j<31;j++)fread(media+j, sizeof(char), 1,m_DbfFile_fp); Area =atof(media);//读取 Perimeter doublefor(j=0;j<31;j++)fread(media+j, sizeof(char), 1,m_DbfFile_fp); Perimeter =atof(media);//读取 soils_ intfor(j=0;j<31;j++)strcpy(media+j,"");for(j=0;j<11;j++)fread(media+j, sizeof(char), 1,m_DbfFile_fp); Soils_ =atoi(media);//读取 Soils_id intfor(j=0;j<31;j++)strcpy(media+j,"");for(j=0;j<11;j++)Soils_id =atoi(media);//读取 soil_code stringfor(j=0;j<31;j++)strcpy(media+j,"");for(j=0;j<3;j++)fread(media+j, sizeof(char), 1,m_DbfFile_fp); Soil_code =media;//读取 suit stringfor(j=0;j<31;j++)strcpy(media+j,"");for(j=0;j<1;j++)fread(media+j, sizeof(char), 1,m_DbfFile_fp); suit =media;//读取 Centroid_y doublefor(j=0;j<31;j++)strcpy(media+j,"");for(j=0;j<31;j++)fread(media+j, sizeof(char), 1,m_DbfFile_fp); Centroid_y =atof(media);//读取 Centroid_x doublefor(j=0;j<31;j++)strcpy(media+j,"");for(j=0;j<31;j++)Centroid_x =atof(media); }//读取dbf文件记录结束}。

创建数据库和数据库文件

创建数据库和数据库文件

如果用户不再需要某一数据库时,只要满足一定的条 件即可将其删除,删除之后,相应的数据库文件及其数据 都会被删除,并且不可恢复。
删除数据库时必须满足以下条件: (1)如果数据库涉及日志传送操作,在删除 数据库之前必须取消日志传送操作。
(2)若要删除为事务复制发布的数据库,或删除为合 并复制发布或订阅的数据库,必须首先从数据库中删除复 制。 如果数据库已损坏,不能删除复制,可以先将数据库 设置为脱机状态,然后再删除数据库。
主数据文件辅助数据文件事务日志文件创建数据库的参数数据库文件包括主文件辅助文件和事务日志文件数据库大小的选项文件增长model数据库主文件辅助文件事务日志事务日志数据页被写入缓冲区缓存数据页被写入缓冲区缓存22修改被记录在磁盘上的事务日志中修改被记录在磁盘上的事务日志中33检查点将已完成的事务写入到数据库中检查点将已完成的事务写入到数据库中44应用程序发出数据修改操作应用程序发出数据修改操作11提示
|REMOVE FILEGROUP filegroup_name
|MODIFY FILE<filespec> |MODIFY NAME=new_dbname |MODIFY FILEGROUP filegroup_name{filegroup_property|NAME=new_filegroup_name} |SET<optionspec>[,…n][WITH<termination>] |COLLATE<collation_name> }
创建数据库和数据库文件
数据库结构介绍 使用Transact-SQL创建数据库和文件
2.1数据库的文件组成
数据库通常可以由三类文件组成。 主数据文件:默认扩展名为*.mdf

如何创建DBF文件

如何创建DBF文件

如何创建DBF⽂件本例要实现的是如何创建⼀个单独的DBF⽂件。

l 要点⾸先设定DBF⽂件的字段个数,再创建新的IField对象,⽣成新字段,设置其属性,再加⼊到IFields对象中,最后⽤IFeatureWorkspace.CreateTable⽅法创建⼀个新的DBF⽂件并返回ITable对象。

主要⽤到IField接⼝,IFieldEdit接⼝,IFields接⼝,IFieldsEdit接⼝。

l 程序说明函数CreateDBF根据输⼊的路径和⽂件名创建⼀个DBF⽂件并返回⼀个ITable对象。

l 代码Private Function CreateDBF (sFilePath As String, sFileName As String) AsITable'createDBF: simple function to create a DBASE file.'note: the name of the DBASE file should not contain the .dbf extensionOn Error GoTo ErrorHandler:Dim pFeatureWorkspace As IFeatureWorkspaceDim pWorkspaceFactory As IWorkspaceFactoryDim FileFolder As New Scripting.FileSystemObjectDim pFieldsEdit As esriCore.IFieldsEditDim pFieldEdit As esriCore.IFieldEditDim pFields As IFieldsDim pField As IFieldDim sDir As String'Open the WorkspaceSet pWorkspaceFactory = New ShapefileWorkspaceFactoryIf Not FileFolder.FolderExists(sFilePath) ThenMsgBox "路径不存在" & vbCr & sFilePathExit FunctionEnd IfsDir = Dir(sFilePath & sFileName & ".dbf")If (sDir <> "") ThenMsgBox ("⽂件已存在")Exit FunctionEnd IfSet pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(sFilePath,0)'if a fields collection is not passed in then create one'create the fields used by our objectSet pFields = New esriCore.FieldsSet pFieldsEdit = pFieldspFieldsEdit.FieldCount = 6pFieldsEdit.FieldCount = 6'Create text FieldsSet pField = New FieldSet pFieldEdit = pFieldWith pFieldEdit.Name = "SmallInteger".Type = esriFieldTypeSmallInteger End WithSet pFieldsEdit.Field(0) = pFieldSet pField = New FieldSet pFieldEdit = pFieldWith pFieldEdit.Name = "Integer".Type = esriFieldTypeIntegerEnd WithSet pFieldsEdit.Field(1) = pFieldSet pField = New FieldSet pFieldEdit = pFieldWith pFieldEdit.Name = "Single".Type = esriFieldTypeSingleEnd WithSet pFieldsEdit.Field(2) = pFieldSet pField = New FieldSet pFieldEdit = pFieldWith pFieldEdit.Precision = 5.Scale = 5.Name = "Double".Type = esriFieldTypeDoubleEnd WithSet pFieldsEdit.Field(3) = pFieldSet pField = New FieldSet pFieldEdit = pFieldWith pFieldEdit.Length = 30.Name = "String".Type = esriFieldTypeStringEnd WithSet pFieldsEdit.Field(4) = pFieldSet pField = New FieldSet pFieldEdit = pFieldWith pFieldEdit.Name = "Date".Type = esriFieldTypeDateEnd WithSet pFieldsEdit.Field(5) = pFieldSet createDBF = pFeatureWorkspace.CreateTable(sFileName, pFields, Nothing, Nothing, "")sDir = Dir(sFilePath & sFileName & ".dbf")If (sDir <> "") ThenMsgBox ("Build Success")ElseMsgBox ("Build Fail")End IfExit FunctionErrorHandler:MsgBox Err.DescriptionEnd FunctionPrivate Sub UIButtonControl1_Click()Dim pVBProject As VBProjectDim pTable As ITableOn Error GoTo ErrorHandler:Set pVBProject = ThisDocument.VBProject'Dont include .dbf extensionSet pTable = CreateDBF (pVBProject.FileName & "\..\..\..\.." & "\data\", "MyDBFFile")Exit SubErrorHandler:MsgBox Err.DescriptionEnd Sub。

java解析dbf之通过javadbf包生成和读取dbf文件

java解析dbf之通过javadbf包生成和读取dbf文件

java解析dbf之通过javadbf包⽣成和读取dbf⽂件以下是简单⽰例复制代码代码如下:package com.cramc;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import com.linuxense.javadbf.DBFException;import com.linuxense.javadbf.DBFField;import com.linuxense.javadbf.DBFReader;import com.linuxense.javadbf.DBFWriter;public class Rwdbf {public static void readDBF(String path){InputStream fis = null;try{//读取⽂件的输⼊流fis = new FileInputStream(path);//根据输⼊流初始化⼀个DBFReader实例,⽤来读取DBF⽂件信息DBFReader reader = new DBFReader(fis);//调⽤DBFReader对实例⽅法得到path⽂件中字段的个数int fieldsCount = reader.getFieldCount();System.out.println("字段数:"+fieldsCount);//取出字段信息for( int i=0; i<fieldsCount; i++){DBFField field = reader.getField(i);System.out.println(field.getName());}Object[] rowValues;//⼀条条取出path⽂件中记录while((rowValues = reader.nextRecord()) != null){for( int i=0; i<rowValues.length; i++){System.out.println(rowValues[i]);}}}catch(Exception e){e.printStackTrace();}finally{try{fis.close();}catch(Exception e){}}}public static void writeDBF(String path){OutputStream fos = null;try{//定义DBF⽂件字段DBFField[] fields = new DBFField[3];//分别定义各个字段信息,setFieldName和setName作⽤相同, //只是setFieldName已经不建议使⽤fields[0] = new DBFField();//fields[0].setFieldName("emp_code");fields[0].setName("semp_code");fields[0].setDataType(DBFField.FIELD_TYPE_C);fields[0].setFieldLength(10);fields[1] = new DBFField();//fields[1].setFieldName("emp_name");fields[1].setName("emp_name");fields[1].setDataType(DBFField.FIELD_TYPE_C);fields[1].setFieldLength(20);fields[2] = new DBFField();//fields[2].setFieldName("salary");fields[2].setName("salary");fields[2].setDataType(DBFField.FIELD_TYPE_N);fields[2].setFieldLength(12);fields[2].setDecimalCount(2);//DBFWriter writer = new DBFWriter(new File(path));//定义DBFWriter实例⽤来写DBF⽂件DBFWriter writer = new DBFWriter();//把字段信息写⼊DBFWriter实例,即定义表结构writer.setFields(fields);//⼀条条的写⼊记录Object[] rowData = new Object[3];rowData[0] = "1000";rowData[1] = "John";rowData[2] = new Double(5000.00);writer.addRecord(rowData);rowData = new Object[3];rowData[0] = "1001";rowData[1] = "Lalit";rowData[2] = new Double(3400.00);writer.addRecord(rowData);rowData = new Object[3];rowData[0] = "1002";rowData[1] = "Rohit";rowData[2] = new Double(7350.00);writer.addRecord(rowData);//定义输出流,并关联的⼀个⽂件fos = new FileOutputStream(path);//写⼊数据writer.write(fos);//writer.write();}catch(Exception e){e.printStackTrace();}finally{try{fos.close();}catch(Exception e){}}}public static void main(String[] args){String path ="E:\\tmp\\2\ x.dbf";try {InputStream fis = new FileInputStream(path);DBFReader reader = new DBFReader(fis);int fieldsCount = reader.getFieldCount();System.out.println("字段数:"+fieldsCount);DBFField[] df = new DBFField[fieldsCount+2];for( int i=0; i<fieldsCount; i++){df[i] = reader.getField(i);System.out.println("field"+i+":"+df[i].getName());}df[fieldsCount] = new DBFField();df[fieldsCount].setName("add1");df[fieldsCount].setDataType(DBFField.FIELD_TYPE_C); df[fieldsCount].setFieldLength(10);df[fieldsCount+1] = new DBFField();df[fieldsCount+1].setName("add2");df[fieldsCount+1].setDataType(DBFField.FIELD_TYPE_C); df[fieldsCount+1].setFieldLength(10);DBFWriter writer = new DBFWriter();writer.setFields(df);Object[] rowValues;Object[] rowValues1 = new Object[fieldsCount+2];//⼀条条取出path⽂件中记录while((rowValues = reader.nextRecord()) != null){for(int i=0;i<fieldsCount;i++){rowValues1[i] = rowValues[i];}rowValues1[fieldsCount]="x";rowValues1[fieldsCount+1]="xx";writer.addRecord(rowValues1);}path ="E:\\tmp\\2\\test2.dbf";OutputStream fos = new FileOutputStream(path);//写⼊数据writer.write(fos);System.out.println("OVER");} catch (FileNotFoundException | DBFException e) {// TODO Auto-generated catch block e.printStackTrace();}}}。

dbf文件格式说明

dbf文件格式说明

dBase是第一个在个人电脑上被广泛使用的单机版数据库系统,在CP/M与DOS的时期,由Ashton-Tate公司所发表。

在1980年,它最初是出现在CP/M的软件,而后被移植到Apple II与IBM PC的DOS上。

在dBase III与dBase III Plus时,成为当时数据库市场的主流,而后其他公司推出功能相近甚至是强化的产品,例如Clipper或FoxPro,它们被称为xBase。

1.DBF文件的整体结构
②DBF文件头中记录项(字段)的详细格式:
③ DBF文件中的数据类型:
举例说明:
假如文件中有10条记录,每个记录有4个字段,4个字段的长度分别为:12、14、16、18,那么文件的详细格式如下:
文件头占32+32*4+2个字节:
前32个字节是文件头中的基本信息,32*4个字节是记录项(即字段的定义信息),最后两个字节分别是16进制的0D 和20,0D代表上文表格中说明的记录项终止标识。

20代表一个空格。

数据信息占(12+14+16+18)*10+1个字节:
12+14+16+18个字节代表一条记录,共10条记录。

最后一个字节是数据的终止表示通常是16进制表示的1A
补充说明:
由于上述文件格式的定义,决定了字段名称不能超过11个字节(或者5个中文字符),字符类型的字段,数据最大不能超过255个字节。

在从文本、Excel、大型数据库导出数据到DBF格式文件时,一定要考虑到这些长度限制。

DBF文件格式详细说明及程序设计

DBF文件格式详细说明及程序设计

DBF文件格式详细说明及程序设计三峡大学水利与环境学院肖泽云1 DBF文件格式说明DBF文件是一种以二进制进行存储的表格数据文件,其文件内部有着严格的格式要求,具体由文件头和记录项组成。

其中文件头中包括字段的相关信息。

DBF注意,在表格记录数据中每行数据具体占多长字节,这个由文件头中定义的字段数目以及字段长度来决定,如果该文件一共只有两个字段,其中第一个字段为数值,其长度为4,第二个字段为字符串,长度为50,则每一行数据占的字节长度为4+50=54,在读取数据时也是读取前4个为第一个字段对应的值,读取第5-54个为第二个字段对应的值。

另外,为便于理解表格与下面内容的关系,特说明字段即是指表格中的列,记录指表格中的行数据,DBF按行数据方式来存储,即在文件头中定义了列数、列的名称、列的数据类型、列长度等等,然后在后面的记录数据中插入每行数据。

每个字段定义格式如下表,每个字段定义都用32个字节来完成:2 DBF文件数据结构实例分析下面以一个具体实例来分析DBF数据结构:该表格数据为:列1 列21 22 43 64 85 106 127 148 169 1810 20用UltraEdit打开该dbf文件,其内容如下:现在先分解一下,找出文件头,并分析一下文件头的内容。

首先看第一个字节,值为03,这个是16进制的数据,第一个字节表示数据库类型,值03即0x03,对应FoxBASE+/Dbase III plus,。

然后看第4个字节到第7个字节,这一段表示文件中的记录条数,即表格的行数,其Byte值为0A 00 00 00,转换成Int32即为10,即表格的行数为10。

关于Byte数组转换成数值类型,其代码如下:/// <summary>/// 将字节组转换成为整型/// </summary>/// <param name="tempBytes">字节数组</param>/// <returns></returns>public static Int32 ConvertBytesToInt32(byte[] tempBytes){Int32 result = System.BitConverter.ToInt32(tempBytes, 0); return result;}接着看第8个和第9字节,其值为61 00,转换成Int16其值即为97,意思就是说文件头所占字节长度为97,所以文件头的范围就是下面红色框内:蓝色框为左边红色框对应的值,这个仅供参考。

dbf字段长度 最大值

dbf字段长度 最大值

dbf字段长度最大值(原创实用版)目录1.DBF 字段长度的概念2.DBF 字段长度的最大值3.如何设置和调整 DBF 字段长度4.DBF 字段长度对数据存储的影响正文一、DBF 字段长度的概念DBF(DOS Based File)是一种基于 DOS 操作系统的文件格式,主要用于存储数据。

在 DBF 文件中,数据被组织成若干个字段,每个字段都有其特定的数据类型和长度。

字段长度是指一个字段可以存储的最大字符数量。

二、DBF 字段长度的最大值在 DBF 文件中,每个字段的长度都有一个最大值限制。

这个最大值取决于所使用的字符集和数据类型。

例如,如果使用 ASCII 字符集,那么一个字符类型的字段最大长度为 255 个字符;如果使用 Unicode 字符集,那么一个字符类型的字段最大长度为 500 个字符。

三、如何设置和调整 DBF 字段长度在创建 DBF 文件时,可以通过指定数据类型和长度来设置字段长度。

如果需要调整现有 DBF 文件中的字段长度,可以使用数据库管理软件或编程语言来实现。

以下是一个简单的 Python 示例,用于调整 CSV 文件(可以转换为 DBF 文件)中的字段长度:```pythonimport csvinput_file = "input.csv"output_file = "output.csv"with open(input_file, "r") as infile, open(output_file, "w", newline="") as outfile:fieldnames = ["name", "age", "city"]writer = csv.DictWriter(outfile, fieldnames=fieldnames) writer.writeheader()for row in csv.DictReader(infile):writer.writerow({"name": row["name"], "age":row["age"], "city": row["city"]})```四、DBF 字段长度对数据存储的影响字段长度对数据存储和处理具有重要影响。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
If (sDir <> "") Then
MsgBox ("Build Success")
Else
MsgBox ("Build Fail")
End If
Exit Function
ErrorHandler:
MsgBox Err.Description
Set pField = New Field
Set pFieldEdit = pField
With pFieldEdit
.Length = 30
.Name = "String"
.Type = esriFieldTypeString
End With
Dim pWorkspaceFactory As IWorkspaceFactory
Dim FileFolder As New Scripting.FileSystemObject
Dim pFieldsEdit As esriCore.IFieldsEdit
Dim pFieldEdit As esriCore.IFieldEdit
.Type = esriFieldTypeSmallInteger
End With
Set pFieldsEdit.Field(0) = pField
Set pField = New Field
Set pFieldEdit = pField
With pFieldEdit
With pFieldEdit
.Precision = 5
.Scale = 5
.Name = "Double"
.Type = esriFieldTypeDouble
End With
Set pFieldsEdit.Field(3) = pField
本例要实现的是如何创建一个单独的DBF文件。
? 要点
首先设定DBF文件的字段个数,再创建新的IField对象,生成新字段,设置其属性,再加入到IFields对象中,最后用IFeatureWorkspace.CreateTable方法创建一个新的DBF文件并返回ITable对象。
主要用到IField接口,IFieldEdit接口,IFields接口,IFieldsEdit接口。
pFieldsEdit.FieldCount = 6
'Create text Fields
Set pField = New Field
Set pFieldEdit = pField
With pFiteger"
With pFieldEdit
.Name = "Single"
.Type = esriFieldTypeSingle
End With
Set pFieldsEdit.Field(2) = pField
Set pField = New Field
Set pFieldEdit = pField
.Name = "Integer"
.Type = esriFieldTypeInteger
End With
Set pFieldsEdit.Field(1) = pField
Set pField = New Field
Set pFieldEdit = pField
If (sDir <> "") Then
MsgBox ("文件已存在")
Exit Function
End If
Set pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(sFilePath, 0)
'note: the name of the DBASE file should not contain the .dbf extension
On Error GoTo ErrorHandler:
Dim pFeatureWorkspace As IFeatureWorkspace
Exit Sub
ErrorHandler:
MsgBox Err.Description
End Sub
Dim pFields As IFields
Dim pField As IField
Dim sDir As String
'Open the Workspace
Set pWorkspaceFactory = New ShapefileWorkspaceFactory
? 程序说明
函数CreateDBF根据输入的路径和文件名创建一个DBF文件并返回一个ITable对象。
? 代码
Private Function CreateDBF (sFilePath As String, sFileName As String) As ITable
'createDBF: simple function to create a DBASE file.
End Function
Private Sub UIButtonControl1_Click()
Dim pVBProject As VBProject
Dim pTable As ITable
On Error GoTo ErrorHandler:
Set pFieldsEdit.Field(4) = pField
Set pField = New Field
Set pFieldEdit = pField
With pFieldEdit
.Name = "Date"
.Type = esriFieldTypeDate
'if a fields collection is not passed in then create one
'create the fields used by our object
Set pFields = New esriCore.Fields
Set pFieldsEdit = pFields
If Not FileFolder.FolderExists(sFilePath) Then
MsgBox "路径不存在" & vbCr & sFilePath
Exit Function
End If
sDir = Dir(sFilePath & sFileName & ".dbf")
End With
Set pFieldsEdit.Field(5) = pField
Set createDBF = pFeatureWorkspace.CreateTable(sFileName, pFields, Nothing, Nothing, "")
sDir = Dir(sFilePath & sFileName & ".dbf")
Set pVBProject = ThisDocument.VBProject
'Dont include .dbf extension
Set pTable = CreateDBF (pVBProject.FileName & "\..\..\..\.." & "\data\", "MyDBFFile")
相关文档
最新文档