c语言读写csv文件

1. csv文件简介

  逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来开启,再则先另存新档后用EXCEL开启,也是方法之一。
  CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是bitASCII是最基本的通用编码。

2.csv文件信息

 1.通过excel打开文件

 2.通过Notepad++打开或记事本打开

3.读取csv文件示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <unistd.h>
/*
"APPID","人脸库","创建时间","用户组ID","修改时间","用户ID","修改时间","人脸url"
"25497897","人脸识别","2022-01-11 16:09:21","wbyq","2022-01-13 11:02:50","18679314703","2022-01-13 11:00:52","https://console.bce.baidu.com/ai/s/facelib/face?appId=3028051&groupId=wbyq&uid=18679514703&faceId=070f81ef00383d7c376aac1c38b73090"
"25497897","人脸识别","2022-01-11 16:09:21","wbyq","2022-01-13 11:02:50","18659514703","2022-01-13 11:00:52","https://console.bce.baidu.com/ai/s/facelib/face?appId=3028051&groupId=wbyq&uid=18679514703&faceId=f83fc8ca898f4d4a2a17ef4dc341187e"
"25497897","人脸识别","2022-01-11 16:09:21","wbyq","2022-01-13 11:02:50","18679514703","2022-01-13 11:00:52","https://console.bce.baidu.com/ai/s/facelib/face?appId=3028051&groupId=wbyq&uid=18679514703&faceId=65041fdb1f58fbd6c3b983045b8f840a"
"25497897","人脸识别","2022-01-11 16:09:21","wbyq","2022-01-13 11:02:50","18679214703","2022-01-13 11:00:52","https://console.bce.baidu.com/ai/s/facelib/face?appId=3028051&groupId=wbyq&uid=18679514703&faceId=39555691bf84a277bee85a2f1cd09e68"
"25497897","人脸识别","2022-01-11 16:09:21","wbyq","2022-01-13 11:02:50","18671514703","2022-01-13 11:00:52","https://console.bce.baidu.com/ai/s/facelib/face?appId=3028051&groupId=wbyq&uid=18679514703&faceId=0ff8d148721ae720c5815934929e77b3"
"25497897","人脸识别","2022-01-11 16:09:21","wbyq","2022-01-13 11:02:50","18679513703","2022-01-13 11:00:52","https://console.bce.baidu.com/ai/s/facelib/face?appId=3028051&groupId=wbyq&uid=18679514703&faceId=aebc792d6c5fec000be59a934dfd28c3"
*/
int readfile_csv(char *filename)
{char c;FILE *fp = fopen(filename,"rb");int file_line=1,file_row=0;fseek(fp,0,SEEK_END);long flen = ftell(fp);printf("len = %ld\n",flen);fseek(fp,0,SEEK_SET);int fd=fileno(fp);//文件指针转文件描述符  if(fd==-1){printf("转换失败\n");return -1;} char *file_addr=mmap(NULL,flen,PROT_READ,MAP_SHARED,fd,0);//内存映射fclose(fp);close(fd);  if(file_addr==NULL){printf("映射失败\n");return -2;}/*统计行*/char *p=file_addr;p=strstr(file_addr,"\"");while(*p){if(*p=='\n'){p=strstr(p,"\"");if(p==NULL)break;file_line++;}else p++;}printf("行:%d\n",file_line);//统计行//"APPID","人脸库","创建时间","用户组ID","修改时间","用户ID","修改时间","人脸url"/*统计列*/int cnt=0;p=file_addr;p=strstr(file_addr,"\"");p++;while(*p && *p!='\n'){while(*p!='"' && *p)p++;p++;cnt++;if(*p=='\n')break;else if(*p==',')p+=2;}printf("列:%d\n",cnt);/*将.csv文件数据保存到数组中*/char buff[file_line][cnt][500];int i,j;p=strstr(file_addr,"\"");p++;for(i=0;i<file_line;i++){for(j=0;j<cnt;j++){int index=0;while(*p!='"' && *p){buff[i][j][index++]=*p;p++;}p++;buff[i][j][index++]='\0';if(*p=='\n'){p=strstr(p,"\"");p++;}else if(*p==',')p+=2;}}munmap(file_addr,flen);/*取消映射*/for(i=0;i<file_line;i++){//printf("\n-------------------------------\n");for(j=0;j<cnt;j++){printf("%s",buff[i][j]);}printf("\n---------------------------------\n");}return 0;
}
int main()
{readfile_csv("1.csv");return 0;
}

运行结果:

4.修改CSV文件

/*
函数功能:修改csv文件
形参:filename --文件名line  --要修改的行(从1开始)row   --要修改的列(从1开始)data  --修改的内容
返回值:成功返回0,失败返回负数
*/
int modifyfile_csv(char *filename,int line,int row,char *data)
{char c;FILE *fp = fopen(filename,"rb");int file_line=1,file_row=0;fseek(fp,0,SEEK_END);long flen = ftell(fp);printf("len = %ld\n",flen);fseek(fp,0,SEEK_SET);int fd=fileno(fp);//文件指针转文件描述符  if(fd==-1){printf("转换失败\n");return -1;} char *file_addr=mmap(NULL,flen,PROT_READ,MAP_SHARED,fd,0);//内存映射fclose(fp);close(fd);  if(file_addr==NULL){printf("映射失败\n");return -2;}/*统计行*/char *p=file_addr;p=strstr(file_addr,"\"");while(*p){if(*p=='\n'){p=strstr(p,"\"");if(p==NULL)break;file_line++;}else p++;}printf("行:%d\n",file_line);//统计行//"APPID","人脸库","创建时间","用户组ID","修改时间","用户ID","修改时间","人脸url"/*统计列*/int cnt=0;p=file_addr;p=strstr(file_addr,"\"");p++;while(*p && *p!='\n'){while(*p!='"' && *p)p++;p++;cnt++;if(*p=='\n')break;else if(*p==',')p+=2;}printf("列:%d\n",cnt);/*将.csv文件数据保存到数组中*/char buff[file_line][cnt][500];int i,j;p=strstr(file_addr,"\"");p++;for(i=0;i<file_line;i++){for(j=0;j<cnt;j++){int index=0;while(*p!='"' && *p){buff[i][j][index++]=*p;p++;}p++;buff[i][j][index++]='\0';if(*p=='\n'){p=strstr(p,"\"");p++;}else if(*p==',')p+=2;}}munmap(file_addr,flen);/*取消映射*/char buff2[file_line][cnt][500];/*保存修改后的文件数据*/for(i=0;i<file_line;i++){//printf("\n-------------------------------\n");for(j=0;j<cnt-1;j++){sprintf(buff2[i][j],"\"%s\",",buff[i][j]);//printf("%s",buff2[i][j]);}if(i==file_line-1 && j==cnt-1){sprintf(buff2[i][j],"\"%s\"",buff[i][j]);}else sprintf(buff2[i][j],"\"%s\"\n",buff[i][j]);//printf("%s",buff2[i][j]);//printf("\n---------------------------------\n");}fp = fopen(filename,"w+b");if(fp==NULL){printf("文件打开失败\n");return -3;}if(line>file_line || row>cnt){printf("未找到要修改的位置\n");return 0;}char src_data[500];if(row==cnt){snprintf(src_data,sizeof(src_data),"\"%s\"\n",data);}else snprintf(src_data,sizeof(src_data),"\"%s\",",data);strcpy(buff2[line-1][row-1],src_data);int size;for(i=0;i<file_line;i++){for(j=0;j<cnt;j++){size=fwrite(buff2[i][j],1,strlen(buff2[i][j]),fp);if(size!=strlen(buff2[i][j])){printf("size=%d,%ld\n",size,strlen(buff2[i][j]));printf("写入失败\n");}}}return 0;
}
int main()
{printf("\n---------------修改前-------------------\n");readfile_csv("1.csv");printf("\n----------------------------------------\n");modifyfile_csv("1.csv",7,8,"http:www.baidu.com");/*将第7行第8列数据改为http:www.baidu.com*/printf("\n---------------修改后-------------------\n");readfile_csv("1.csv");printf("\n----------------------------------------\n");return 0;
}

运行结果:

c语言读写csv文件相关推荐

  1. python操作csv文件第7行开始的数据_Python教程-Python读写CSV文件

    前言 本教程学习在Python中使用CSV文件.CSV(逗号分隔值)格式是在电子表格和数据库中使用的非常流行的导入和导出格式.Python语言包含该模块,该模块具有用于读取和写入CSV格式的数据的类. ...

  2. python读csv最快方法_使用Python读写csv文件的三种方法

    Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...

  3. python读写csv文件方法总结_使用python读写CSV文件的三种方法

    Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...

  4. python pandas 读写 csv 文件

    python pandas 读写 csv 文件 具体看官方文档 https://www.pypandas.cn/docs/user_guide/io.html#csv-文本文件 import pand ...

  5. 使用 Apache Commons CSV 读写 CSV 文件

    有时候,我们需要读写 CSV 文件,在这里给大家分享Apache Commons CSV,读写 CSV 文件非常方便. 具体官方文档请访问Apache Commons CSV. 官方文档已经写得很详细 ...

  6. python读取csv文件的方法-python读写csv文件的方法

    1.爬取豆瓣top250书籍 import requests import json import csv from bs4 import BeautifulSoup books = [] def b ...

  7. python读csv-python读写csv文件

    1用python做数据分析,数据来源一般会有多种格式,而我喜欢以CSV的方式进行存储分析,如果数据本身就是CSV格式的那我可以直接用pandas库自带的方法进行读取即可,但是有时候各种来源的数据不方便 ...

  8. python本地读csv文件_python读写csv文件方法详细总结

    python提供了大量的库,可以非常方便的进行各种操作,现在把python中实现读写csv文件的方法使用程序的方式呈现出来. 在编写python程序的时候需要csv模块或者pandas模块,其中csv ...

  9. 利用JavaCSV API来读写csv文件

    转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/53423121 1 背景 CSV文件的读写其实是有很多方法 ...

  10. python导入文件列行_python读写csv文件并增加行列的实例代码

    python读写csv文件并增加行列,具体代码如下所示: # -*- coding: utf-8 -*- """ Created on Thu Aug 17 11:28: ...

最新文章

  1. java = 与 == 同时使用问题 (例如 isRead = result == 0;)
  2. js创建对象的几种方法及继承
  3. 火车站购票系统c语言编程,用c语言编写火车购票系统怎么编写,在线等,急!!!...
  4. PAT甲级1093 Count PAT‘s :[C++题解]DP、状态机模型dp
  5. 如何成为优秀的程序员
  6. AbstractQueuedSynchronizer源码解析
  7. python关键字以什么开头_查找关键字以相同前缀开头的字典值的更有效方法
  8. HDFS与MapReduce
  9. 一文读懂平衡二叉树 | 技术头条
  10. phabricator安装配置和使用(docker安装和独立部署)
  11. 16套51单片机开发板资料共享下载,拼命整理
  12. cryptoJs 前端用法
  13. 小米硬盘路由器服务器,随手分享攻略 篇九:小米路由器更换10T硬盘 —— 小白教程...
  14. 高通Thermal debug
  15. 怎么从光缆缆标志区别是单模光缆还是多模光缆
  16. Gartner发布2021年隐私技术成熟度曲线,数字伦理登上顶点
  17. [技巧]Ubuntu与Windows10局域网共享文件夹
  18. AVI文件结构分析及举例验证
  19. DELPHI各种颜色表达式
  20. 作为一号之主,今天我们敞开心扉聊一聊

热门文章

  1. 使用计算机传真,使用计算机发送和接收传真
  2. 监控--CactiEZ使用
  3. 身份证识别项目(二)-- 3755个汉字的识别
  4. netty权威指南 微云_Netty权威指南 第2版.pdf
  5. 老男孩python14期全套-老男孩python14期
  6. web前端笔试题-完善版
  7. Super超级ERP系统---(7)货位管理
  8. PL/SQL语句——循环语句
  9. 我的世界(16)-解决Minecraft Forge官网无法下载文件的问题
  10. 为期45天的记忆训练