#include #include #include #include "nr.h" #include "nrutil.h" #include "nrutil.c" char *pname; void help(void); main(int argc, char** argv) { long N,skip; int i,c,spc,frst; int selcol; FILE *fp1; pname = argv[0]; selcol = 1; skip = 0; for (i = 1; i < argc && *argv[i] == '-'; i++) { switch(argv[i][1]) { case 'c': /* set start */ selcol = atoi(argv[++i]); if(selcol < 1) selcol = 1; break; case 's': /* set start */ skip = atol(argv[++i]); if(skip < 0) selcol = 0; break; case 'h': /* print usage information and quit */ default: help(); exit(1); } } if(argc < 2){ help(); exit(1); } if((fp1 = fopen(argv[argc-1],"r")) == NULL){ fprintf(stderr,"Input file, %s, not found!\n",argv[argc-1]); return 0; } spc = 0; frst = 0; N = 0; while((c = fgetc(fp1)) != EOF){ if(frst == 0 && (c == 9 || c == 32)){ ;;; }else if(frst == 0 && c != 9 && c != 32){ frst = 1; if(N >= skip && selcol == 1) fprintf(stdout,"%c",c); /* 行の最初の意味のある文字 */ }else if(frst >= 1 && ((spc == 0 && (c == 9 || c == 32)) || c == 44)){ spc = 1; // fprintf(stdout,"[%d]",frst); frst++; }else if(frst >= 1 && spc == 1 && (c == 9 || c == 32 || c == 44)){ ;;; }else if(c == 10){ // if(spc == 0){ // fprintf(stdout,"[%d]",frst); // } if(N >= skip) fprintf(stdout,"\n"); N++; frst = 0; spc = 0; }else{ spc = 0; if(N >= skip && frst == selcol) fprintf(stdout,"%c",c); } } fprintf(stderr,"The number of lines %ld\n",N); return 1; } static char *help_strings[] = { "使用法: %s [OPTIONS ...] 入力ファイル名\n", "スペース、タブ、コンマを区切り文字とみなす", "設定できるOPTION:", " -c N 行の最初から N 列目のみをを標準出力に出力", " -s n n 行めまでを無視 (出力しない)", " -h ヘルプ", " 例)csamp -c 2 file.dat > output.dat", " ・・・・・ 2番目の列のみがoutput.datに保存される", NULL }; void help(void) { int i; (void)fprintf(stderr, help_strings[0], pname); for (i = 1; help_strings[i] != NULL; i++) (void)fprintf(stderr, "%s\n", help_strings[i]); }