我有一個看起來像這樣的數據:如何解析線,++領域的不同數目的用C
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個字段。
我想要做的是捕獲變量中的第四個字段爲「」,如果它不包含任何值。
我有以下代碼,但不知何故它讀取第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;
}
你能多談談您的輸入?你有一種方法可以知道一條線何時會有4個場或5個場? – Tom 2009-04-13 06:40:55
@Tom:最多可以包含5個字段,前3個字段總是存在。 – neversaint 2009-04-13 06:45:19
鑑於您所展示的數據的性質,Field4和Field5預計會翻一番,這似乎很奇怪!由於系統不知道數據的劃分,所以當Field5爲空時,您將不得不將數據從Field4移動到Field5。答案是自動的是做到這一點。 – 2009-04-13 11:58:39