Diff for /rleda/rleda.c between versions 1.3 and 1.4

version 1.3, 2005/02/08 17:10:08 version 1.4, 2005/02/14 12:15:06
Line 1 Line 1
 /* $Id$  /* $Id$
   $State$    $State$
   $Log$    $Log$
   Revision 1.3  2005/02/08 17:10:08  brouard    Revision 1.4  2005/02/14 12:15:06  brouard
   Lit le fichier index deux fois pour n'avoir qu'un passage en SAS.    Garde une variable intitulée numero qui relit les niveaux 2 et 3, tant
   AJoute le proc contents des fichiers créés en fin de run;    en SAS qu'en STATA.
   
     Revision 1.3  2005/02/08 17:10:08  brouard
     Lit le fichier index deux fois pour n'avoir qu'un passage en SAS.
     AJoute le proc contents des fichiers créés en fin de run;
   
   Revision 1.2  2003/12/12 19:08:17  brouard    Revision 1.2  2003/12/12 19:08:17  brouard
   Les variables ne sont plus toutes écrites en ligne mais avec un retour    Les variables ne sont plus toutes écrites en ligne mais avec un retour
Line 40 Line 44
 #define ODIRSEPARATOR '/'  #define ODIRSEPARATOR '/'
 #endif  #endif
   
 char version[]="rleda-0.9.2 Programme de lecture de fichiers d'index au format LEDA convertis de l'EBCDIC en ASCII ";  char version[]="rleda-0.9.5 Programme de lecture de fichiers d'index au format LEDA convertis de l'EBCDIC en ASCII ";
 char fullversion[]="$Revision$ $Date$";  char fullversion[]="$Revision$ $Date$";
 char line[MAXLINE];  char line[MAXLINE];
 char title[MAXLINE],namevar[MAXLINE], namevara[MAXLINE];  char title[MAXLINE],namevar[MAXLINE], namevara[MAXLINE];
   
 char fileres[FILENAMELENGTH], filereso[FILENAMELENGTH];  char fileres[FILENAMELENGTH], filereso[FILENAMELENGTH];
 char filesas[FILENAMELENGTH]; /* SAS  file */  char filesas[FILENAMELENGTH]; /* SAS  file */
   char filestata[FILENAMELENGTH]; /* STATA  file */
   char filestatal[10][FILENAMELENGTH]; /* STATA dictionary  files */
 char filelog[FILENAMELENGTH]; /* Log file */  char filelog[FILENAMELENGTH]; /* Log file */
   
 FILE *ficlog, *ficres, *ficdat, *ficreso, *ficsas;  FILE *ficlog, *ficres, *ficdat, *ficreso, *ficsas, *ficstata, *ficstatal[10];
   
   
 static unsigned char const ascii_to_ebcdic[] =  static unsigned char const ascii_to_ebcdic[] =
Line 235  void trzb(char *z, char *in) Line 241  void trzb(char *z, char *in)
   
 main(int argc, char *argv[])  main(int argc, char *argv[])
 {  {
   int numlinepar=0, ilect=0, firstpass=0;    int numlinepar=0, ilect=0, firstpass=0, idic[10]={0,0,0,0,0,0,0,0,0,0};
   long nobs=0, ncar=0,ncara=0, ncartes=0, nn=0, nvaris=0;    long nobs=0, ncar=0,ncara=0, ncartes=0, nn=0, nvaris=0;
   long c;    long c;
   long d;    long d;
Line 304  main(int argc, char *argv[]) Line 310  main(int argc, char *argv[])
   strcat(filesas,indexfilefiname);    strcat(filesas,indexfilefiname);
   strcat(filesas,".sas");    strcat(filesas,".sas");
   
     strcpy(filestata,"s");
     strcat(filestata,indexfilefiname);
     strcat(filestata,".do");
   printf("Le nom du fichier de sortie est %s\n",filereso);    printf("Le nom du fichier de sortie est %s\n",filereso);
   printf("Le nom du fichier SAS de sortie est %s\n",filesas);    printf("Le nom du fichier SAS de sortie est %s\n",filesas);
     printf("Le nom du fichier STATA de sortie est %s\n",filestata);
   
   for(ilect=1;ilect<=2;ilect++){    for(ilect=1;ilect<=2;ilect++){
     pos=9;nvaris=0 ;      pos=9;nvaris=0 ;
Line 319  main(int argc, char *argv[]) Line 329  main(int argc, char *argv[])
     }      }
     if(ilect==2){      if(ilect==2){
       if((ficsas=fopen(filesas,"w"))==NULL) { /* opened on subdirectory */        if((ficsas=fopen(filesas,"w"))==NULL) { /* opened on subdirectory */
         printf("Problem with Output resultfile: %s\n", filesas);          printf("Problem with Output SAS file: %s\n", filesas);
         fprintf(ficlog,"Problem with Output resultfile: %s\n", filesas);          fprintf(ficlog,"Problem with Output SAS file: %s\n", filesas);
         fflush(ficlog);          fflush(ficlog);
         goto end;          goto end;
       }        }
Line 329  main(int argc, char *argv[]) Line 339  main(int argc, char *argv[])
       fprintf(ficsas,"filename a \"%s.dat\";\n",indexfilefiname );        fprintf(ficsas,"filename a \"%s.dat\";\n",indexfilefiname );
       fprintf(ficsas,"* Ci dessous a modifier eventuellement *;\n");        fprintf(ficsas,"* Ci dessous a modifier eventuellement *;\n");
       fprintf(ficsas,"data %s.%s0 (keep=ID)\n",indexfilefiname,indexfilefiname);        fprintf(ficsas,"data %s.%s0 (keep=ID)\n",indexfilefiname,indexfilefiname);
       for(level=1; level <=levelmax; level++){          fprintf(ficsas,"     %s.%s%d (keep=%s--%s)\n",indexfilefiname,indexfilefiname,1,var1[1],varn[1]);
         fprintf(ficsas,"     %s.%s%d (keep=%s--%s)\n",indexfilefiname,indexfilefiname,level,var1[level],varn[level]);          idic[1]=0;
         for(level=2; level <=levelmax; level++){
           fprintf(ficsas,"     %s.%s%d (keep=numero %s--%s)\n",indexfilefiname,indexfilefiname,level,var1[level],varn[level]);
           idic[level]=0;
       }        }
       fprintf(ficsas,"     ;\n");        fprintf(ficsas,"     ;\n");
       fprintf(ficsas,"  infile a lrecl=500 ;\n");        fprintf(ficsas,"  infile a lrecl=500 ;\n");
       fprintf(ficsas,"  input id 1. @; \n");        fprintf(ficsas,"  input id 1. @; retain numero 0; \n");
       fprintf(ficsas,"");        fprintf(ficsas,"");
       fprintf(ficsas,"");        fprintf(ficsas,"");
         if((ficstata=fopen(filestata,"w"))==NULL) { /* opened on subdirectory */
           printf("Problem with Output Stata file: %s\n", filestata);
           fprintf(ficlog,"Problem with Output Stata: %s\n", filestata);
           fflush(ficlog);
           goto end;
         }
         fprintf(ficstata,"*Sortie de rleda version %s *;\n* %s *;\n",version,fullversion);
         fprintf(ficstata,"*repertoire %s \"%s\";\n",indexfilefiname,path);
         fprintf(ficstata,"* Ci dessous a modifier eventuellement *;\n");
         fprintf(ficstata,"* data %s.%s0 (keep=ID)\n",indexfilefiname,indexfilefiname);
         for(level=1; level <=levelmax; level++){
           fprintf(ficstata,"*     %s.%s%d (keep=%s--%s)\n",indexfilefiname,indexfilefiname,level,var1[level],varn[level]);
         }
         fprintf(ficstata,"*     ;\n");
     }      }
     while((c=getc(ficdat)) != EOF){        while((c=getc(ficdat)) != EOF){  
       ungetc(c,ficdat);        ungetc(c,ficdat);
Line 382  main(int argc, char *argv[]) Line 409  main(int argc, char *argv[])
         if(level ==0){          if(level ==0){
           if(ilect==2){            if(ilect==2){
             fprintf(ficsas,"  if id=%d then do;\n",level);              fprintf(ficsas,"  if id=%d then do;\n",level);
               /*      fprintf(ficstata,"*  if id=%d then do;\n",level);  */
           /*       fprintf(ficsas,"  input @9 "); */            /*       fprintf(ficsas,"  input @9 "); */
           }            }
         }          }
Line 433  main(int argc, char *argv[]) Line 461  main(int argc, char *argv[])
             pos=9;              pos=9;
             firstpass=0;              firstpass=0;
             if(ilect==2){              if(ilect==2){
               fprintf(ficsas,"    ;\n    output %s.%s%d;\n",indexfilefiname,indexfilefiname,olevel);                if(olevel==1){
                   fprintf(ficsas,"    ;\n   output %s.%s%d;\n",indexfilefiname,indexfilefiname,olevel);
                 }else if (olevel==2){
                   fprintf(ficsas,"    ;\n      numero +1;\n   output %s.%s%d;\n",indexfilefiname,indexfilefiname,olevel);
                 }
                 fflush(ficsas);
                 if(idic[olevel]!=0)
                   fprintf(ficstatal[olevel],"\n}\n");
               fprintf(ficsas,"  end\n");                fprintf(ficsas,"  end\n");
             }              }
             if(level !=0)              if(level !=0){
               if(ilect==2){                if(ilect==2){
                 fprintf(ficsas,"  ;\n  else if id=%d then do;\n",level);                  fprintf(ficsas,"  ;\n  else if id=%d then do;\n",level);
                   if(idic[level]==0){
                     sprintf(filestatal[level],"s%s-dict%d.dct",indexfilefiname,level);
                     fprintf(ficlog,"\nOutput Stata dictionary: %s\n", filestatal[level]);
                     if((ficstatal[level]=fopen(filestatal[level],"w"))==NULL) { /* opened on subdirectory */
                       printf("Problem with Output Stata dictionary file: %s\n", filestatal[level]);
                       fprintf(ficlog,"Problem with Output Stata dictionary: %s\n", filestatal[level]);
                       fflush(ficlog);
                       goto end;
                     }
                     idic[level]=1;
   /*                fprintf(ficstatal[level],"* Sortie de rleda version %s, %s\n",version,fullversion ); */
   /*                fprintf(ficstatal[level],"* Nom de fichier  %s et chemin \"%s\";\n* Stata dictionary\n",indexfilefiname,path); */
                     fprintf(ficstatal[level],"dictionary using \"%s.dat\"{\n",indexfilefiname );
                   }
               }                }
               }
             if(ilect==2){              if(ilect==2){
               fprintf(ficsas,"    input @9 ");                fprintf(ficsas,"    input @9 ");
                 if(idic[level]!=0)
                   fprintf(ficstatal[level],"    str1 id _column(9) ");
               printf("  input @9 ");                printf("  input @9 ");
             }              }
             if(ilect==1){              if(ilect==1){
Line 469  main(int argc, char *argv[]) Line 521  main(int argc, char *argv[])
           }            }
           if(ilect==2){            if(ilect==2){
             fprintf(ficsas, " %s $%d.", namevar, ncara);              fprintf(ficsas, " %s $%d.", namevar, ncara);
               fprintf(ficstatal[level], " str%d %s %%%ds", ncara, namevar, ncara);
           }            }
           pos+=ncara;nvaris++ ;            pos+=ncara;nvaris++ ;
           if (nvaris>=5) {            if (nvaris>=5) {
             if(ilect==2){              if(ilect==2){
               fprintf(ficsas,"\n     ") ;                fprintf(ficsas,"\n     ") ;
                 fprintf(ficstatal[level],"\n     ") ;
             }              }
             nvaris=0 ;              nvaris=0 ;
           }            }
Line 522  main(int argc, char *argv[]) Line 576  main(int argc, char *argv[])
   } /* End loop ilect */    } /* End loop ilect */
     
   fprintf(ficsas,"   ;\n    output %s.%s%d;\n  end;\n  else input;\nrun;\n",indexfilefiname,indexfilefiname,level);    fprintf(ficsas,"   ;\n    output %s.%s%d;\n  end;\n  else input;\nrun;\n",indexfilefiname,indexfilefiname,level);
     fprintf(ficstatal[level],"\n}\n");
   for(level=0; level <=levelmax; level++){    for(level=0; level <=levelmax; level++){
     fprintf(ficsas,"proc contents data=%s.%s%d;run;\n",indexfilefiname,indexfilefiname,level);      fprintf(ficsas,"proc contents data=%s.%s%d;run;\n",indexfilefiname,indexfilefiname,level);
       /*     fprintf(ficstata,"*proc contents data=%s.%s%d;run;\n",indexfilefiname,indexfilefiname,level); */
       if(level==2){
         fprintf(ficstata,"clear\n  quiet infile using s%s-dict%d if id==\"%d\"\n  gen long numero=_n\n  sort numero\nsave %s%d,replace\n",indexfilefiname,level,level,indexfilefiname,level);
       }
       else if(level==3){
         fprintf(ficstata,"clear\n  quiet infile using s%s-dict%d if id != \"1\"\n  gen long numero=1  if id==\"2\"\n  replace numero=sum(numero)\n  sort numero\n",indexfilefiname,level);
         fprintf(ficstata,"* merge numero using %s2\n* drop numero\n drop if id != \"3\"\nsave %s%d,replace\n",indexfilefiname,indexfilefiname,level);
       }
   }    }
   fclose(ficsas);    fclose(ficsas);
     fclose(ficstata);
   printf("Le nom du fichier de debug est %s\n",filelog);    printf("Le nom du fichier de debug est %s\n",filelog);
   printf("Le nom du fichier du format de sortie est %s\n",filereso);    printf("Le nom du fichier du format de sortie est %s\n",filereso);
   printf("Le nom du fichier SAS de sortie est %s\n",filesas);    printf("Le nom du fichier SAS de sortie est %s\n",filesas);
     printf("Le nom du fichier STATA de sortie est %s\n",filestata);
     for(level=1;level<=levelmax;level++){
       fclose(ficstatal[level]);
              printf("Le nom du fichier STATA dictionnaire niveau %d de sortie est %s\n",level,filestatal[level]);
     }
   fclose(ficreso);    fclose(ficreso);
   fclose(ficlog);    fclose(ficlog);
   exit(0);    exit(0);

Removed from v.1.3  
changed lines
  Added in v.1.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>