关于文件数据处理
程序代码:
我写了一个对文件里面数据处理的程序,具体做法是读取文本,装入数组中然后进行计算。但是我是半路出家只能对纯数字文本进行处理,但是每次出的结果是按时间间隔一段出来的,我现在的做法是把数据提出来重新放到一个新的文件里面,数据太多时就无法处理了。请问大家有是办法处理这个的? 求大神帮忙,不胜感激!!!! 具体文件在最后面dump2.zip。 程序如下: #include<stdio.h> #include<stdlib.h> typedef struct { int id; int type; float x; float y; float z;[local]3[/local] } Data; int main() { Data tmp[2800]; //定义一个临时变量,存储每一行数据 Data result[2800]; //这个数组长度要与文件行数相一致,不能小于 int n,i=1,k=1,count=0; float sum,S,m,x1,y1,z1;int chains; FILE *infile; infile=fopen("dump.lammpstrj","r"); if(infile==NULL) { printf("\nFailed to open the file"); exit(1); } fgets( tmp, sizeof(tmp), infile ); //跳过首行 i=1; while( fgets( tmp, sizeof(tmp), infile ) ) //读每一行 { sscanf( tmp,"%d %d %f %f %f",&(result[i].id),&(result[i].type),&(result[i].x),&(result[i].y),&(result[i].z)); //放到数组中 printf("%d %d %d %f %f %f\n",i,result[i].id,result[i].type,result[i].x,result[i].y,result[i].z); //测试显示到屏幕上 i++; } fclose(infile); i=1;S=0;sum=0;chains=1;//计算链取向率,根据分子链长度设定N,n,最后要除以K=N*(n-2)。 while(chains<=100) { for(i=k;(i+2)<=2800;i++) { x1=(result[i+2].x-result[i].x); y1=(result[i+2].y-result[i].y); z1=(result[i+2].z-result[i].z); m=y1*y1/(x1*x1+y1*y1+z1*z1); S=S+(3*m-1)/2;printf("%f\n",S);//过程没问题 if( (i+2)%28==0 ) { sum=sum+S; S=0; k=i; k=k+3; count++;printf("%f\n",sum); break; } } chains++; } n=(i+2)/count; chains=chains-1; printf("%d\n",n); printf("%d\n",chains); //检查链与主链骨架数是否正确 printf("%f\n",sum/(chains*(n-2))); system("pause"); return 0; }
dump2.zip
(1.57 MB)