改进版的从文本文件读取数据

本文介绍了一种从文本文件中读取数据的方法,适用于KNN机器学习算法的数据预处理过程。该方法通过预定义最大行数和每行的属性数量来简化数据读取流程,避免了对整个文件进行预扫描。

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

前一阵在KNN机器学习算法中提到从文本文件读取数据的问题。

回头又想了想,找到一个比较通用的办法,不用事先扫描一次文本文件了。

预先定义一个最多能读的数据行数:

#define MAX_NUM_LINE  1000

每行的数字属性个数预定义为NUM_COUNT_PER_LINE:
#define NUM_COUNT_PER_LINE  5

//从给定的文件里读取数据,全部数据以一个空白行为结束
void read_data_from_file(FILE * fpr)
{
    if(NULL!=fpr)
    {
        int i=0, r=0, isEnd=1;
        double A[MAX_NUM_LINE][NUM_COUNT_PER_LINE] = {0.0};
        char B[MAX_NUM_LINE];
        while ((isEnd!=-1)&&(r<MAX_NUM_LINE))
        {
            for(i=0;i<NUM_COUNT_PER_LINE;i++)
            {
                isEnd=fscanf(fpr, "%lf ", A[r]+i); //读取数字数据,以空格分隔
                if(isEnd==-1)  //一旦读取完数据,遇到最后的空白行,fscanf()就会返回-1,就要终止读取数据了,先跳出for循环.
                    break;
            }
            if(isEnd==-1)
                break;        //一旦读取完数据,遇到最后的空白行,fscanf()就会返回-1,就要终止读取数据了,先跳出for循环,再跳出while循环.
            isEnd=fscanf(fpr, "%c\n", B+r);
            if(isEnd==1)
                r++;
            else
                break;
        }
        //打印读出的数据,以便验证
        for(int jr=0;jr<r;jr++)
        {
            for(i=0;i<NUM_COUNT_PER_LINE;i++)
                printf("%g\t", A[jr][i]);
            printf("%c\n", B[jr]);
        }
    }
}
//在主函数里调用
int main(int argc, char *argv[])
{
    FILE *fp1;
    fp1 = fopen("l1.txt", "r");
    read_data_from_file(fp1);
    fclose(fp1);
    return(0);
}

经测试,通过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值