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

来源:百度知道 编辑:UC知道 时间:2024/05/29 10:11:17
我有一个csv文件里面内容:
1,20080101,asd,b,30.3,16.7,42.8,81.1,90.2
1,20080102,asd,b,51.6,92.8,23.1,40.6,21.6
1,20080103,asd,b,94,16.5,56.1,63.6,69
1,20080104,asd,b,73,63.9,65.1,44.9,41.7

代码:
#include<stdio.h>
struct student_type
{
int no;
int id;
char name[20];
char sex;
float shuxue;
float yuwen;
float wuli;
float huaxue;
float yingyu;
}
stud[16],*st;
struct sum_type
{
float shuxue;
float yuwen;
float wuli;
float huaxue;
float yingyu;
float pingjun;
};
main()
{
FILE *fp; /*定义一个文件指针*/
FILE *cp; /*定义一个文件指针*/
struct sum_type qq;
st=stud;
int i;
float sx=0,yw=0,wl=0,hx=0,yy=0;
fp=fopen("分数表.csv", "rb"); /*打开文件只读*/
for(i=0;i<16;i++,st++)
{
fscanf(fp,"%d,%d,%s,%c,%f,%f,%f,%

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