C语言实现解析csv格式文件的示例代码

 更新时间:2023年06月04日 15:29:26   作者:whik1194  
CSV,有时也称为字符分隔值,其文件以纯文本形式存储表格数据(数字和文本),本文为大家整理了C语言解析csv文件的方法,需要的可以参考一下

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

到此这篇关于C语言实现解析csv格式文件的示例代码的文章就介绍到这了,更多相关C语言解析csv文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++类的空指针调用成员函数的代码

    C++类的空指针调用成员函数的代码

    这篇文章主要介绍了C++类的空指针调用成员函数,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • C++容器vector实现通讯录功能

    C++容器vector实现通讯录功能

    这篇文章主要为大家详细介绍了C++容器vector实现通讯录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 利用C++模拟实现STL容器:list

    利用C++模拟实现STL容器:list

    列表是一种顺序容器,它允许在序列中的任何位置执行常量时间插入和删除操作,并允许在两个方向上进行迭代。本文将利用C++模拟实现list,希望对大家有所帮助
    2022-12-12
  • C语言求向量和的两则问题解答分享

    C语言求向量和的两则问题解答分享

    这篇文章主要介绍了C语言求向量和的两则问题解答分享,分别是求连续子向量的最大和和任何连续最接近0的子向量的和的问题,需要的朋友可以参考下
    2016-04-04
  • 基于Matlab实现水波倒影特效的制作

    基于Matlab实现水波倒影特效的制作

    这篇文章主要介绍了如何利用Matlab制作出水波倒影的特效,文中的示例代码讲解详细,对我们学习Matlab有一定帮助,需要的可以参考一下
    2022-03-03
  • CMake语法及CMakeList.txt简单使用小结

    CMake语法及CMakeList.txt简单使用小结

    Cmake主要用于开发跨平台的C++项目,本文主要介绍了CMake语法及CMakeList.txt简单使用小结,具有一定的参考价值,感兴趣的可以了解一下
    2022-05-05
  • C++实现简单的图书管理系统

    C++实现简单的图书管理系统

    本文给大家分享的是使用C++实现简单的图书管理系统的代码,本系统采用了面向对象的程序设计方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • C++ 赋值构造函数注意点介绍

    C++ 赋值构造函数注意点介绍

    下面小编就为大家带来一篇C++ 赋值构造函数注意点介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 浅谈c语言中转义字符的用法及注意事项

    浅谈c语言中转义字符的用法及注意事项

    下面小编就为大家带来一篇浅谈c语言中转义字符的用法及注意事项。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Qt线程QThread开启和安全退出的实现

    Qt线程QThread开启和安全退出的实现

    本文主要介绍了Qt线程QThread开启和安全退出的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06

最新评论