我用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
我想为每个元素填充一个数组。示例代码将非常感谢!
非常感谢你。
答案 0 :(得分:1)
阅读结构化数据时,有时可以使用好的scanf
。
这些方面的东西可以完成这项任务:
char n[20], p[5];
int i;
double d;
scanf("%[^,], %[^,], %d, %lf\n", n, p, &i, &d);
此处n
和p
是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;
}