zoukankan      html  css  js  c++  java
  • C语言读取文件大量数据到数组

    针对.txt文档的大量有规律数据,譬如100行8列的数据将其读取到二维数组(矩阵)中,留作之后的数据处理。

    改程序通过宏定义的方法来确定将要读取程序的行数和列数,将数据读取到二维数组data[100][8]中。

    同一时候增加一个測试函数read(),功能是能够获取txt文档大量数据的行数,本项目中待定使用。

    程序例如以下:

    #include<stdio.h>
    #include<stdlib.h>
    /*
    为了以后特定行数的读取,採用宏定义的方法来确定行数
    程序中read()读取该文件的行数,当未知文件行数时可使用返回值做全局变量
    */
    #define N 115   //行
    #define L 8       //列


    const char file_name[50] = "d:\dat.txt";
    void read(FILE *fp)
    {    int row=0;
    char mid;
    while(!feof(fp))
         {   
               mid=fgetc(fp); //从txt文本中读取一个字符赋值给mid
               if(mid==' ') //假设这个字符为换行符
                row++; //记录txt数据行数
          }
    row++; //最后一行没有换行符
        printf("行数为%d ",row);
        rewind(fp); //回文件起始位置 
    }
    int main(int argc, char *argv[])
    {
    FILE *fp;
    double data[N][L] = {0.0};   //二维数组
    int index[N] = {0}; //二维数组行下标
    double temp;  
    int i, j;
    int count = 0;  //计数器,记录已读出的浮点数
    if((fp=fopen(file_name, "rb")) == NULL) {
    printf("请确认文件(%s)是否存在! ", file_name);
    exit(1);
    }
           read(fp);     //读取行数
    while(1==fscanf(fp, "%le", &temp)) //lf,le都能够。但别的都不能够,%e也不行
    {
    data[(index[count%L])++][count%L] = temp;
    count++;
    }
    fclose(fp);   //关闭句柄
    /******处理数据****************/
    for(i=0;i<N;i++)
    {   printf("第%d行数据: ",i+1);
    for(j=0;j<L;j++)
    {
     printf("%5.3le ", data[i][j]);//.16f能够,le时以科学计数法显示
    }
    printf(" ");
    }

    return 0;
    }

  • 相关阅读:
    C语言中结构体变量之间赋值
    ZOJ
    【微服务干货系列】使用微服务架构之前,你必须知道的
    使用heartbeat+monit实现主备双热备份系统
    rsync 3.1.1源代码编译安装配置
    oracle 11g GRID 中 关于 OLR 须要知道的一些内容
    字母游戏
    移动开发人员应避免的 4 大陷阱
    看看这个经常被0基础程序猿弄不懂的 “事件”
    【剑指offer】和为定值的连续正数序列
  • 原文地址:https://www.cnblogs.com/llguanli/p/6962194.html
Copyright © 2011-2022 走看看