在c++中分析不同类型的逗号分隔数据
Parsing comma seperated data of varying types in c++
我正在用C++编写。
我有一个逗号分隔的数据文件需要解析。每行有四个元素(因此有3个逗号),行数固定(约200)。我遇到的问题是,前两个元素是字符串数据类型,第三个元素是整数数据类型,最后一个元素是双精度类型。数据示例如下:
John Smith,PG,10400,41.4554
Jane Doe,PG,4500,32.4543
Charles Johnson,SG,8800,23.2323
Rick Grimes,C,10500,40.4550
….
类型:字符串,字符串,Int,双
我有一个数组,用于我想要填充的每个元素。示例代码将不胜感激!
非常感谢。
在读取结构化数据时,有时最好使用好的ol'scanf
。
沿着这些路线的东西可以完成这项工作:
char n[20], p[5];
int i;
double d;
scanf("%[^,], %[^,], %d, %lfn", n, p, &i, &d);
这里n
和p
是C字符串,如果需要,可以将它们转换为std::string
。
添加一些关于的解释,scanf字符串到底是什么
[^,]
是一个说明符,很像正则表达式,它说:继续读取,直到找到,
- 当你把
,
之类的额外东西放在变量之间时,scanf不会捕捉到它们,只需匹配并继续 - 为什么最后是
n
?为了匹配换行并防止它被下一次扫描处理,这将使它输入名称变量
scanf
对于结构化数据非常强大。参考文献更深入。
您也可以使用regexp
执行此操作,然后将字符串标记分别转换为integer和double。
将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,%fn", elem1, elem2, elem3, elem4);
// Use elem1, elem2, elem3 and elem4 the way you want to.
}
return 0;
}
相关文章:
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 嵌套结构,从由空行分隔的文件中读取数据
- 使用 range-v3 读取包含逗号分隔数据的行
- C 程序要读取包含两个双重值的Excel数据的单列,这些值由逗号分隔并存储在自己的数组中
- C++文件I/O选项卡分隔的数据
- 要存储到数据结构中的制表符分隔的文件数据
- C++读取元数据文件,并处理由空白和:混合分隔的字段
- 如何从用|分隔的txt文件中提取数据
- 当数据包含空格时,如何将制表符分隔文件的内容加载到C++字符串的 2D 向量中
- 对于二进制数据,哪个性能更高:将整个对象写入文件或分隔变量(无对象)
- 在c++中分析不同类型的逗号分隔数据
- 从制表符分隔的文件中读取2D数据并存储在矢量C++中
- 从逗号分隔的文本文件中创建有意义的数据向量的最佳方法是什么?
- 从字符串中读取多个数据,使用sstream以字符分隔
- 如何在c++中读取以空格分隔的十六进制字节数据
- 如何从C++中字段由'|'字符分隔的行中提取数据?
- 写一个逗号分隔的字符串属性到HDF5数据集c++
- 如何在c++中读取以空格分隔的数据并将其保存到数组中,然后以其他顺序写入新的文本文件
- 用空格数据读取空格分隔的数据
- 解析制表符分隔的数据