To acess the dbf database files and maupulate from the c - Insurance Tips

A Hub of Best Guide Health Insurance Tips

Sunday, May 22, 2022

To acess the dbf database files and maupulate from the c

 

Code :

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAXFIELDS 1000 /* maximum nr of fields */

#include<mem.h>

#include<string.h>

 

void main(int argc, char *argv[])

{ char *p,*q,*r,*buf;

  typedef char string11[12];

  FILE *in,*out,*out1;

  int a,i,j,n,field_pos[MAXFIELDS+1],nfield=0,pos,lrec;

  char *record,field_type[MAXFIELDS];

 

 // string11 field_data[500];

 

  string11 field_name[MAXFIELDS];

  struct

  { char  version;    /* dBase version */

    char  datum[3];   /* date of last update YYMMDD */

    long  nrec;       /* nr of records in th database file */

    short nhead;      /* nr of bytes in the header */

    short lrec;       /* nr of bytes in the record */

    char  dum1[2];

    char  transact;   /* flag for incomplete transaction */

    char  encrypt;    /* encryption flag */

    char  mdx;        /* flag for presence of mdx-file */

    char  dum2[3];

  } header;

 

  struct

  { char  name[11];         /* fieldname zero filled */

    char  type;             /* field type (C, D, F, L, M, N) */

    char  dum1[4];

    unsigned char  length;  /* field length in binary */

    char  ndec;             /* field decimal count in binary */

    char  dum2[2];

    char  workid;           /* work area ID */

    char  dum3[11];

    char data[10];

  } field;

 

  switch(argc)

  { case 1:   in=stdin;

                      break;

    case 2:   if ((in = fopen(argv[1],"rb")) == NULL)

                      { fprintf(stderr,"Input file %s not found

",argv[1]);

                                exit(1);

                      }

                      break;

    default:  fprintf(stderr,"Usage: %s dbase_file >

database

",argv[0]);

                      fprintf(stderr,"Or: cat dbase_file | %s >database

",argv[0]);

 

                      exit(1);

  }

  fread(&header,32,1,in);

  n=header.lrec;

  pos=1;

  // a=field_name[3];

  while (n>1)

  { if (nfield==MAXFIELDS)

    { fprintf(stderr,"Too many fields

");

      exit(1);

    }

    fread(&field,32,1,in);

    strcpy(field_name[nfield],field.name);

    field_type[nfield]=field.type;

   //  printf("

FIELD: %s",field_name[3]);

 

    field_pos[nfield++]=pos;

    pos+=(int)field.length;

    n-=(int)field.length;

  }

     for (i=1;i<nfield;i++)

   {

                printf("%s%c",field_name[i],i==nfield-1?'

':'             ');

  }

 

 // for (i=0;i<nfield;i++) printf(   "!%s%c",

field_name[i],i==nfield-1?'

':'             ');

  field_pos[nfield]=pos; /* one extra for length calculation of last

field

*/

 // printf("

%s",field_name[3].data);

  fread(&i,1,1,in); /*read field terminator */

  if (i!=0xD)

  { fprintf(stderr,"Illegal field terminator; more than %d

fields?

",MAXFIELDS);

    exit(1);

  }

 

   lrec=header.lrec;

   record=malloc(lrec);

   for (i=1;i<header.nrec;i++)

   {

                if (fread(record,lrec,1,in)!=1)

                {

                  fprintf(stderr,"Error reading record %d

",i+1);

                  exit(1);

                 }

 

                if (*record!='*')  /* if not a deleted record */

                for (j=1;j<nfield;j++)

                {

                  if(j==1)

                  {

                   p=record+field_pos[j]+1;                           /* first char of the field */

                   q=record+field_pos[j+1]-1;                       /* last char of the field */

                   while (*p==' ' && p<=q) p++;                   /* remove leading spaces */

                   while (*q==' ' && p<=q) *(q--)='

No comments:

Post a Comment