自定函数实现C++读取CSV文件

开发 后端
C++读取CSV文件需要一个合适的函数来进行具体的操作。如果没有现成的函数供我们使用,我们可以自己编写一个来方便我们的使用。

C++是一个应用方式非常灵活的编程语言。我们可以通过自己的需求,自己编写一个适合自己开发的函数来实现一些特定的功能。比如今天为大家介绍的就是自定义函数来实现C++读取CSV文件这一功能。#t#

今天恰好做一个东西需要一个C++读取CSV文件的函数。

没有找到现成的函数,所以就自己写了一个。

目的就是实现C++读取CSV文件,每一行读到一个数组中。

有点生疏了,字符串处理函数都不知道有什么现成的,所以也写了两个辅助的字符串处理函数。

***个函数:计算一个字符串中的某个子串的个数

  1. int strstr_cnt(const char *string, const char 
    *substring) {  
  2. int i,j,k,count = 0;  
  3. for (i = 0; string[i]; i++){  
  4. for (j = ik = 0; (string[j] == 
    substring[k] && (j 
    < strlen(string))); j++,k++) {  
  5. if (! substring[k + 1]) {  
  6. count++;  
  7. }  
  8. }  
  9. }  
  10. return count;  

第二个函数:计算一个子串在字符串中的位置

  1. int substring_index(const char *s1,const char *s2, int pos){  
  2. int i,j,k;  
  3. for( i = pos ; s1[i] ; i++ ) {  
  4. for( j = ik = 0 ; s1[j] == s2[k]; j++,k++ ){  
  5. if (! s2[k + 1]) {  
  6. return i;  
  7. }  
  8. }  
  9. }  
  10. return -1;  

第三个函数:读取已经打开的一个CSV文件的一行,将这一行处理到一个数组中。

  1. char *fgetcsvline(vector<string> &csv_databuf, FILE *fhead) {  
  2. char *ret_stat;  
  3. char data_buf[1024];  
  4. string stringbuf;  
  5. ret_stat = fgets( data_buf, 1024, fhead );  
  6. if (ret_stat != NULL) {  
  7. int len = strstr_cnt(data_buf,"\",\"");  
  8. if (len > 0){  
  9. int pos = substring_index(data_buf,"\",\"",0);  
  10. int startpos = 1;  
  11. string csv_buf;  
  12. while (pos > 0) {  
  13. stringbuf = (string)data_buf;  
  14. csv_buf = stringbuf.substr(startpos,pos - startpos);  
  15. csv_databuf.push_back(csv_buf);  
  16. startpos = pos + 3;  
  17. pos = substring_index(data_buf,"\",\"",pos + 2);  
  18. }  
  19. if ((substring_index(data_buf,"\n",0)) > 0){  
  20. csv_buf = stringbuf.substr(startpos, stringbuf.length() 
    - startpos - 2);  
  21. } else {  
  22. csv_buf = stringbuf.substr(startpos, stringbuf.length() 
    - startpos - 1);  
  23. }  
  24. csv_databuf.push_back(csv_buf);  
  25. }  
  26. }  
  27. return ret_stat;   

这个函数使用上面的两个函数来处理字符串。

另外这个函数用来处理的CSV文件是带双引号格式的:

  1. "sss","ddd","444"  
  2. "ttt","www","ooo"  
  3. "sss","qqq","000" 

使用方法如下:

  1. int main(int argc, char* argv[]) {  
  2. FILE *fp_head;  
  3. string csvFileName = "test.csv";  
  4. char *ret_stat;  
  5. vector<string> csv_data;  
  6. fp_head = fopen( csvFileName, "rt" );  
  7. ret_stat = fgetcsvline(csv_data, fp_head);  
  8. while (ret_stat != NULL) {  
  9. //get csv data use csv_data[n]  
  10. ret_stat = fgetcsvline(csv_data, fp_head);  
  11. }  
  12. return 0;  

以上代码可能需要稍加调试。也可稍加改动用来读取其它格式的csv文件。

以上就是C++读取CSV文件的相关实现方法。

责任编辑:曹凯 来源: 博客园
相关推荐

2022-01-14 09:10:56

C++文件Linux

2011-08-29 16:48:50

Lua配置文件C++

2011-06-17 16:09:04

freadfwrite

2011-08-25 16:47:53

LuaC++ 证书

2011-08-22 17:25:31

LuaC++函数

2023-10-31 12:59:00

C++编程语言

2010-02-05 15:59:26

C++函数重载

2010-02-03 15:52:55

C++ clock()

2009-12-10 10:18:05

PHP读取文件

2023-12-24 12:56:14

C++函数语言

2010-02-01 10:32:01

C++文件操作

2009-08-12 17:19:09

C#读取文件内容

2009-08-12 18:29:06

C#读取TXT文件

2010-01-28 16:16:32

C++多态性

2010-01-18 17:38:54

C++虚函数表

2011-06-07 13:44:40

VC

2010-01-27 17:16:52

C++构造函数

2010-01-26 10:42:26

C++函数

2009-09-02 19:08:03

C#实现读取文本文件

2010-01-18 16:56:30

C++函数
点赞
收藏

51CTO技术栈公众号