8#include "tpcclibConfig.h"
18static char *info[] = {
19 "Remove comment lines from data files.",
21 "Usage: @P [Options] datafile(s)",
25 " Semicolon is used to mark comment line (y) or not (n, default).",
27 " Sharp ('#') is used to mark comment line (y, default) or not (n).",
30 "See also: iftlist, taclist, iftdel, csv2ift, parformat",
32 "Keywords: TAC, CSV, IFT, software testing, reporting",
51int main(
int argc,
char **argv)
53 int ai, help=0, version=0, verbose=1;
54 char *cptr, datfile[FILENAME_MAX];
62 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
65 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
67 cptr=argv[ai]+1;
if(*cptr==
'-') cptr++;
if(!*cptr)
continue;
68 if(strncasecmp(cptr,
"SEMICOLON=", 10)==0) {
70 if(strncasecmp(cptr,
"YES", 1)==0) {cmt_semicolon=1;
continue;}
71 if(strncasecmp(cptr,
"NO", 1)==0) {cmt_semicolon=0;
continue;}
72 }
else if(strncasecmp(cptr,
"SHARP=", 6)==0) {
74 if(strncasecmp(cptr,
"YES", 1)==0) {cmt_sharp=1;
continue;}
75 if(strncasecmp(cptr,
"NO", 1)==0) {cmt_sharp=0;
continue;}
77 fprintf(stderr,
"Error: invalid option '%s'.\n", argv[ai]);
82 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
91 for(; ai<argc; ai++) {
97 if(fileNr<1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
99 if(!cmt_semicolon && !cmt_sharp) {
100 fprintf(stderr,
"Warning: no comments were selected to be removed.\n");
107 for(ai=0; ai<argc; ai++)
108 printf(
"%s ", argv[ai]);
110 printf(
"fileNr := %d\n", fileNr);
111 printf(
"cmt_semicolon := %d\n", cmt_semicolon);
112 printf(
"cmt_sharp := %d\n", cmt_sharp);
121 char *data, *data2, *line;
124 for(ai=ffi; ai<argc; ai++) {
126 strlcpy(datfile, argv[ai], FILENAME_MAX);
127 if(verbose>0) printf(
"%s\n", datfile);
130 fp=fopen(datfile,
"r");
132 fprintf(stderr,
"Error: cannot open file %s\n", datfile);
138 if(verbose>2) printf(
" filesize := %u\n", (
unsigned int)fsize);
141 fprintf(stderr,
"Warning: not processed %s\n", datfile);
147 fprintf(stderr,
"Warning: not processed %s\n", datfile);
155 fprintf(stderr,
"Error: cannot read file %s\n", datfile);
156 fclose(fp);
return(3);
158 if(verbose>10) printf(
" ASCII file read\n");
162 data2=calloc(fsize+1,
sizeof(
char));
164 fprintf(stderr,
"Error: cannot allocate memory.\n");
165 free(data);
return(4);
170 while((line=
strTokenDup(cptr,
"\n\r", &j))!=NULL) {
172 if(cmt_sharp && line[0]==
'#') {free(line); cptr+=j; n++;
continue;}
173 if(cmt_semicolon && line[0]==
';') {free(line); cptr+=j; n++;
continue;}
174 strcat(data2, line); strcat(data2,
"\n");
175 free(line); cptr+=j; i++;
178 if(verbose>0) printf(
" %d line(s) removed.\n", n);
179 if(verbose>1) printf(
" %d line(s) retained.\n", i);
182 free(data2);
continue;
185 fp=fopen(datfile,
"w");
187 fprintf(stderr,
"Error: cannot write file %s\n", datfile);
188 free(data2);
return(11);
190 n=fprintf(fp,
"%s", data2);
191 free(data2); fclose(fp);
193 fprintf(stderr,
"Error: cannot write file %s\n", datfile);
201 printf(
"comments removed from %d file(s).\n", fileNr);
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
int tpcHtmlUsage(const char *program, char *text[], const char *path)
void tpcPrintBuild(const char *program, FILE *fp)
void tpcPrintUsage(const char *program, char *text[], FILE *fp)
char * asciiFileRead(FILE *fp, char *data, size_t maxlen)
size_t asciiFileSize(FILE *fp, int *nonprintable)
void statusInit(TPCSTATUS *s)
void statusSet(TPCSTATUS *s, const char *func, const char *srcfile, int srcline, tpcerror error)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
char * strTokenDup(const char *s1, const char *s2, int *next)
int verbose
Verbose level, used by statusPrint() etc.
Header file for library libtpcextensions.