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

📄 dbf.c

📁 一个C实现的模拟机 框架 已经有存档 和读挡的功能
💻 C
字号:
#include <stdio.h>
#include <string.h>
#include <process.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;
 argc=2;
 argv[1]="actors.dbf";
 if(argc>2) exit(0);
 if(argc==1){
 printf("\n\t Input the datebase name:");
 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=getc(fp);
 recnum=recnum2*256+recnum1;
 fheadlen=getw(fp);
 reclen=getw(fp);
 fseek(fp,32,0);
 fields=(fheadlen-33)/32;
 if(fheadlen%32==1)
   printf("%s is FOXBASE database \n",fname);
 else printf("%s is DBASEIII database \n",fname);
 printf("date: %d - %d - %d\n",year,month,date);
 printf("recnum: %ld\n headlen: %ld\n",recnum,fheadlen);
 printf("reclen: %d\n fields: %d\n",reclen,fields);
 printf("\n Database structure,press enter to continue....\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("\nRecords,press enter to continue....\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("press enter to return");
  getchar();
}

⌨️ 快捷键说明

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