⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readdbf.c

📁 推荐刚刚开始学C语言的同志们看下
💻 C
字号:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXFIELDS 40

struct{
	char name[10];
	char type;
	int wide;
	int dec;
}f[MAXFIELDS];

void main(int argc,char *argv[])
{
	char k,year,month,date,fname[12];
	int i,j,n,recnum1,recnum2,reclen,fields;
	long recnum,fheadlen;
	FILE *fp;
	if(argc > 2) exit(0);
	if(argc == 1)
	{
		printf("\n\r请输入要浏览的数据库名(可不包括扩展名):");
		scanf("%12s",fname);
		getchar();

	}
	else strcpy(fname,argv[1]);
	if(strchr(fname,46)==0) strcat(fname,".dbf");
	if((fp = fopen(fname,"rb")) == NULL) exit(0);
	getc(fp);
	year = getc(fp);
	month = getc(fp);
	date = getc(fp);
	recnum1 = getw(fp);
	recnum2 = getw(fp);
	recnum = recnum2*256+recnum1;
	fheadlen = getw(fp);
    reclen = getw(fp);
	fseek(fp,32,0);
	fields = (fheadlen - 33)/32;
	if(fheadlen%32 == 1)/*FOXBASE库结构长度减1为32的倍数*/
		printf("%s是FOXBASE数据库\n",fname);
	else printf("%s是DBASEIII数据库\n",fname);
	printf("最后修改日期:%d年%d月%d日\n",year,month,date);
	printf("记录数:%ld\n库头长:%ld\n",recnum,fheadlen);
	printf("记录长:%d\n字段数:%d\n",reclen,fields);
    printf("\n以下是库结构,按回车键继续:");
	getchar();
	for(i = 1;i <= fields;i ++)
	{
		fread(&f[i].name,10,1,fp);/*字段名*/
		fseek(fp,1,1);
		fread(&f[i].type,1,1,fp);/*类型*/
		fseek(fp,4,1);
		fread(&f[i].wide,1,1,fp);/*宽度*/
		fread(&f[i].dec,1,1,fp);/*小数位*/
		fseek(fp,14,1);
		printf("%s	%c	%d	%d\n",f[i].name,f[i].type,f[i].wide,f[i].dec);
	}
	fseek(fp,fheadlen,0);
	printf("\n以下是各记录的内容,按回车继续!");
	getchar();
	for(i = 1;i <= recnum;i ++)
	{
		printf("#%d:",i);
		getc(fp);
		for(j = 1;j <= fields;j++)
		{
			for(n = 0;n < f[j].wide;n++)
			{
				k = getc(fp);
				printf("%c",k);
			}
			printf(" ");
		}
		printf("\n");

	}
	fclose(fp);
	printf("按回车返回!");
	getchar();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -