作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个看起来像这样的数据:
AAA 0.3 1.00 foo chr1,100
AAC 0.1 2.00 bar chr2,33
AAT 3.3 2.11 chr3,45
AAG 1.3 3.11 qux chr1,88
ACA 2.3 1.33 chr8,13
ACT 2.3 7.00 bux chr5,122
请注意,上面的行是用制表符分隔的。而且,它有时可能包含 5 个字段或 4 个字段。
我想要做的是将变量中的第 4 个字段捕获为“”(如果它不包含任何值)。
我有以下代码,但它以某种方式读取第 5 个字段,作为第 4 个字段当第 4 个为空时。
正确的做法是什么?
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
using namespace std;
int main ( int arg_count, char *arg_vec[] ) {
string line;
ifstream myfile (arg_vec[1]);
if (myfile.is_open())
{
while (getline(myfile,line) )
{
stringstream ss(line);
string Tag;
double Val1;
double Val2;
double Field4;
double Field5;
ss >> Tag >> Val1 >> Val2 >> Field4 >> Field5;
cout << Field4 << endl;
//cout << Tag << "," << Val1 << "," << Val2 << "," << Field4 << "," << Field5 << endl;
}
myfile.close();
}
else { cout << "Unable to open file"; }
return 0;
}
最佳答案
将行标记为字符串 vector ,然后根据标记的数量转换为适当的数据类型。
如果可以使用Boost.Spirit ,这简化为定义适当语法的简单问题。
关于c++ - 如何在 C++ 中解析具有不同字段数的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/743191/
我是一名优秀的程序员,十分优秀!