C codes for VirginiaJ

来源:互联网 发布:检测移动硬盘的软件 编辑:程序博客网 时间:2024/04/30 20:14
#include<stdio.h>const char OUTFILE1[] = "LongestLasing.csv";const char OUTFILE2[] = "AddUp.csv";const char OUTFILE3[] = "AllStocksAllSeasons.csv";#define SIZE 10000#include<stdlib.h>#include<string.h>struct NODE{char name[SIZE];int occupy[12];int longesthit;int accumulatehit;int history;struct NODE * next;};NODE* addnode(NODE* head, char* token){NODE *search,*add;for (search=head; search->next; search=search->next){if (strcmp(search->name,token)==0)return head;}add = (NODE*)malloc(sizeof(NODE));strcpy(add->name,token);add->history=0;add->next=head;head=add;return head;}NODE* resetlist(NODE*head){NODE *one;int k,NUM=0;for (one=head;one->next;one=one->next,NUM++){for (k=0;k<12;k++)one->occupy[k]=0;one->longesthit=0;one->accumulatehit=0;}return head;}NODE* addlist(NODE* head,char*token,int season){NODE *one;for (one=head;one->next;one=one->next)if (strcmp(one->name,token)==0){one->occupy[season]=1;one->history++;return head;}}void print_first_line(NODE *head,FILE*fp1,FILE*fp2){NODE *one;int k=0;fprintf(fp1,",,,");fprintf(fp2,",,,");for (one=head;one->next;one=one->next,k++){fprintf(fp1,"%s,",one->name);fprintf(fp2,"%s,",one->name);}fprintf(fp1,"\n");fprintf(fp2,"\n");}NODE* countlist(NODE*head){NODE*one;int k;for (one=head;one->next;one=one->next){one->longesthit=0;one->accumulatehit=0;for (k=0;k<12;k++){if (one->occupy[k]==0)one->longesthit=0;else {one->longesthit++;one->accumulatehit++;}}}return head;}void printresult(NODE*head, FILE*fp1, FILE*fp2){NODE*one; int k=0;for (one=head;one->next;one=one->next,k++){fprintf(fp1,"%d,",one->longesthit,k);fprintf(fp2,"%d,",one->accumulatehit);}}void main(){FILE *readfp;FILE *fp1 = fopen(OUTFILE1,"w");FILE *fp2 = fopen(OUTFILE2,"w");FILE *fp3;char *token, *stock, FILENAME[100];char line[SIZE];int season,k,count_line=0,LENGTH;NODE*head,*one;while(1){printf("\n欢迎使用本程序\n输入需要处理的文件名(xls格式需先另存为csv格式),文件名以.csv结尾\n");gets(FILENAME);head = (NODE*)malloc(sizeof(NODE));head->next = NULL;if (!(readfp=fopen(FILENAME,"r"))){printf("无法打开文件%s,请检查大小写、空格、扩展名等\n", FILENAME);continue;}fgets(line,SIZE,readfp);fgets(line,SIZE,readfp);while (fgets(line,SIZE,readfp)){k = 0;token = strtok(line,",");stock = token;token = strtok(NULL,",");token = strtok(NULL,",");for (season=0; season<12; season++){for (k=0; k<10; k++){token=strtok(NULL,",");if (token[strlen(token)-1]=='\n')token[strlen(token)-1]='\0';if (strstr(token,"基金")||strstr(token,"fund"))head = addnode(head,token);}}} print_first_line(head,fp1,fp2);rewind(readfp);fgets(line,SIZE,readfp);fgets(line,SIZE,readfp);while (fgets(line,SIZE,readfp)){//For one stockk = 0;head = resetlist(head);token = strtok(line,",");fprintf(fp1,"%s,",token);fprintf(fp2,"%s,",token);token = strtok(NULL,",");fprintf(fp1,"%s,",token);fprintf(fp2,"%s,",token);token = strtok(NULL,",");fprintf(fp1,"%s,",token);fprintf(fp2,"%s,",token);for (season=0; season<12; season++){for (k=0; k<10; k++){token=strtok(NULL,",");if (token[strlen(token)-1]=='\n')token[strlen(token)-1]='\0';if (strstr(token,"基金")||strstr(token,"fund"))head = addlist(head,token,season);}}head = countlist(head);printresult(head,fp1,fp2);fprintf(fp1,"\n");fprintf(fp2,"\n");}// For one stock fclose(readfp);fclose(fp1);fclose(fp2);fp3 = fopen(OUTFILE3,"w");fprintf(fp3,"基金编号,基金名称,十二季度内累计出现次数\n");for (one=head,k=0;one->next;one=one->next,k++){fprintf(fp3,"%d,%s,%d\n",k+1,one->name,one->history);}for (k=0;k<20;k++)printf("-");printf("\n");printf("文件%s处理完成!\n输出文件(可用Excel直接打开)\n\t%s:一个股票各基金的最长连续持有时间\n\t%s:一个股票各基金的累计持有时间\n\t%s:各基金所有季度所有股票的累积前十出现次数\n",FILENAME,OUTFILE1,OUTFILE2,OUTFILE3);for (k=0;k<20;k++)printf("-");printf("\n");}}