读取不同格式文件的两种方式

本文介绍了两种使用C语言从文件中读取数据的方法。方式一适用于每行包含单一数值的情况,通过fscanf函数逐个读取浮点数至数组。方式二针对每行含有多列数据的情形,先按行读取再利用字符串分割处理。

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

方式一:-----------含有多行,每行含有一列数据


int FileReader(char * file,double * a)
{
    FILE * fp1 = fopen(file, "r");//打开输入文件
    if (fp1==NULL) {//若打开文件失败则退出
        puts("不能打开文件!");
        return 0;
    }
    for(int i=0;fscanf(fp1,"%lf",a+i)!=EOF;i++);//从输入文件连续读取浮点型数到数组a
    fclose(fp1);//关闭输入文件
    return 1;
}


方式二:-----------含有多行,每行含有多列数据



 char * topo[5000];  //将topo赋给buff;

int spec = 5000; //表示行数

#denfine MAX_LINE_LEN 4000


int read_file(char ** const buff, const unsigned int spec, const char * const filename)
{
    FILE *fp = fopen(filename, "r");
    if (fp == NULL)
    {
        PRINT("Fail to open file %s, %s.\n", filename, strerror(errno));
        return 0;
    }
  //  PRINT("Open file %s OK.\n", filename);


    char line[MAX_LINE_LEN + 2];
    unsigned int cnt = 0;
    while ((cnt < spec) && !feof(fp))
    {
        line[0] = 0;
        fgets(line, MAX_LINE_LEN + 2, fp);
        if (line[0] == 0)   continue;
        buff[cnt] = (char *)malloc(MAX_LINE_LEN + 2);
        strncpy(buff[cnt], line, MAX_LINE_LEN + 2 - 1);
        buff[cnt][4001] = 0;
        cnt++;
    }
    fclose(fp);

    return cnt;
}

//对topo进行操作,取出每一列的数据

int edge_num = 5000;

char * delim = ",|\n";  //以制定的格式进行列的分割
char *p = NULL;
int i = 0, j = 0;
int value = 0;


for(i=0; i<edge_num; i++) //对每一行进行操作
{
memcpy(buffer, topo[i], strlen(topo[i]));
j = 0;
p = strtok(buffer, delim);  //用到字符串的分割函数
//while(NULL != p)
while(4 != j)    //需要分割的列书为4行
{
value =atoi(p);

if(0 == j%4)
{
LinkID = value;   //取得第一列的数字
}
j++;
p = strtok(NULL, delim);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值