扫描一个多列的文件,将每一列扫描到一个结构体变量中

本文介绍了一种从特定格式的文本文件中读取并解析数据的方法,利用自定义的结构体来存储每一行的关键信息,包括坐标ID及XYZ值等。通过分析文件的指定行,实现了对数据的有效读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.文件的内容 a.txt
    16 172 1001171005 12 0 260 17 8 17 11 15 34 500 43.432743 0.229601 0.000000 -2001 269 140 -13 25 14 58 100 0 1502939736 83020 0.000000 4 BS1001171009 38220872 BS1001171008 38220310 BS1001171007 38220288 BS1001171010 38220856
    16 172 1001171005 12 0 263 17 8 17 11 15 34 750 0.000000 0.000000 0.000000 -1998 251 125 -23 28 10 58 100 0 1502939736 332357 0.000000 2 BS1001171009 38208995 BS1001171008 0
    16 172 1001171005 12 0 264 17 8 17 11 15 35 0 43.374115 0.002367 0.000000 -2008 264 151 -10 14 21 58 100 0 1502939736 582413 0.000000 4 BS1001171009 38251504 BS1001171008 38250900 BS1001171007 38250912 BS1001171010 38251489
    16 172 1001171005 12 0 266 17 8 17 11 15 35 250 43.469775 0.240061 0.000000 0 0 0 0 0 0 0 0 0 1502939736 832438 0.000000 4 BS1001171009 29450786 BS1001171008 29450226 BS1001171007 29450217 BS1001171010 29450757
    16 172 1001171005 12 0 267 17 8 17 11 15 35 500 0.000000 0.000000 0.000000 -2001 261 121 -18 20 21 58 90 0 1502939737 82466 0.000000 4 BS1001171009 0 BS1001171008 0 BS1001171007 38226955 BS1001171010 38227487
    16 172 1001171005 12 0 268 17 8 17 11 15 35 750 43.454180 0.378724 0.000000 -2006 250 147 -4 19 11 58 90 0 1502939737 332469 0.000000 4 BS1001171009 38249544 BS1001171008 38248974 BS1001171007 38248959 BS1001171010 38249501
    16 172 1001171005 12 0 270 17 8 17 11 15 36 0 0.000000 0.000000 0.000000 -2010 262 131 -20 20 24 58 90 0 1502939737 582329 0.000000 4 BS1001171009 38253488 BS1001171008 0 BS1001171007 38252886 BS1001171010 38253446
    16 172 1001171005 12 0 271 17 8 17 11 15 36 250 0.000000 0.000000 0.000000 -2005 283 145 -14 13 32 58 90 0 1502939737 832397 0.000000 4 BS1001171009 38222067 BS1001171008 0 BS1001171007 38221486 BS1001171010 38222034

二.结构体定义

typedef struct _coordinate_value
{
    int  coor_id;
    char x_value[256];
    char y_value[256];
    char z_value[256];
}coordinate_value;

三.函数实现:只扫描文件的4,14,15,16行

int read_file(char *file_name, coordinate_value brone[])
{
    FILE *fd;
    char buf[2048];
    memset(buf, 0x00, sizeof(buf));
    int wordmove = 0;
    int clcount = 0;
    char column[256];
    int i;
    int struct_arrray_size = 0;
    if(file_name == NULL)
    {
        printf("file_name is NULL\n");
        return -1;
    }

    fd = fopen(file_name, "r+");
    if(fd == NULL)
    {
        printf("open file fail\n");
        return -1;
    }
    while(fgets(buf, 2048, fd))
    {
        if(!strlen(trim(buf)))
        {
            continue;
        }
        wordmove = 0;
        for(clcount = 0; clcount <= 37; clcount++)
        {
            memset(column, 0x00, sizeof(column));
            for(i = 0; i < strlen(buf); i++)
            {
                if(buf[wordmove] != ' ')
                {
                    column[i] = buf[wordmove];
                    wordmove++;
                }
                else
                {
                    wordmove++;
                    break;
                }
            }

            if(clcount == 3)
            {
                brone[struct_arrray_size].coor_id = atoi(trim(column));
            }
            else if(clcount == 13)
            {
                memcpy(brone[struct_arrray_size].x_value, trim(column), strlen(trim(column)));
            }
            else if(clcount == 14)
            {
                memcpy(brone[struct_arrray_size].y_value, trim(column), strlen(trim(column)));

            }
            else if(clcount == 15)
            {
                memcpy(brone[struct_arrray_size].z_value, trim(column), strlen(trim(column)));
            }
        }
        struct_arrray_size++;
    }
    return struct_arrray_size;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

The_Web3_社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值