📄 fconvert.c
字号:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include "convert.h"#define COMMENT ';'#define SEPARATOR " ,\t\n"#define ENDLINE '\n'#define DATACONTINUE 1#define LASTDATA 0#define NOMOREDATA -1#define INPUTFILE "in.dat"#define OUTPUTFILE "out.dat"#define DATANUM 20//#define DATANUM 5 char* ctype[4] = { "DegToPulse", "RadToPulse", "PulseToDeg", "PulseToRad",};union data{ int idata; double ddata;// long double ddata;};void usage();int getdata(FILE* fdi, FILE* fdo, int datatype, union data* x);int convertline(FILE* fdi, FILE* fdo, int cnvtype);int main(int argc, char *argv[]){ FILE* fdi; FILE* fdo; char *infilename; char *outfilename; int tp; int ret = 1; switch(argc) { case 2: infilename = INPUTFILE; outfilename = OUTPUTFILE; break; case 3: infilename = argv[2]; outfilename = OUTPUTFILE; case 4: infilename = argv[2]; outfilename = argv[3]; break; default: usage(); return -1; } tp = atoi(argv[1]); if(tp > 4 || tp < 1) { usage(); return -1; } ///hide radian convert if(tp == 2 || tp == 4) { usage(); return -1; } printf("program fileconvert.\n"); printf(" convert %s: %s -> %s\n", \ ctype[tp-1], infilename, outfilename); if((fdi = fopen(infilename, "r")) == NULL) { perror("open readfile"); return -1; } if((fdo = fopen(outfilename, "w")) == NULL) { perror("open writefile"); return -1; } while(ret > 0) { ret = convertline(fdi, fdo, tp); // printf("one line get\n"); } fclose(fdi); fclose(fdo); return 0;}int getdata(FILE* fdi, FILE* fdo, int datatype, union data* x){ char c = 0; int i = 0; char s[128] = {0}; char* chk = NULL; while((chk == NULL)||(i == 0)){ c = getc(fdi); if(c == -1) break; if(c == COMMENT) { if(fdo > 0) fprintf(fdo, "%c", c); do { c = getc(fdi); if(fdo > 0) fprintf(fdo, "%c", c); if(c == -1) return NOMOREDATA; }while(c != '\n'); } else { if((chk = strchr(SEPARATOR, c)) == NULL) {// printf("%c", c); s[i] = c; i++; } } } if(i > 0) { if(datatype == 0) { x->idata = atoi(s); // printf("int %d", x->idata); } else { sscanf(s, "%lf", &(x->ddata));// x->ddata = atof(s); // printf("double %e", x->ddata); } if(c == -1) return LASTDATA; } if(c == -1) return NOMOREDATA; return DATACONTINUE;}int convertline(FILE* fdi, FILE* fdo, int cnvtype){ int datanum = 0; int ret = 1; union data x; int datatype; //0:int, 1:double int ix; double dx; while(ret > 0) { datatype = 0;// if(datanum != 0 && cnvtype < 2) { if(cnvtype < 2) { datatype = 1; } ret = getdata(fdi, fdo, datatype, &x); // printf("one data get\n"); if(ret == NOMOREDATA) return ret; //no data if(datanum == 0) { //time fprintf(fdo, "%d, 2",(int)x.ddata); printf("%d ms:\n", (int)x.ddata); }else{ //data switch(cnvtype) { case 1: ix = DegToPulse(x.ddata, datanum); fprintf(fdo, "%d", ix); printf(" original :%4.8lf", x.ddata); printf(" converted :%d\n", ix); break; case 2: ix = RadToPulse(x.ddata, datanum); fprintf(fdo, "%d", ix); printf(" original :%e", x.ddata); printf(" converted :%d\n", ix); break; case 3: dx = PulseToDeg(x.idata, datanum); fprintf(fdo, "%4.8lf", dx); printf(" original :%d", x.idata); printf(" converted :%4.8lf\n", dx); break; case 4: dx = PulseToRad(x.idata, datanum); fprintf(fdo, "%e", dx); printf(" original :%d", x.idata); printf(" converted :%e\n", dx); break; default: printf(" converttype error\n"); } } datanum++; if(datanum > DATANUM) { fprintf(fdo, ", R ,R ,R\n"); return ret; } else { fprintf(fdo, ", "); } } return ret;}void usage(){ printf("usage: fconvert CONVERTTYPE INPUTFILE OUTPUTFILE\n"); printf(" COMVERTTYPE 1 Degree to Pulse\n");// printf(" 2 Radian to Pulse\n"); printf(" 3 Pulse to Degree\n");// printf(" 4 Pulse to Radian\n"); printf(" INPUTFILE (default is \"%s\")\n", INPUTFILE); printf(" OUTPUTFILE (default is \"%s\")\n", OUTPUTFILE);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -