Ich habe ein Datum, die wie folgt aussieht:Wie Linien mit unterschiedlicher Anzahl der Felder in C++ Parst
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
Beachten Sie, dass die oben genannten Linien sind Tab getrennt. Darüber hinaus kann es manchmal 5 Felder oder 4 Felder enthalten.
Was ich tun möchte, ist 4. Felder in Variable als "" zu erfassen, wenn es keinen Wert enthält.
Ich habe die folgenden Codes, aber irgendwie liest es die 5. Felder, als 4. Felder wenn 4. ist leer.
Was ist der richtige Weg?
#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;
}
Sie mehr über Ihre Eingabe sagen? Haben Sie eine Möglichkeit zu wissen, wann eine Linie 4 Felder oder 5 Felder haben wird? – Tom
@ Tom: Allenfalls kann es 5 Felder enthalten und ersten 3 Felder existieren immer. – neversaint
Es scheint seltsam, dass Field4 und Field5 erwartet das Doppelte der Art der Daten gegeben werden Ihnen zeigen!Da das System Ihre Aufteilung der Daten nicht kennt, müssen Sie die Daten von Feld4 nach Feld5 verschieben, wenn Feld5 leer ist. Die Antworten geben automatisch war, das zu tun. –