dbf文件解析样例

#include <stdio.h>
#include <string.h>
#include <share.h>
#include <conio.h>
//-------------------------------------------------------
typedef struct HeadOfDbf {
unsigned char tab;
unsigned char year;
unsigned char month;
unsigned char day;
unsigned long recnum;
unsigned short offset;
unsigned short reclen;
char  save[20];
} InfoOfDbfHead;


typedef struct HeadOfDbfIndex {
unsigned char fname[11];
unsigned char type;
long addr;
unsigned char width;
unsigned char doc;
char save[14];
} InfoOfDbfIndex;


InfoOfDbfHead      Head;
InfoOfDbfIndex     Index[48];
int offset[48],n;
FILE            *fdbf;
unsigned int    rec,field,fieldnum,i;
char buf[128];
//-------------------------------------------------------


void main(int argc,char *argv[])
{
if (argc==1) {
cprintf("DBF name[.DBF]");
return;
}
strcpy(buf,argv[1]);
strcat(buf,".dbf");
if ((fdbf=_fsopen(buf,"r+b",SH_DENYNO))==NULL)
{
printf("db_open error");
return;
}
fseek(fdbf,0L,SEEK_SET);
fread(&Head,sizeof(InfoOfDbfHead),1,fdbf);
fieldnum=(Head.offset-1)/32-1;


fseek(fdbf,32,SEEK_SET);
n=0;
for(i=0;i<fieldnum;i++) {
offset[i]=n;
fread(&Index[i],sizeof(InfoOfDbfIndex),1,fdbf);
n=n+Index[i].width;
}


for (rec=0;rec<Head.recnum;rec++) {
printf("\n>>");
for (field=0;field<fieldnum;field++) {
fseek(fdbf,(long)(Head.offset+1+rec*(long)Head.reclen+offset[field]),SEEK_SET);
fread(buf,1,Index[field].width,fdbf);
buf[Index[field].width]=0;
printf("%s|",buf);
}
}
fclose(fdbf);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值