unbiliverbal 2022-05-10 20:33 采纳率: 50%
浏览 43
已结题

关于采用VS读取大型文本文件

问题遇到的现象和发生背景

您好,非常感谢您的回答(我没想到,我只是存着侥幸的心理发布了一个问题,您竟然如此郑重的回复,非常感谢)
在这里,我表示非常非常的感谢。
其实在问题的描述上,我还不够精确,我在这里给您具体说明一下:
这个问题是基于GNSS数据处理的问题。
通过GNSS数据处理软件,我得到了一个结果文件*.pos(下面用文件表示);在这个文件中有文件头和数据文件,我想做的就是,从文件中,提取我想要的数据。这个数据有很多行,大概5600行。
文件如下所示:

img

我希望提取的是这三列数据:“e-baseline(m) n-baseline(m) u-baseline(m)”->“-18756.4389 1496.3545 -26.1152 ”

我的解答思路和尝试过的方法

我先学习您的代码,有遇到的问题可否在和您交流?

我想要达到的结果

我的最终想达到的结果,是想“e-baseline(m) n-baseline(m) u-baseline(m)”这三列,每一行的数据取平均值,得到三个平均值和我提供的值(真值)对比;
同样,我还有N个不同的文件,一一需要得到三列平均值,和我提供的值(真值)对比;取和真值差距最小的一套平均值对应的文件。

  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-05-10 21:59
    关注

    仅供参考:

    //NAME: essaie bla bla
    //DIMENSION: 8
    //DATA
    //1  14  15
    //2  11  10
    //3  6   4
    //4  7   13
    //5  9   21
    //6  19  3
    //7  1   5
    //8  8   8
    //EOF
    //
    // 文本文件中可能还含有其他内容,但是需要用到的内容即以上
    
    //比如data.txt:
    //NAME: essaie bla bla
    //其它内容
    //DIMENSION: 8
    //其它内容
    //DATA
    //其它内容
    //1  14  15
    //其它内容
    //2  11  10
    //其它内容
    //3  6   4
    //其它内容
    //4  7   13
    //其它内容
    //5  9   21
    //其它内容
    //6  19  3
    //其它内容
    //7  1   5
    //其它内容
    //8  8   8
    //其它内容
    //EOF
    
    // 目标是要获取NAME后字串,DIMENSION后数值,以及DATA以下的数值
    // 其中NAME就是随便个字句,DIMENSION是城市数量,DATA以下是城市编号,X坐标,Y坐标
    // 所有的这些将赋值给一个事先定义好的结构
    #include <stdio.h>
    #include <string.h>
    #define MAXCPL   80   //每行最大字符数
    #define MAXCITY  100  //每组数据中DATA最多项数,DIMENSION的最大值
    #define MAXNAMEL 32   //NAME最大长度
    struct S {
        char NAME[MAXNAMEL+1];
        int  DIMENSION;
        struct D {
            int NO;
            int X;
            int Y;
        } DATA[MAXCITY];
    } s;
    FILE *f;
    int st,n,i;
    char ln[MAXCPL];
    int main() {
        f=fopen("data.txt","r");
        if (NULL==f) {
            printf("Can not open file data.txt!\n");
            return 1;
        }
        st=0;
        n=0;
        while (1) {
            if (NULL==fgets(ln,MAXCPL,f)) break;
            if (st==0) {
                if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;
            } else if (st==1) {
                if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;
            } else if (st==2) {
                if (0==strcmp(ln,"DATA\n")) st=3;
            } else if (st==3) {
                if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {
                    n++;
                    if (n>=MAXCITY || n>=s.DIMENSION) break;
                }
            }
        }
        fclose(f);
        printf("s.NAME=[%s]\n",s.NAME);
        printf("s.DIMENSION=%d\n",s.DIMENSION);
        for (i=0;i<n;i++) {
            printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);
        }
        return 0;
    }
    //s.NAME=[essaie bla bla]
    //s.DIMENSION=8
    //s.DATA[0].NO,X,Y=1,14,15
    //s.DATA[1].NO,X,Y=2,11,10
    //s.DATA[2].NO,X,Y=3,6,4
    //s.DATA[3].NO,X,Y=4,7,13
    //s.DATA[4].NO,X,Y=5,9,21
    //s.DATA[5].NO,X,Y=6,19,3
    //s.DATA[6].NO,X,Y=7,1,5
    //s.DATA[7].NO,X,Y=8,8,8
    
    
    
    

    学会我给的参考代码后,你提的需求应该都不难实现。
    如有新问题,在此帖问即可。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月26日
  • 已采纳回答 5月18日
  • 创建了问题 5月10日

悬赏问题

  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?
  • ¥15 关于#vue.js#的问题:修改用户信息功能图片无法回显,数据库中只存了一张图片(相关搜索:字符串)
  • ¥15 texstudio的问题,