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文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Mac下使用Eclipse编译C/C++文件出现 launch failed, binary not found 解决方
这篇文章主要介绍了Mac下使用Eclipse编译C/C++文件出现 launch failed, binary not found 解决方案,需要的朋友可以参考下2014-10-10
最新评论