1: /* $Id: rleda.c,v 1.3 2005/02/08 17:10:08 brouard Exp $
2: $State: Exp $
3: $Log: rleda.c,v $
4: Revision 1.3 2005/02/08 17:10:08 brouard
5: Lit le fichier index deux fois pour n'avoir qu'un passage en SAS.
6: AJoute le proc contents des fichiers créés en fin de run;
7:
8: Revision 1.2 2003/12/12 19:08:17 brouard
9: Les variables ne sont plus toutes écrites en ligne mais avec un retour
10: à la ligne toutes les 5 variables.
11:
12: Revision 1.1.1.1 2003/12/12 18:53:44 brouard
13: Import de rleda
14:
15:
16: rleda.c
17: Programme pour lire une fichier d'index de LEDA qui a t converti de l'EBCDIC vers l'ascii
18: Nicolas Brouard (Institut national d'tudes d mographiques)
19: Usage : rleda nom_d_index
20: Il y a plusieurs sorties, un log (pour le debug) un .txt pour le format et
21: un .sas pour le sas.
22: Je me suis inspir de la version sas d'Andr Wielki (INED).
23: Mardi 25 novembre 2003
24: */
25: #include <stdio.h>
26: #include <string.h>
27: #include <unistd.h>
28:
29: #define MAXLINE 300
30: #define FILENAMELENGTH 300
31: #define FILENAMEEXTLEN 10
32: #define GLOCK_ERROR_NOPATH -1 /* empty path */
33: #define GLOCK_ERROR_GETCWD -2 /* cannot get cwd */
34:
35: #ifdef unix
36: #define DIRSEPARATOR '/'
37: #define ODIRSEPARATOR '\\'
38: #else
39: #define DIRSEPARATOR '\\'
40: #define ODIRSEPARATOR '/'
41: #endif
42:
43: char version[]="rleda-0.9.2 Programme de lecture de fichiers d'index au format LEDA convertis de l'EBCDIC en ASCII ";
44: char fullversion[]="$Revision: 1.3 $ $Date: 2005/02/08 17:10:08 $";
45: char line[MAXLINE];
46: char title[MAXLINE],namevar[MAXLINE], namevara[MAXLINE];
47:
48: char fileres[FILENAMELENGTH], filereso[FILENAMELENGTH];
49: char filesas[FILENAMELENGTH]; /* SAS file */
50: char filelog[FILENAMELENGTH]; /* Log file */
51:
52: FILE *ficlog, *ficres, *ficdat, *ficreso, *ficsas;
53:
54:
55: static unsigned char const ascii_to_ebcdic[] =
56: {
57: '\000', '\001', '\002', '\003', '\067', '\055', '\056', '\057',
58: '\026', '\005', '\045', '\013', '\014', '\015', '\016', '\017',
59: '\020', '\021', '\022', '\023', '\074', '\075', '\062', '\046',
60: '\030', '\031', '\077', '\047', '\034', '\035', '\036', '\037',
61: '\100', '\117', '\177', '\173', '\133', '\154', '\120', '\175',
62: '\115', '\135', '\134', '\116', '\153', '\140', '\113', '\141',
63: '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
64: '\370', '\371', '\172', '\136', '\114', '\176', '\156', '\157',
65: '\174', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
66: '\310', '\311', '\321', '\322', '\323', '\324', '\325', '\326',
67: '\327', '\330', '\331', '\342', '\343', '\344', '\345', '\346',
68: '\347', '\350', '\351', '\112', '\340', '\132', '\137', '\155',
69: '\171', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
70: '\210', '\211', '\221', '\222', '\223', '\224', '\225', '\226',
71: '\227', '\230', '\231', '\242', '\243', '\244', '\245', '\246',
72: '\247', '\250', '\251', '\300', '\152', '\320', '\241', '\007',
73: '\040', '\041', '\042', '\043', '\044', '\025', '\006', '\027',
74: '\050', '\051', '\052', '\053', '\054', '\011', '\012', '\033',
75: '\060', '\061', '\032', '\063', '\064', '\065', '\066', '\010',
76: '\070', '\071', '\072', '\073', '\004', '\024', '\076', '\341',
77: '\101', '\102', '\103', '\104', '\105', '\106', '\107', '\110',
78: '\111', '\121', '\122', '\123', '\124', '\125', '\126', '\127',
79: '\130', '\131', '\142', '\143', '\144', '\145', '\146', '\147',
80: '\150', '\151', '\160', '\161', '\162', '\163', '\164', '\165',
81: '\166', '\167', '\170', '\200', '\212', '\213', '\214', '\215',
82: '\216', '\217', '\220', '\232', '\233', '\234', '\235', '\236',
83: '\237', '\240', '\252', '\253', '\254', '\255', '\256', '\257',
84: '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
85: '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
86: '\312', '\313', '\314', '\315', '\316', '\317', '\332', '\333',
87: '\334', '\335', '\336', '\337', '\352', '\353', '\354', '\355',
88: '\356', '\357', '\372', '\373', '\374', '\375', '\376', '\377'
89: };
90:
91: static unsigned char const ascii_to_ibm[] =
92: {
93: '\000', '\001', '\002', '\003', '\067', '\055', '\056', '\057',
94: '\026', '\005', '\045', '\013', '\014', '\015', '\016', '\017',
95: '\020', '\021', '\022', '\023', '\074', '\075', '\062', '\046',
96: '\030', '\031', '\077', '\047', '\034', '\035', '\036', '\037',
97: '\100', '\132', '\177', '\173', '\133', '\154', '\120', '\175',
98: '\115', '\135', '\134', '\116', '\153', '\140', '\113', '\141',
99: '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
100: '\370', '\371', '\172', '\136', '\114', '\176', '\156', '\157',
101: '\174', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
102: '\310', '\311', '\321', '\322', '\323', '\324', '\325', '\326',
103: '\327', '\330', '\331', '\342', '\343', '\344', '\345', '\346',
104: '\347', '\350', '\351', '\255', '\340', '\275', '\137', '\155',
105: '\171', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
106: '\210', '\211', '\221', '\222', '\223', '\224', '\225', '\226',
107: '\227', '\230', '\231', '\242', '\243', '\244', '\245', '\246',
108: '\247', '\250', '\251', '\300', '\117', '\320', '\241', '\007',
109: '\040', '\041', '\042', '\043', '\044', '\025', '\006', '\027',
110: '\050', '\051', '\052', '\053', '\054', '\011', '\012', '\033',
111: '\060', '\061', '\032', '\063', '\064', '\065', '\066', '\010',
112: '\070', '\071', '\072', '\073', '\004', '\024', '\076', '\341',
113: '\101', '\102', '\103', '\104', '\105', '\106', '\107', '\110',
114: '\111', '\121', '\122', '\123', '\124', '\125', '\126', '\127',
115: '\130', '\131', '\142', '\143', '\144', '\145', '\146', '\147',
116: '\150', '\151', '\160', '\161', '\162', '\163', '\164', '\165',
117: '\166', '\167', '\170', '\200', '\212', '\213', '\214', '\215',
118: '\216', '\217', '\220', '\232', '\233', '\234', '\235', '\236',
119: '\237', '\240', '\252', '\253', '\254', '\255', '\256', '\257',
120: '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
121: '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
122: '\312', '\313', '\314', '\315', '\316', '\317', '\332', '\333',
123: '\334', '\335', '\336', '\337', '\352', '\353', '\354', '\355',
124: '\356', '\357', '\372', '\373', '\374', '\375', '\376', '\377'
125: };
126:
127: static unsigned char const ebcdic_to_ascii[] =
128: {
129: '\000', '\001', '\002', '\003', '\234', '\011', '\206', '\177',
130: '\227', '\215', '\216', '\013', '\014', '\015', '\016', '\017',
131: '\020', '\021', '\022', '\023', '\235', '\205', '\010', '\207',
132: '\030', '\031', '\222', '\217', '\034', '\035', '\036', '\037',
133: '\200', '\201', '\202', '\203', '\204', '\012', '\027', '\033',
134: '\210', '\211', '\212', '\213', '\214', '\005', '\006', '\007',
135: '\220', '\221', '\026', '\223', '\224', '\225', '\226', '\004',
136: '\230', '\231', '\232', '\233', '\024', '\025', '\236', '\032',
137: '\040', '\240', '\241', '\242', '\243', '\244', '\245', '\246',
138: '\247', '\250', '\133', '\056', '\074', '\050', '\053', '\041',
139: '\046', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
140: '\260', '\261', '\135', '\044', '\052', '\051', '\073', '\136',
141: '\055', '\057', '\262', '\263', '\264', '\265', '\266', '\267',
142: '\270', '\271', '\174', '\054', '\045', '\137', '\076', '\077',
143: '\272', '\273', '\274', '\275', '\276', '\277', '\300', '\301',
144: '\302', '\140', '\072', '\043', '\100', '\047', '\075', '\042',
145: '\303', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
146: '\150', '\151', '\304', '\305', '\306', '\307', '\310', '\311',
147: '\312', '\152', '\153', '\154', '\155', '\156', '\157', '\160',
148: '\161', '\162', '\313', '\314', '\315', '\316', '\317', '\320',
149: '\321', '\176', '\163', '\164', '\165', '\166', '\167', '\170',
150: '\171', '\172', '\322', '\323', '\324', '\325', '\326', '\327',
151: '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
152: '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
153: '\173', '\101', '\102', '\103', '\104', '\105', '\106', '\107',
154: '\110', '\111', '\350', '\351', '\352', '\353', '\354', '\355',
155: '\175', '\112', '\113', '\114', '\115', '\116', '\117', '\120',
156: '\121', '\122', '\356', '\357', '\360', '\361', '\362', '\363',
157: '\134', '\237', '\123', '\124', '\125', '\126', '\127', '\130',
158: '\131', '\132', '\364', '\365', '\366', '\367', '\370', '\371',
159: '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
160: '\070', '\071', '\372', '\373', '\374', '\375', '\376', '\377'
161: };
162:
163: /**************** split *************************/
164: static int split( char *path, char *dirc, char *name, char *ext, char *finame )
165: {
166: char *ss; /* pointer */
167: int l1, l2; /* length counters */
168:
169: l1 = strlen(path ); /* length of path */
170: if ( l1 == 0 ) return( GLOCK_ERROR_NOPATH );
171: ss= strrchr( path, DIRSEPARATOR ); /* find last / */
172: if ( ss == NULL ) { /* no directory, so use current */
173: /*if(strrchr(path, ODIRSEPARATOR )==NULL)
174: printf("Warning you should use %s as a separator\n",DIRSEPARATOR);*/
175: /* get current working directory */
176: /* extern char* getcwd ( char *buf , int len);*/
177: if ( getcwd( dirc, FILENAME_MAX ) == NULL ) {
178: return( GLOCK_ERROR_GETCWD );
179: }
180: strcpy( name, path ); /* we've got it */
181: } else { /* strip direcotry from path */
182: ss++; /* after this, the filename */
183: l2 = strlen( ss ); /* length of filename */
184: if ( l2 == 0 ) return( GLOCK_ERROR_NOPATH );
185: strcpy( name, ss ); /* save file name */
186: strncpy( dirc, path, l1 - l2 ); /* now the directory */
187: dirc[l1-l2] = 0; /* add zero */
188: }
189: l1 = strlen( dirc ); /* length of directory */
190: /*#ifdef windows
191: if ( dirc[l1-1] != '\\' ) { dirc[l1] = '\\'; dirc[l1+1] = 0; }
192: #else
193: if ( dirc[l1-1] != '/' ) { dirc[l1] = '/'; dirc[l1+1] = 0; }
194: #endif
195: */
196: l1= strlen( name);
197: ss = strrchr( name, '.' ); /* find last / */
198: if (ss != '\0'){
199: ss++;
200: strcpy(ext,ss); /* save extension */
201: l2= strlen(ss)+1;
202: }else{
203: ext[0]='\0';
204: l2 = 0;
205: }
206: strncpy( finame, name, l1-l2);
207: finame[l1-l2]= 0;
208: return( 0 ); /* we're done */
209: }
210:
211: void trzb(char *z, char *in)
212: {
213: /* Enlve les blancs en fin de cha ne et le caractre 0 qui se trouve
214: au d but s'il y est */
215: int i=0, j=0, k=0;
216: int n;
217:
218: n =strlen(in);
219: /* for(i=n;(i>=0) || (in[i]==' ');i--){ */
220: /* printf ("i=%d in[i]=%s\n",i,in[i]); */
221: /* } */
222: k=0;
223: if(in[0]== '0')
224: k=1;
225: for(j=k; j<=n;j++){
226: if(in[j]==' '){
227: z[j-k]='\0';
228: break;
229: }
230: else
231: z[j-k]=in[j];
232: }
233: z[j-k]='\0';
234: }
235:
236: main(int argc, char *argv[])
237: {
238: int numlinepar=0, ilect=0, firstpass=0;
239: long nobs=0, ncar=0,ncara=0, ncartes=0, nn=0, nvaris=0;
240: long c;
241: long d;
242: long numlis, ntype;
243: long n, pos;
244: int level, olevel, levelmax;
245: char scar;
246: char s;
247: char var1[4][10], varn[4][10];
248:
249: char pathtot[MAXLINE], path[MAXLINE], indexfile[FILENAMELENGTH], indexfilext[FILENAMEEXTLEN];
250: char indexfilefiname[FILENAMELENGTH];
251:
252: numlinepar=0;
253: if(argc <=1){
254: printf("\nEntrez le nom du fichier index binaire (dtrirdex) : ");
255: scanf("%s",pathtot);
256: }
257: else{
258: strcpy(pathtot,argv[1]);
259: }
260: split(pathtot,path,indexfile,indexfilext,indexfilefiname);
261: printf("pathtot=%s,\npath=%s,\nindexfile=%s \nindexfilext=%s \nindexfilefiname=%s\n",pathtot,path,indexfile,indexfilext,indexfilefiname);
262: chdir(path);
263:
264:
265: /* Log file */
266: strcat(filelog, indexfilefiname);
267: strcat(filelog,".log"); /* */
268: if((ficlog=fopen(filelog,"w"))==NULL) {
269: printf("Problem with logfile %s\n",filelog);
270: goto end;
271: }
272: fprintf(ficlog,"Log filename:%s\n",filelog);
273: fprintf(ficlog,"\n%s\n%s",version,fullversion);
274: fprintf(ficlog,"\nEntrez le nom du fichier d'index: ");
275: fprintf(ficlog,"pathtot=%s\n\
276: path=%s \n\
277: indexfile=%s\n\
278: indexfilext=%s\n\
279: indexfilefiname=%s\n",pathtot,path,indexfile,indexfilext,indexfilefiname);
280: fflush(ficlog);
281:
282:
283:
284: strcpy(filereso,"o");
285: strcat(filereso,indexfilefiname);
286: strcat(filereso,".txt");
287: if((ficreso=fopen(filereso,"w"))==NULL) { /* opened on subdirectory */
288: printf("Problem with Output resultfile: %s\n", filereso);
289: fprintf(ficlog,"Problem with Output resultfile: %s\n", filereso);
290: fflush(ficlog);
291: goto end;
292: }
293: fprintf(ficreso,"Log filename:%s\n",filelog);
294: fprintf(ficreso,"\n%s\n%s",version,fullversion);
295: fprintf(ficreso,"\nEntrez le nom du fichier d'index: ");
296: fprintf(ficreso,"pathtot=%s\n\
297: path=%s \n\
298: indexfile=%s\n\
299: indexfilext=%s\n\
300: indexfilefiname=%s\n",pathtot,path,indexfile,indexfilext,indexfilefiname);
301: fflush(ficreso);
302:
303: strcpy(filesas,"s");
304: strcat(filesas,indexfilefiname);
305: strcat(filesas,".sas");
306:
307: printf("Le nom du fichier de sortie est %s\n",filereso);
308: printf("Le nom du fichier SAS de sortie est %s\n",filesas);
309:
310: for(ilect=1;ilect<=2;ilect++){
311: pos=9;nvaris=0 ;
312: level=0;
313: printf("Lecture du fichier d index pour la %d fois\n",ilect);
314: if((ficdat=fopen(indexfile,"rb"))==NULL) {
315: printf("Problem with binary file %s\n",indexfile);
316: fprintf(ficlog,"Problem with binary file %s\n",indexfile);
317: fflush(ficlog);
318: goto end;
319: }
320: if(ilect==2){
321: if((ficsas=fopen(filesas,"w"))==NULL) { /* opened on subdirectory */
322: printf("Problem with Output resultfile: %s\n", filesas);
323: fprintf(ficlog,"Problem with Output resultfile: %s\n", filesas);
324: fflush(ficlog);
325: goto end;
326: }
327: fprintf(ficsas,"*Sortie de rleda version %s *;\n* %s *;\n",version,fullversion);
328: fprintf(ficsas,"libname %s \"%s\";\n",indexfilefiname,path);
329: fprintf(ficsas,"filename a \"%s.dat\";\n",indexfilefiname );
330: fprintf(ficsas,"* Ci dessous a modifier eventuellement *;\n");
331: fprintf(ficsas,"data %s.%s0 (keep=ID)\n",indexfilefiname,indexfilefiname);
332: for(level=1; level <=levelmax; level++){
333: fprintf(ficsas," %s.%s%d (keep=%s--%s)\n",indexfilefiname,indexfilefiname,level,var1[level],varn[level]);
334: }
335: fprintf(ficsas," ;\n");
336: fprintf(ficsas," infile a lrecl=500 ;\n");
337: fprintf(ficsas," input id 1. @; \n");
338: fprintf(ficsas,"");
339: fprintf(ficsas,"");
340: }
341: while((c=getc(ficdat)) != EOF){
342: ungetc(c,ficdat);
343: ntype=0;for(n=0;n<2;n++){ c=getc(ficdat); ntype+=(n+(1-n)*256)*ascii_to_ebcdic[c];}
344: fprintf(ficlog,"ntype=%d ",ntype);
345: /* printf("ntype=%d ",ntype); */
346: switch(ntype){
347: case 11 : /* 11*/
348: nobs=0;
349: for(n=0;n<2;n++){
350: c=getc(ficdat);
351: d=(n+(1-n)*256)*ascii_to_ebcdic[c];
352: nobs+=d;
353: }
354: fprintf(ficlog,"nobs=%d ",nobs);
355: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
356: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"\"%s\" ",title);
357: printf(" %s\n", title);
358: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
359: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
360: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"\"%s\" ",title);
361: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
362: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"\"%s\" ",title);
363: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
364: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"\"%s\" ",title);
365: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
366: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"\"%s\" ",title);
367: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
368: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"\"%s\" ",title);
369: break;
370: case 12: /* 12 */
371: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
372: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"\"%s\" ",title);
373: printf(" %s\n", title);
374: ncartes=0;for(n=0;n<2;n++){ c=getc(ficdat); ncartes+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"ncartes=%d ",ncartes);
375: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
376: for(n=0;n<8;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"\"%s\" ",title);
377: olevel=level;
378: level=title[0]-48;
379: printf(" Niveau = %d Colonnes 1 8 = %s\n",level,title);
380: fprintf(ficlog," Niveau = %d Colonnes 1 8 = %s\n",level,title);
381: fprintf(ficreso," Niveau = %d Colonnes 1 8 = %s\n",level,title);
382: if(level ==0){
383: if(ilect==2){
384: fprintf(ficsas," if id=%d then do;\n",level);
385: /* fprintf(ficsas," input @9 "); */
386: }
387: }
388: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
389: ncara=0;for(n=0;n<2;n++){ c=getc(ficdat); ncara+=(n+(1-n)*256)*ascii_to_ebcdic[c]; } fprintf(ficlog,"ncara=%d ",ncara);
390: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
391: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"\"%s\" ",title);
392: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
393: for(n=0;n<2;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"\"%s\" ",title);
394: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
395: break;
396: case 10: /* 10 = 142 ascii*/
397: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
398: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"%s ",title);
399: printf(" %s\n", title);
400: trzb(namevar,title);
401: ncartes=0;for(n=0;n<2;n++){ c=getc(ficdat); ncartes+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"ncartes=%d ",ncartes);
402: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
403: ncara=0;for(n=0;n<2;n++){ c=getc(ficdat); ncara+=(n+(1-n)*256)*ascii_to_ebcdic[c]; } fprintf(ficlog,"ncara=%d ",ncara);
404: ncar=0;for(n=0;n<2;n++){ c=getc(ficdat); ncar+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"ncar=%d ",ncar);
405: printf(" %s %d\n",namevar,ncara);
406: fprintf(ficreso," %s %d\n",namevar,ncara);
407: ncar=0;for(n=0;n<2;n++){ c=getc(ficdat); ncar+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"ncar=%d ",ncar);
408: break;
409: case 14: /* 14 */
410: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
411: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"%s ",title);
412: trzb(namevar,title);
413: printf("%d %20s ", level, namevar);
414: fprintf(ficreso,"%d %20s ",level, namevar);
415: fprintf(ficlog,"Variable \"%s\" \n",namevar);
416: ncartes=0;for(n=0;n<2;n++){ c=getc(ficdat); ncartes+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"ncartes=%d ",ncartes);
417: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
418: ncara=0;for(n=0;n<2;n++){ c=getc(ficdat); ncara+=(n+(1-n)*256)*ascii_to_ebcdic[c]; } fprintf(ficlog,"ncara=%d ",ncara);
419: printf(" %6d",ncara); /* Nombre de caractres */
420: fprintf(ficreso," %6d",ncara); /* Nombre de caract res */
421: ncar=0;for(n=0;n<2;n++){ c=getc(ficdat); ncar+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"ncar=%d ",ncar);
422: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"%s ",title);
423: trzb(namevara,title);
424: printf("%10s ", namevara); /* Association */
425: fprintf(ficreso,"%10s ", namevara); /* Association */
426: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
427: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
428: for(n=0;n<2;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0';fprintf(ficlog,"\"%s\"",title);
429: printf("%3s", title); /* Brute C ou Calcule R */
430: fprintf(ficreso,"%3s", title); /* Brute C ou Calcul e R */
431: if(strrchr(title,'C')!= 0 || strrchr(title,'G')!=0){
432: if(level!=olevel){
433: pos=9;
434: firstpass=0;
435: if(ilect==2){
436: fprintf(ficsas," ;\n output %s.%s%d;\n",indexfilefiname,indexfilefiname,olevel);
437: fprintf(ficsas," end\n");
438: }
439: if(level !=0)
440: if(ilect==2){
441: fprintf(ficsas," ;\n else if id=%d then do;\n",level);
442: }
443: if(ilect==2){
444: fprintf(ficsas," input @9 ");
445: printf(" input @9 ");
446: }
447: if(ilect==1){
448: levelmax=level;
449: }
450: olevel=level;
451: }
452: printf(" %d-%d", pos, pos+(ncara-1));
453: fprintf(ficreso," %d-%d", pos, pos+(ncara-1));
454: for(n=0;n<strlen(namevar);n++){
455: if(namevar[n]=='-')
456: break;
457: }
458: namevar[n]='\0';
459: if(ilect==1){
460: if(firstpass==0){
461: strcpy(var1[level],namevar);
462: printf(" Variable premiere %s, niveau %d namevar=%s\n",var1[level],level, namevar);
463: firstpass=1;
464: }
465: else{
466: strcpy(varn[level],namevar);
467: printf(" Variable N %s, niveau %d namevar=%s\n",varn[level],level, namevar);
468: }
469: }
470: if(ilect==2){
471: fprintf(ficsas, " %s $%d.", namevar, ncara);
472: }
473: pos+=ncara;nvaris++ ;
474: if (nvaris>=5) {
475: if(ilect==2){
476: fprintf(ficsas,"\n ") ;
477: }
478: nvaris=0 ;
479: }
480: }
481: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
482: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
483: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
484: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
485: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0';fprintf(ficlog,"%s ",title);
486: trzb(namevar,title);
487: printf(" %10s\n", namevar); /* format */
488: fprintf(ficreso," %10s", namevar); /* format */
489: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
490: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0';fprintf(ficlog,"%s ",title);
491: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
492: break;
493: default: fprintf(ficlog,"Warning ntype=%d cas non prvu, voir les fichiers sources",ntype);
494: nobs=0;for(n=0;n<2;n++){ c=getc(ficdat); nobs+=(n+(1-n)*256)*ascii_to_ebcdic[c];} fprintf(ficlog,"nobs=%d ",nobs);
495: for(n=0;n<30;n++){ c=getc(ficdat); title[n]=c;} title[n]='\0'; fprintf(ficlog,"%s ",title);
496: printf(" %s\n", title);
497: }
498: n=0;
499: while((c=getc(ficdat)) !='\r'){
500: if(ncara != 0)
501: nn= n % ncara;
502: else
503: nn=0;
504: title[nn]=c;
505: if(nn==ncara-1){
506: title[nn+1]='\0';
507: fprintf(ficlog," \"%s\"",title);
508: printf(" \"%s\"",title);
509: fprintf(ficreso," \"%s\"",title);
510: n=n+1;
511: }else{
512: n=n+1;
513: }
514: }
515: if(c=='\r')
516: if((c=getc(ficdat))=='\n');
517: else ungetc(c,ficdat);
518: fprintf(ficlog,"\n");
519: fprintf(ficreso,"\n");
520: } /* End of read loop */
521: fclose(ficdat);
522: } /* End loop ilect */
523:
524: fprintf(ficsas," ;\n output %s.%s%d;\n end;\n else input;\nrun;\n",indexfilefiname,indexfilefiname,level);
525: for(level=0; level <=levelmax; level++){
526: fprintf(ficsas,"proc contents data=%s.%s%d;run;\n",indexfilefiname,indexfilefiname,level);
527: }
528: fclose(ficsas);
529: printf("Le nom du fichier de debug est %s\n",filelog);
530: printf("Le nom du fichier du format de sortie est %s\n",filereso);
531: printf("Le nom du fichier SAS de sortie est %s\n",filesas);
532: fclose(ficreso);
533: fclose(ficlog);
534: exit(0);
535: end:
536: fclose(ficlog);
537: exit(1);
538:
539: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>