Soyez le premier à donner votre avis sur cette source.
Vue 14 594 fois - Téléchargée 1 309 fois
//04-sep-2008 21:47:34 #include <dos.h> #include <io.h> #include <stdio.h> #include <string.h> #include <math.h> #define O_CREAT 0x0100 #define O_TRUNC 0x0200 #define O_BINARY 0x8000 #define O_RDWR 4 #define S_IWRITE 0x0080 #define S_IREAD 0x0100 typedef unsigned short ushort; typedef unsigned long ulong; typedef unsigned char uchar; uchar nom_dbf[]="EXEMPLE.DBF"; short nf; ulong nart; ushort RCS; #define NB_CHAMPS 11 struct BASE { uchar nom_champ[11]; uchar typ_champ; uchar long_champ; uchar nb_dec; } strbase[NB_CHAMPS]= { "COD_SOC" ,'N', 4,0, "NOM_SOC" ,'C',40,0, "COD_LIEU" ,'N', 4,0, "NOM_LIEU" ,'C',24,0, "COD_FONC" ,'N', 4,0, "NOM_FONC" ,'C',24,0, "ID" ,'N', 8,0, "NOM" ,'C',24,0, "SALAIRE" ,'N',14,3, "IMPOT" ,'N',14,3, "RESTE" ,'N',14,3 }; struct ENTET_BASE { uchar version; uchar annee; uchar mois; uchar jour; ulong nb_art; ushort lg_antet; ushort RCS; uchar zero[20]; struct { uchar nom_champ[11]; uchar typ_champ; ulong adresse; uchar long_champ; uchar nb_dec; uchar zero[14]; } champ[NB_CHAMPS]; } aa; uchar dbf[2048]; uchar man[100]; struct date d; ushort i; ulong salaire,impot,reste,nb_inreg; void main(void) { getdate(&d); aa.version=3; aa.annee=d.da_year-1900; aa.mois=d.da_mon; aa.jour=d.da_day; aa.nb_art=0; aa.lg_antet=0; aa.RCS=1; memset(aa.zero,'\0',20); for(i=0;i<NB_CHAMPS;i++) { strncpy(aa.champ[i].nom_champ,strbase[i].nom_champ,11); aa.champ[i].typ_champ=strbase[i].typ_champ; aa.champ[i].adresse=aa.RCS; aa.champ[i].long_champ=strbase[i].long_champ; aa.champ[i].nb_dec=strbase[i].nb_dec; memset(aa.champ[i].zero,'\0',14); aa.RCS+=aa.champ[i].long_champ; } RCS=aa.RCS; aa.lg_antet=(NB_CHAMPS+1)*32+1; if((nf=open(nom_dbf,O_CREAT|O_BINARY|O_TRUNC|O_RDWR,S_IWRITE|S_IREAD))<1) { printf("\nErreur dans la creation du fichier %s.",nom_dbf); return; } RCS=aa.lg_antet; write(nf,&aa,RCS-1); man[0]=0x0D; write(nf,man,1); RCS=aa.RCS; salaire=1000000; nb_inreg=0; // //Exemple // for(i=0;i<1234;i++) { memset(&dbf,' ',aa.RCS); sprintf(man,"%04u",i+1); strncpy(dbf+aa.champ[0].adresse,man,4); sprintf(man,"Societe numero %u%40s",i+1,""); strncpy(dbf+aa.champ[1].adresse,man,40); sprintf(man,"%04u",i+11); strncpy(dbf+aa.champ[2].adresse,man,4); sprintf(man,"Lieu de travail numero %u%24s",i+11,""); strncpy(dbf+aa.champ[3].adresse,man,24); sprintf(man,"%04u",i+101); strncpy(dbf+aa.champ[4].adresse,man,4); sprintf(man,"Fonction numero %u%24s",i+101,""); strncpy(dbf+aa.champ[5].adresse,man,24); sprintf(man,"%04u",i+1001); strncpy(dbf+aa.champ[6].adresse,man,4); sprintf(man,"Employe avec ID %u%24s",i+1001,""); strncpy(dbf+aa.champ[7].adresse,man,24); sprintf(man,"%14.3f",1e-3*salaire); strncpy(dbf+aa.champ[8].adresse,man,14); impot=floor(16e-2*salaire+0.5); sprintf(man,"%14.3f",1e-3*impot); strncpy(dbf+aa.champ[9].adresse,man,14); reste=salaire-impot; sprintf(man,"%14.3f",1e-3*reste); strncpy(dbf+aa.champ[10].adresse,man,14); write(nf,&dbf,RCS); salaire+=1234; nb_inreg++; } man[0]=0x1A; write(nf,man,1); lseek(nf,4l,SEEK_SET); write(nf,&nb_inreg,4l); close(nf); }
Modifié par NHenry le 22/01/2015 à 12:26
As-tu essayer de les corriger ?
Es-tu sûr que la version de ton EDI, elle est peut être incompatible avec la version du code (qui date de 2008 quand même)
22 janv. 2015 à 09:00
visual studio m'affiche 10 000 erreurs en copiant collant ton programme, très utile...
8 sept. 2008 à 06:04
Voilà c'est le seul reproche qu'on peut faire...
Sinon pour donner un intérêt à ces sources sur les fichiers DBF, c'est souvant le format de fichier utilisé pour les relevés des GPS...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.