]> henry.ined.fr Git - .git/commitdiff
(Module): Comments (lines starting with a #) are allowed in data.
authorN. Brouard <brouard@ined.fr>
Tue, 24 Jan 2006 19:37:15 +0000 (19:37 +0000)
committerN. Brouard <brouard@ined.fr>
Tue, 24 Jan 2006 19:37:15 +0000 (19:37 +0000)
src/imach.c

index 8be948e84e1a97251a7d677f446fe6e83913c05a..df7c6ff0c911e78da59103375aa0b82c561ab306 100644 (file)
@@ -1,6 +1,10 @@
 /* $Id$
   $State$
   $Log$
+  Revision 1.108  2006/01/19 18:05:42  lievre
+  Gnuplot problem appeared...
+  To be fixed
+
   Revision 1.107  2006/01/19 16:20:37  brouard
   Test existence of gnuplot in imach path
 
 #include <string.h>
 #include <unistd.h>
 
+#include <limits.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <errno.h>
@@ -342,6 +347,9 @@ long time_value;
 extern long time();
 char strcurr[80], strfor[80];
 
+char *endptr;
+long lval;
+
 #define NR_END 1
 #define FREE_ARG char*
 #define FTOL 1.0e-10
@@ -4073,6 +4081,7 @@ int main(int argc, char *argv[])
 {
   int movingaverage(double ***probs, double bage,double fage, double ***mobaverage, int mobilav);
   int i,j, k, n=MAXN,iter,m,size=100,cptcode, cptcod;
+  int linei;
   int jj, ll, li, lj, lk, imk;
   int numlinepar=0; /* Current linenumber of parameter file */
   int itimes;
@@ -4356,7 +4365,6 @@ int main(int argc, char *argv[])
     }  
     fflush(ficlog);
 
-
     p=param[1][1];
     
     /* Reads comments: lines beginning with '#' */
@@ -4480,43 +4488,132 @@ int main(int argc, char *argv[])
   ncodemax=ivector(1,8);
 
   i=1;
-  while (fgets(line, MAXLINE, fic) != NULL)    {
-    if ((i >= firstobs) && (i <=lastobs)) {
-      for(j=0; line[j] != '\n';j++){  /* Untabifies line */
+  linei=0;
+  while ((fgets(line, MAXLINE, fic) != NULL) ||((i >= firstobs) && (i <=lastobs)))    {
+    linei=linei+1;
+    printf("IIIII= %d linei=%d\n",i,linei);
+    for(j=strlen(line); j>=0;j--){  /* Untabifies line */
        if(line[j] == '\t')
          line[j] = ' ';
       }
+      for(j=strlen(line)-1; (line[j]==' ')||(line[j]==10);j--){;};line[j+1]=0;  /* Trims blanks at end of line */
+      if(line[0]=='#'){
+       fprintf(ficlog,"Comment line\n%s\n",line);
+       printf("Comment line\n%s\n",line);
+       continue;
+      }
       for (j=maxwav;j>=1;j--){
-       cutv(stra, strb,line,' '); s[j][i]=atoi(strb); 
+       cutv(stra, strb,line,' '); 
+        errno=0;
+        lval=strtol(strb,&endptr,10); 
+       /*      if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))*/
+       if( strb[0]=='\0' || (*endptr != '\0')){
+         printf("Error reading data around '%d' at line number %d %s for individual %d\nShould be a status of wave %d. Setting maxwav=%d might be wrong.  Exiting.\n",lval, i,line,linei,j,maxwav);
+         exit(1);
+       }
+       s[j][i]=lval;
+
+       strcpy(line,stra);
+       cutv(stra, strb,line,'/');
+        errno=0;
+        lval=strtol(strb,&endptr,10); 
+       if( strb[0]=='\0' || (*endptr != '\0')){
+         printf("Error reading data around '%d'.at line number %ld %s for individual %d\nShould be a year of exam at wave %d.  Exiting.\n",lval, i,line,linei,j);
+         exit(1);
+       }
+       anint[j][i]=(double)(lval); 
+
+       strcpy(line,stra);
+       cutv(stra, strb,line,' ');
+        errno=0;
+        lval=strtol(strb,&endptr,10); 
+       if( strb[0]=='\0' || (*endptr != '\0')){
+         printf("Error reading data around '%d' at line number %ld %s for individual %d\nShould be a month of exam at wave %d.  Exiting.\n",lval, i,line, linei,j);
+         exit(1);
+       }
+       mint[j][i]=(double)(lval); 
        strcpy(line,stra);
-       cutv(stra, strb,line,'/'); anint[j][i]=(double)(atoi(strb)); strcpy(line,stra);
-       cutv(stra, strb,line,' '); mint[j][i]=(double)(atoi(strb)); strcpy(line,stra);
       }
        
-      cutv(stra, strb,line,'/'); andc[i]=(double)(atoi(strb)); strcpy(line,stra);
-      cutv(stra, strb,line,' '); moisdc[i]=(double)(atoi(strb)); strcpy(line,stra);
-
-      cutv(stra, strb,line,'/'); annais[i]=(double)(atoi(strb)); strcpy(line,stra);
-      cutv(stra, strb,line,' '); moisnais[i]=(double)(atoi(strb)); strcpy(line,stra);
+      cutv(stra, strb,line,'/'); 
+      errno=0;
+      lval=strtol(strb,&endptr,10); 
+      if( strb[0]=='\0' || (*endptr != '\0')){
+       printf("Error reading data around '%d' at line number %ld %s for individual %d\nShould be a year of death.  Exiting.\n",lval, i,line,linei);
+       exit(1);
+      }
+      andc[i]=(double)(lval); 
+      strcpy(line,stra);
+
+      cutv(stra, strb,line,' '); 
+      errno=0;
+      lval=strtol(strb,&endptr,10); 
+      if( strb[0]=='\0' || (*endptr != '\0')){
+       printf("Error reading data around '%d' at line number %ld %s for individual %d\nShould be a month of death.  Exiting.\n",lval,i,line, linei);
+       exit(1);
+      }
+      moisdc[i]=(double)(lval); 
+
+      strcpy(line,stra);
+      cutv(stra, strb,line,'/'); 
+      errno=0;
+      lval=strtol(strb,&endptr,10); 
+      if( strb[0]=='\0' || (*endptr != '\0')){
+       printf("Error reading data around '%d' at line number %ld %s for individual %d\nShould be a year of birth.  Exiting.\n",lval, i,line, linei);
+       exit(1);
+      }
+      annais[i]=(double)(lval);
+
+      strcpy(line,stra);
+      cutv(stra, strb,line,' ');
+      errno=0;
+      lval=strtol(strb,&endptr,10); 
+      if( strb[0]=='\0' || (*endptr != '\0')){
+       printf("Error reading data around '%d' at line number %ld %s for individual %d\nShould be a month of birth.  Exiting.\n",lval,i,line,linei);
+       exit(1);
+      }
+      moisnais[i]=(double)(lval); 
+      strcpy(line,stra);
+
+      cutv(stra, strb,line,' '); 
+      errno=0;
+      lval=strtol(strb,&endptr,10); 
+      if( strb[0]=='\0' || (*endptr != '\0')){
+       printf("Error reading data around '%d' at line number %ld %s for individual %d\nShould be a weight.  Exiting.\n",lval, i,line,linei);
+       exit(1);
+      }
+      weight[i]=(double)(lval); 
+      strcpy(line,stra);
 
-      cutv(stra, strb,line,' '); weight[i]=(double)(atoi(strb)); strcpy(line,stra);
       for (j=ncovcol;j>=1;j--){
-       cutv(stra, strb,line,' '); covar[j][i]=(double)(atoi(strb)); strcpy(line,stra);
+       cutv(stra, strb,line,' '); 
+       errno=0;
+       lval=strtol(strb,&endptr,10); 
+       if( strb[0]=='\0' || (*endptr != '\0')){
+         printf("Error reading data around '%d' at line number %ld %s for individual %d\nShould be a covar (meaning 0 for the reference or 1).  Exiting.\n",lval, i,line,linei);
+         exit(1);
+       }
+       if(lval <0 || lval >1){
+         printf("Error reading data around '%d' at line number %ld %s for individual %d\nShould be a value of the %d covar (meaning 0 for the reference or 1. IMaCh does not build design variables, do it your self).  Exiting.\n",lval,i,line,linei,j);
+         exit(1);
+       }
+       covar[j][i]=(double)(lval);
+       strcpy(line,stra);
       } 
       lstra=strlen(stra);
+
       if(lstra > 9){ /* More than 2**32 or max of what printf can write with %ld */
        stratrunc = &(stra[lstra-9]);
        num[i]=atol(stratrunc);
       }
       else
        num[i]=atol(stra);
-       
+      printf ("num [i] %ld %d\n",i, num[i]);fflush(stdout);
       /*if((s[2][i]==2) && (s[3][i]==-1)&&(s[4][i]==9)){
        printf("%ld %.lf %.lf %.lf %.lf/%.lf %.lf/%.lf %.lf/%.lf %d %.lf/%.lf %d %.lf/%.lf %d %.lf/%.lf %d\n",num[i],(covar[1][i]), (covar[2][i]),weight[i], (moisnais[i]), (annais[i]), (moisdc[i]), (andc[i]), (mint[1][i]), (anint[1][i]), (s[1][i]),  (mint[2][i]), (anint[2][i]), (s[2][i]),  (mint[3][i]), (anint[3][i]), (s[3][i]),  (mint[4][i]), (anint[4][i]), (s[4][i])); ij=ij+1;}*/
 
       i=i+1;
-    }
-  }
+  } /* End loop reading  data */
   /* printf("ii=%d", ij);
      scanf("%d",i);*/
   imx=i-1; /* Number of individuals */