8#include "tpcclibConfig.h"
22static char *info[] = {
23 "Remove column from a CSV or TSV file.",
25 "Usage: @P [options] csvfile column [outputfile]",
31 " @P data.csv 1 data_wo_1st_col.csv",
33 "See also: tacformat, taclist",
54int main(
int argc,
char *argv[])
56 int ai, help=0, version=0, verbose=1;
57 char csvfile[FILENAME_MAX], outfile[FILENAME_MAX];
65 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
66 csvfile[0]=outfile[0]=(char)0;
68 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
71 fprintf(stderr,
"Error: invalid option '%s'\n", argv[ai]);
76 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
85 if(ai<argc) {
strlcpy(csvfile, argv[ai++], FILENAME_MAX);}
86 if(ai<argc) {column=atoi(argv[ai++]);}
87 if(ai<argc) {
strlcpy(outfile, argv[ai++], FILENAME_MAX);}
88 if(ai<argc) {fprintf(stderr,
"Error: invalid argument '%s'.\n", argv[ai]);
return(1);}
90 if(column<1) {fprintf(stderr,
"Error: invalid column.\n");
return(1);}
92 fprintf(stderr,
"Error: missing command-line argument; use option --help\n");
95 if(!outfile[0]) strcpy(outfile, csvfile);
99 printf(
"csvfile := %s\n", csvfile);
100 printf(
"column := %d\n", column);
101 printf(
"outfile := %s\n", outfile);
110 if(verbose>1) fprintf(stdout,
"reading %s\n", csvfile);
113 fp=fopen(csvfile,
"r");
115 fprintf(stderr,
"Error: cannot open file %s\n", csvfile);
120 fclose(fp);
return(2);
125 printf(
"colNr := %d\n", csv.
col_nr);
126 printf(
"rowNr := %d\n", csv.
row_nr);
127 printf(
"separator := '%c'\n", csv.
separator);
130 fprintf(stderr,
"Error: file has only 1 column\n");
134 fprintf(stderr,
"Error: file has only %d column(s)\n", csv.
col_nr);
145 if(csv.
c[i].
col==column-1) {
148 fprintf(stderr,
"Error: cannot delete item.\n");
155 for(
int j=0; j<csv.
nr; j++)
if(csv.
c[j].
col>=column) csv.
c[j].
col--;
163 if(verbose>1) printf(
"writing %s\n", outfile);
165 FILE *fp; fp=fopen(outfile,
"w");
167 fprintf(stderr,
"Error: cannot open file for writing.\n");
170 int ret=
csvWrite(&csv, 0, fp, &status);
176 if(verbose>0) printf(
"edited data saved in %s\n", outfile);
int csvRemoveItem(CSV *csv, int i)
int csvRead(CSV *csv, FILE *fp, TPCSTATUS *status)
int csvWrite(CSV *csv, int regular, 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)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
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.