C语言解析csv格式文件

文章介绍了CSV文件格式,作为纯文本存储表格数据的方式。它由记录组成,每条记录包含相同字段,以逗号分隔。文中给出一个简单的CSV文件示例,并通过C语言代码展示了如何解析文件内容,逐行读取并分割数据存入二维数组。
摘要由CSDN通过智能技术生成

csv文件格式

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。

CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来开启,再则先另存新档后用EXCEL开启,也是方法之一。

csv文件示例

一个简单的csv文件:

csv文件解析

csv文件内容:

序号,姓名,性别,年龄,描述
1,张珊,,29,产品经理
2,李思,,31,架构师
3,王伟,,27,开发工程师
4,陈亮,,26,测试工程师

首先打开文件,按行读取一行数据,使用strtok函数基于逗号对一行的数据进行分割,并存入二维数组中。

#include <stdio.h>
#include <stdlib.h>
#include "stdint.h"
#include "string.h"

#define PATH_CSV    "./test.csv"

int parse_csv(uint8_t *path);

int main()
{
    int ret = 0;

    ret = parse_csv(PATH_CSV);

    printf("Hello world! %d\n", ret);

    system("pause");
    return 0;
}

int parse_csv(uint8_t *path)
{
    FILE *fp = fopen(path, "rw");
    uint8_t buf[200];
    char *token = NULL;
    char arr[5][100];
    int line = 0;
    int i = 0;
    int idx = 0;

    if(fp == NULL)
    {
        printf("file open failed: %s\n", path);
        return -1;
    }

    while(fgets(buf, sizeof(buf)/sizeof(buf[0]), fp) != NULL)  //每次读取一行,最多读取200字节
    {
        token = strtok(buf, ",");   //对读取的一行数据进行分割
        while(token != NULL)        //依次取出分割后的内容
        {
            strcpy(arr[idx], token);
            idx++;
            token = strtok(NULL, ",");
        }
        line++;

        printf("line %d: \n", line);
        for(i = 0; i < idx; i++)
        {
            printf("arr[%d]=%s\n", i, arr[i]);
        }
        idx = 0;
        memset(buf, 0, sizeof(buf)/sizeof(buf[0]));
    }

    fclose(fp);

    return 0;
}

编译并运行:


line 1:
arr[0]=序号
arr[1]=姓名
arr[2]=性别
arr[3]=年龄
arr[4]=描述

line 2:
arr[0]=1
arr[1]=张珊
arr[2]=女
arr[3]=29
arr[4]=产品经理

line 3:
arr[0]=2
arr[1]=李思
arr[2]=男
arr[3]=31
arr[4]=架构师

line 4:
arr[0]=3
arr[1]=王伟
arr[2]=男
arr[3]=27
arr[4]=开发工程师

line 5:
arr[0]=4
arr[1]=陈亮
arr[2]=男
arr[3]=26
arr[4]=测试工程师

Hello world! 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

whik1194

如果对你有帮助,欢迎打赏。谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值