首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问怎样用C++读写FOXPRO的DBF文件,多谢

2013-09-09 
请教怎样用C++读写FOXPRO的DBF文件,谢谢希望读取foxpro的DBF文件,然后把内容写到TXTxiexie[解决办法]你得

请教怎样用C++读写FOXPRO的DBF文件,谢谢
希望读取foxpro的DBF文件,然后把内容写到TXT
xiexie
[解决办法]
你得二进制读去DBF文件到内存。

然后按照DBF的文件格式进行解析。

解析出的数据然后转化成字符。。

重新写入到TXT
[解决办法]
仅供参考

#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 int  offset;
    unsigned int  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) {
        cprintf("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);
}

热点排行