8#include "tpcclibConfig.h"
22static char *info[] = {
23 "Transpose data in a CSV or TSV file.",
24 "Table cells or lines starting with '#' are removed.",
26 "Usage: @P [options] csvfile [outputfile]",
32 " @P data.csv transposed.csv",
34 "See also: rmcmnts, csvrmcol, tacformat, parformat",
55int main(
int argc,
char *argv[])
57 int ai, help=0, version=0, verbose=1;
58 char csvfile[FILENAME_MAX], outfile[FILENAME_MAX];
64 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
65 csvfile[0]=outfile[0]=(char)0;
67 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
70 fprintf(stderr,
"Error: invalid option '%s'\n", argv[ai]);
75 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
84 if(ai<argc) {
strlcpy(csvfile, argv[ai++], FILENAME_MAX);}
85 if(ai<argc) {
strlcpy(outfile, argv[ai++], FILENAME_MAX);}
86 if(ai<argc) {fprintf(stderr,
"Error: invalid argument '%s'.\n", argv[ai]);
return(1);}
89 fprintf(stderr,
"Error: missing command-line argument; use option --help\n");
92 if(!outfile[0]) strcpy(outfile, csvfile);
96 printf(
"csvfile := %s\n", csvfile);
97 printf(
"outfile := %s\n", outfile);
106 if(verbose>1) fprintf(stdout,
"reading %s\n", csvfile);
109 fp=fopen(csvfile,
"r");
111 fprintf(stderr,
"Error: cannot open file %s\n", csvfile);
116 fclose(fp);
return(2);
121 printf(
"colNr := %d\n", csv.
col_nr);
122 printf(
"rowNr := %d\n", csv.
row_nr);
123 printf(
"separator := '%c'\n", csv.
separator);
126 fprintf(stderr,
"Error: invalid data.\n");
130 if(verbose>0) fprintf(stderr,
"Notice: file has only one cell.\n");
138 fprintf(stderr,
"Error: invalid data.\n");
142 fprintf(stderr,
"Error: invalid data.\n");
146 fprintf(stderr,
"Error: cannot transpose data.\n");
154 if(verbose>1) printf(
"writing %s\n", outfile);
156 FILE *fp; fp=fopen(outfile,
"w");
158 fprintf(stderr,
"Error: cannot open file for writing.\n");
161 int ret=
csvWrite(&csv, 0, fp, &status);
167 if(verbose>0) printf(
"edited data saved in %s\n", outfile);
int csvRemoveComments(CSV *csv)
int csvTranspose(CSV *csv)
int csvRemoveEmptyRows(CSV *csv)
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.