8#include "tpcclibConfig.h"
20static char *info[] = {
21 "Converts CSV file into IFT format, each CSV field as its own line.",
23 "Usage: @P [Options] csvfile iftfile",
28 "See also: iftlist, iftisval, iftmatch",
30 "Keywords: CSV, IFT, software testing",
49int main(
int argc,
char **argv)
51 int ai, help=0, version=0, verbose=1;
53 char csvfile[FILENAME_MAX], iftfile[FILENAME_MAX];
62 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
64 csvfile[0]=iftfile[0]=(char)0;
66 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
68 fprintf(stderr,
"Error: invalid option '%s'.\n", argv[ai]);
73 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
82 for(; ai<argc; ai++) {
83 if(!csvfile[0]) {strcpy(csvfile, argv[ai]);
continue;}
84 if(!iftfile[0]) {strcpy(iftfile, argv[ai]);
continue;}
85 fprintf(stderr,
"Error: invalid argument '%s'.\n", argv[ai]);
90 if(!iftfile[0]) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
94 for(ai=0; ai<argc; ai++)
95 printf(
"%s ", argv[ai]);
97 printf(
"csvfile := %s\n", csvfile);
98 printf(
"iftfile := %s\n", iftfile);
104 if(verbose>1) printf(
"reading %s\n", csvfile);
105 fp=fopen(csvfile,
"r");
if(fp==NULL) {
106 fprintf(stderr,
"Error: cannot open file %s\n", csvfile);
109 ret=
csvRead(&csv, fp, &status); fclose(fp);
111 fprintf(stderr,
"Error (%d): %s\n", ret,
errorMsg(status.
error));
115 printf(
"field_nr := %d\n", csv.
nr);
123 for(
int i=0; i<csv.
nr; i++) {
124 sprintf(key,
"[%d][%d]", 1+csv.
c[i].
row, 1+csv.
c[i].
col);
137 if(verbose>1) printf(
"writing modified IFT in %s\n", iftfile);
138 fp=fopen(iftfile,
"w");
if(fp==NULL) {
139 fprintf(stderr,
"Error: cannot open file %s\n", iftfile);
142 ret=
iftWrite(&ift, fp, &status); fclose(fp);
int csvRead(CSV *csv, FILE *fp, TPCSTATUS *status)
int iftPut(IFT *ift, const char *key, const char *value, char comment, TPCSTATUS *status)
int iftWrite(IFT *ift, FILE *fp, TPCSTATUS *status)
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)
void statusInit(TPCSTATUS *s)
char * errorMsg(tpcerror e)
void statusSet(TPCSTATUS *s, const char *func, const char *srcfile, int srcline, tpcerror error)
int verbose
Verbose level, used by statusPrint() etc.
tpcerror error
Error code.
Header file for library libtpccsv.
Header file for library libtpcextensions.
Header file for library libtpcift.