⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arguments.c

📁 时间序列工具
💻 C
字号:
/* read command line options *//* Copyright (C) Thomas Schreiber (1997) */#include <stdio.h>#include <stdlib.h>#include <stddef.h>#include <string.h>#define MAX(a,b) ((a)>(b)? (a) : (b))void usage(char *);long *largs=NULL;long nargs;void argdel(int argc, long i){   if(largs==NULL){      largs=calloc(argc, sizeof(long));      nargs=argc-1;   }   if(i==0 || i>=argc) return;   if(largs[i]) return;   largs[i]=1;   nargs-=1;}long nstrings(){   return nargs==0 ? 1: nargs;}char *nthstring(int argc, char *argv[], long n){   long iv, i;   for(iv=0, i=1; i<argc; i++){      if (!largs[i]) iv++;      if(iv==n) break;   }   return i>=argc? "-": argv[i];}long lopt(int argc, char *argv[], char c){   long i;   for (i=1; i<argc; i++)       if (argv[i][0]=='-' && argv[i][1]==c){         argdel(argc,i);         return 1;      }   return 0;}  long lmust(int argc, char *argv[], char c){   long lval, i;   for (i=1; i<argc; i++) {      if (argv[i][0]=='-' && argv[i][1]==c) {         argdel(argc,i);         if ((long)strlen(argv[i])==2) {	    if (++i < argc)	       if(sscanf(argv[i],"%ld",&lval)==1){                  argdel(argc,i);                  return lval;	       }         }         else 	    if(sscanf(argv[i]+2,"%ld",&lval)==1) return lval;         usage(argv[0]);      }   }   usage(argv[0]);}  double fmust(int argc, char *argv[], char c){   long i;   double fval;   for (i=1; i<argc; i++) {      if (argv[i][0]=='-' && argv[i][1]==c) {         argdel(argc,i);         if ((long)strlen(argv[i])==2) {	    if (++i < argc)	       if(sscanf(argv[i],"%lf",&fval)==1){                  argdel(argc,i);                  return fval;	       }         }         else 	    if(sscanf(argv[i]+2,"%lf",&fval)==1) return fval;         usage(argv[0]);      }   }   usage(argv[0]);}  long lcan(int argc, char *argv[], char c, long ldef){   long lval, i;   for (i=1; i<argc; i++) {      if (argv[i][0]=='-' && argv[i][1]==c) {         argdel(argc,i);         if ((long)strlen(argv[i])==2) {	    if (++i < argc)	       if(sscanf(argv[i],"%ld",&lval)==1){                  argdel(argc,i);                  return lval;	       }         }         else 	    if(sscanf(argv[i]+2,"%ld",&lval)==1) return lval;         return ldef;      }   }   return ldef;}  char *scan(int argc, char *argv[], char c, char* sdef){   long i;   for (i=1; i<argc; i++) {      if (argv[i][0]=='-' && argv[i][1]==c) {         argdel(argc,i);         if ((long)strlen(argv[i])==2) {            if (++i < argc) {               if(argv[i][0]=='-') return sdef;               argdel(argc,i);               return argv[i];	    }         }         else 	    return argv[i][2]=='-'? sdef: argv[i]+2;         return sdef;      }   }   return sdef;}  double fcan(int argc, char *argv[], char c, double fdef){   long i;   double fval;   for (i=1; i<argc; i++) {      if (argv[i][0]=='-' && argv[i][1]==c) {         argdel(argc,i);         if ((long)strlen(argv[i])==2) {	    if (++i < argc)	       if(sscanf(argv[i],"%lf",&fval)==1){                  argdel(argc,i);                  return fval;	       }         }         else 	    if(sscanf(argv[i]+2,"%lf",&fval)==1) return fval;         usage(argv[0]);      }   }   return fdef;}  static long line_count;long getfile(char *file, char *file_raw, long col){   char *com;   line_count=0;   strcpy(file,file_raw);   if(col==0){      com=strrchr(file,(int)',');      if(com!=NULL){         if(strrchr(com,(int)'_')==NULL)             if(sscanf(com+1,"%ld",&col)==1) *com='\0';      }   }   if(col>0) fprintf(stderr,"reading from column %ld\n",col);   return col;}void putcol(char *file, long col){   if(col>0) sprintf(file+strlen(file),",%ld",col);}long readline(FILE *fp, double *y, long col){   long i, ic, icc;   char c;   if(col==0) col=1;   for(i=1; i<=col; i++){      ic=fscanf(fp,"%lf",y);      if(ic==EOF) return ic;      if(ic!=1) break;   }   line_count++;   do      icc=fscanf(fp,"%c",&c);   while(c!='\n' && icc!=EOF);   return ic;}long readdum(FILE *fp){   long ic;   char c;   do      ic=fscanf(fp,"%c",&c);   while(c!='\n' && ic!=EOF);   line_count++;   return ic;}long readval(FILE *fp, double *y, long col){   long ic;   do{      ic=readline(fp,y,col);      if(ic!=EOF && ic!=1)          fprintf(stderr,"data in line %ld ignored\n", line_count);   }   while(ic!=EOF && ic!=1);   return ic;}void whatido(int argc, char *argv[], char *text, char *progname){   fprintf(stderr,"%s: %s\n", progname, text);   if(lopt(argc,argv,'h')) usage(progname);   argdel(argc,0);}char *getout(int argc, char *argv[], long *iget){   char *fout;   *iget=0;   fout=scan(argc, argv,'o',"");   if(fout[0]!='\0') return fout;   *iget=lopt(argc,argv,'o');   return fout;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -