在c ++中解析逗号分隔的各种类型的数据

时间:2015-11-29 04:43:36

标签: c++ parsing csv comma

我用C ++写作。

我有一个逗号分隔的数据文件,我需要解析。每行有四个元素(所以3个逗号)和固定行数(大约200个)。我遇到的问题是前两个元素是字符串数据类型,第三个元素是整数数据类型,最后一个元素是double类型。下面是一个数据示例:

John Smith,PG,10400,41.4554
Jane Doe,PG,4500,32.4543
Charles Johnson,SG,8800,23.2323
Rick Grimes,C,10500,40.4550
.....

类型:String,String,Int,Double

我想为每个元素填充一个数组。示例代码将非常感谢!

非常感谢你。

2 个答案:

答案 0 :(得分:1)

阅读结构化数据时,有时可以使用好的scanf

这些方面的东西可以完成这项任务:

char n[20], p[5];
int i;
double d;

scanf("%[^,], %[^,], %d, %lf\n", n, p, &i, &d);

此处np是C字符串,如果需要,您可以将其转换为std::string

添加一些解释什么是scanf字符串?

  • [^,]是一个与正则表达式非常相似的说明符:在您找到,之前继续阅读。
  • 当你在变量之间放置,之类的额外内容时,scanf`将无法捕获它们,只需匹配并继续运行
  • 为什么最后\n?要匹配换行符并防止下次扫描处理它,这将使其输入名称变量。

scanf对结构化数据非常有用。更多in-depth refs

您也可以使用regexp执行此操作,然后将字符串标记分别转换为整数和双精度。

答案 1 :(得分:0)

将ifstream :: getline与sscanf结合使用。

#include <fstream>
#include <iostream>

int main()
{
  std::ifstream file;
  file.open("Data.txt");
   char line[100];
   char elem1[10], elem2[10];
   int elem3;
   double elem4;
   int linenum = 0;
  while (!file.eof()) {
    linenum++;
    file.getline(line, 100);
    sscanf(line, "%s,%s,%d,%f\n", elem1, elem2, elem3, elem4);
    // Use elem1, elem2, elem3 and elem4 the way you want to. 

  }
  return 0;
}