| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5397 人关注过本帖
标题:关于文件数据处理
只看楼主 加入收藏
ton_well
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2015-10-8
收藏
得分:0 
回复 9楼 grmmylbs
对了,那个6125是根据什么来的

新手报到
2016-03-14 15:40
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
每组数据的最后一个id都是6165,不是吗?
2016-03-14 15:43
ton_well
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2015-10-8
收藏
得分:0 
回复 12楼 grmmylbs
对的,我看成截图的文件了。我想问一下新生成的数组的i是一直增大下去,还是到的id=6165时然后重新重一开始的?我对malloc不是太了解,谢了

新手报到
2016-03-14 17:43
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
这里malloc等价于Data result[6165];只是这个太大了
收到的鲜花
  • ton_well2016-03-28 17:11 送鲜花  3朵  
  • ton_well2016-03-28 17:11 送鲜花  3朵  
2016-03-14 17:50
ton_well
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2015-10-8
收藏
得分:0 
回复 6楼 grmmylbs
我按照您上次的知道又写了一个文件对data文件处理,
ITEM: TIMESTEP
10000
ITEM: NUMBER OF ENTRIES
2088
ITEM: BOX BOUNDS pp pp pp
-5 25
-5 25
-2 52
ITEM: ENTRIES index c_1[1] c_1[2] c_1[3] c_2[1]c_2[2]
主要是看每组当中的第四行每次增加量,但是每次运行到最后一组时就会出现debug错误,不知道是怎么回事,希望您能帮忙看下,万分感谢
#include
#include
FILE *pfile;
typedef struct
{
    int id;
    int atom1;
    int atom2;
    int type;
    float x;
    float y;
} Data;
int main()
{
    Data tmp[50]; //定义一个临时变量,存储每一行数据
    Data *result; //这个数组长度要与文件行数相一致,不能小于
    int n, i = 1, count,number, sum=0; float S = 0, m, x1, y1, z1 ;
    int chains,ret;
    FILE *infile;


    infile = fopen("bond.dump", "r");
    if (infile == NULL)
    {
        printf("\nFailed to open the file");
        exit(1);
    }
    //注意分配内存时 数字的大小对应ID大小
    for (i = 0; i < 9; i++)
    {
        ret = fgets((char *)tmp, sizeof(tmp), infile); //跳过文字行
        if(i==3)
        {
            sscanf((char *)tmp, "%d", &(number)); //放到数组中
        }
   
    }   

    result = malloc(number * sizeof(Data));
    while (ret)
    {        
        memset((void *)result,0, number * sizeof(Data));
        i = 1;
        while (fgets((char *)tmp, sizeof(tmp), infile)) //读每一行
        {
            sscanf((char *)tmp, "%d %d %d %d %f %f", &(result[i].id), &(result[i].atom1), &(result[i].atom2), &(result[i].type), &(result[i].x),&(result[i].y)); //放到数组中
            printf("%d %d  %d %d    %d     %f   %f\n", i, result[i].id, result[i].atom1, result[i].atom2,result[i].type, result[i].x, result[i].y); //测试显示到屏幕上
        
        if (i == number)
         {
            sum=number-2088;
      //      printf("%d\n",sum);
            if((pfile=fopen("output.data","a"))==NULL)  printf("lFile could not be opened.\n");
            else
            {
                fprintf(pfile,"%d\n", (number-2088) );
            }
            fclose(pfile);

            for (i = 0; i < 9; i++)
            {
                ret = fgets((char *)tmp, sizeof(tmp), infile); //跳过非数值行
                if(i==3)
                {
                    sscanf((char *)tmp, "%d", &(number)); //放到数组中
                    printf("%d\n",number);
                }
            }
            break;
         }

        i++;            
     }
      
   }
   
    free(result);
    fclose(infile);
    system("pause");

    return 0;

}

新手报到
2016-03-28 15:58
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
你这次处理的文件格式和之前不一样了?能再发一下新的文件么
收到的鲜花
  • ton_well2016-03-28 17:07 送鲜花  3朵   附言:我很赞同
  • ton_well2016-03-28 17:07 送鲜花  3朵  
2016-03-28 16:18
ton_well
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2015-10-8
收藏
得分:0 
回复 16楼 grmmylbs
好的,谢谢了。主要是2088这一项是逐渐增加的,就是说里面的行数在不断增加的,我上面运行都没问题,就是最后一组回出现debug错误
ITEM: TIMESTEP
10000
ITEM: NUMBER OF ENTRIES
2088
ITEM: BOX BOUNDS pp pp pp
-5 25
-5 25
-2 52
[local]1[/local]

新手报到
2016-03-28 16:27
ton_well
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2015-10-8
收藏
得分:0 
回复 16楼 grmmylbs
bond.zip (1.46 MB)
附件

新手报到
2016-03-28 16:30
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
因为你的number是一直在涨的,所以你一开始result 申请的内存过小了。你得预先知道number的 最大值,按最大值来申请。
收到的鲜花
  • ton_well2016-03-28 17:01 送鲜花  3朵   附言:我很赞同
2016-03-28 16:51
ton_well
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2015-10-8
收藏
得分:0 
回复 19楼 grmmylbs
果然是这样,我懂了,我原以为每次循环申请一次内存,原来只是申请一次,一开始内存是小了

新手报到
2016-03-28 17:01
快速回复:关于文件数据处理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026977 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved