关于文件数据处理
程序代码:我写了一个对文件里面数据处理的程序,具体做法是读取文本,装入数组中然后进行计算。但是我是半路出家只能对纯数字文本进行处理,但是每次出的结果是按时间间隔一段出来的,我现在的做法是把数据提出来重新放到一个新的文件里面,数据太多时就无法处理了。请问大家有是办法处理这个的?
求大神帮忙,不胜感激!!!!
具体文件在最后面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;
}







