视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001 知道1 知道21 知道41 知道61 知道81 知道101 知道121 知道141 知道161 知道181 知道201 知道221 知道241 知道261 知道281
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
c%20中如何读取csv和excel文件
2024-05-01 21:14:15 责编:小OO
文档

在panda明亮s中以下哪个二桃杀三士函数可以读取悦耳csv文件?心领神会藕断丝连()A.re美丽ad_exc将门无犬子el()B.潇洒优美read_c心领神会藕断丝连sv()C.同病相怜read_s戤米囤饿杀ql_que自信呆滞ry()答案绳锯木断是:B内容来自懂视网(www.xyx234.com),请勿采集!

小编还为您整理了以下内容,可能对您也有帮助:

关于C语言读CSV文件的问题

csv文件即逗号分隔值文件。

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。

CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

要用C语言读取CSV,首先需要确定文件中定义的字符分隔值,以及每一行各个列的元素格式。

如果所有的元素格式相同,那么可以每行一个一维数组,所有行组成一个二维数组,逐个元素进行读取。

如果元素格式不同,可以按照元素类型,构建一个结构体,每行读到一个结构体变量中,所有行组成一个结构体数组。

下面根据两种情况,按照分隔符为逗号(,),分别举一个例子:

文件名设定为in.csv,每行10个元素。

一、所有元素均相同类型,比如int型。

#include <stdio.h>

int main()

{

    FILE*fp;

    int a[100][10];//定义一个足够大的数组来存储。

    int line = 0;

    int c, i;

    

    fp = fopen("in.csv", "r"); // 以文本方式打开。

    if(fp == NULL) return -1; // 打开文件失败。

    while(1)

    {

        i=0;//列标记清零。

        while(1)

        {

            fscanf(fp, "%d", &a[line][i]);//从文件中读取一个元素。

            c = getchar();//读取下一个字符,可能是分隔符,换行符或文件结尾。

            if(c == 'n'||c == EOF)break;//读完一行,或者到文件结尾,退出读取。

            i++;

        }

        line ++;

        if(c == EOF) break;

    }

    

    fclose(fp); //关闭文件。

    //以下循环用来打印所有读到的值。

    for(i = 0; i < line; i ++)

    {

        for(c = 0; c < 10; c ++)

            printf("%d ", a[i][c]);

        printf("n");

    }       

}

二、每行元素不同。

比如共三列,第一列是int型,第二列是字符串,第三列是float型。

如果分隔符不是空白字符,或者字符串元素中可能存在除分隔符外的其它空白字符,在读取字符串的时候是不能用fscanf函数的。

定义结构体如下

strcut data

{

    int a;

    char s[100]; //根据实际要求,定义足够大的字符数组。

    float f;

};

读取代码如下:#include <stdio.h>

int main()

{

    FILE*fp;

    strcut data a[100];//定义一个足够大的结构体一维数组来存储。

    int line = 0;

    int c,i;

    

    fp = fopen("in.csv", "r"); // 以文本方式打开。

    if(fp == NULL) return -1; // 打开文件失败。

    while(1)

    {

        fscanf(fp, "%d", &a[line].a);//从文件中读取第一个元素。

        c = getchar();//读取分隔符。

        //接下来要读取字符串,需要逐个字符读入,直到出现分隔符为止。

        i = 0;

        while(1)

        {

            a[line].s[i] = getchar();//读入一个字符。

            if(a[line].s[i] == ',')//发现分隔符

            {

                a[line].s[i]='0'; //赋值字符串结束符。

                break;//退出读取字符串。

            }

            i++;

        }

        //由于在读字符串的时候分隔符已经被读取,这里不需要读分隔符,而是直接读下一个元素。

        fscanf(fp, "%f", &a[line].f);//从文件中读取最后一个元素。

        c = getchar();//读取下一个字符,可能是换行符或文件结尾。

        line ++;

        if(c == EOF) break;//到文件结尾,退出读取。

    }

    

    fclose(fp); //关闭文件。

    //以下循环用来打印所有读到的值。

    for(i = 0; i < line; i ++)

    {

        printf("%d %s %fn", a[i].a, a[i].s, a[i].f);

    }       

}下载本文

显示全文
专题