2017-01-14 3 views
1

Ich versuche, Daten aus einer .tsv-Datei in einen Vektor zu lesen. Die Datei ist so etwas wie folgt strukturiert:Lesen einer bestimmten Spalte in einer .tsv-Datei

A B 
1 2 
2 4 
6 8 

Ich möchte fragen, welche Spalte sollte das Programm lesen, und drücken Sie dann die Werte aus der Spalte in einen Vektor. Mein Code so weit ist dies:

int main() { 

string filename, column, headerLine; 
vector<double> data, tempData; 
int numColumn; 

ifstream dataFile; 
cout << "enter a filename" << endl; 
cin >> filename; 
dataFile.open(filename); 
cout << "enter a column name" << endl; 
cin >> column; 
cout << "reading column " << column << " from " << filename; 
getline(dataFile, headers); 

//here's where I feel stuck 

} 

Wenn ich die Header in einen Vektor namens headersList bekommen und dann tun etwas ähnliches für die Datenzeilen, würde ich in der Lage sein, dies zu tun:

for(int i = 0; i < headersList.size(); i++) { 
    if(headersList[i] == column) { 
     numColumn = i; 
    } 
} 
while(!dataFile.eof()) { 
    //some way of getting the data points into a vector called tempData 
    data.push_back(tempData[numColumn]); 
    tempData.clear(); 
} 

ich würde wirklich etwas Hilfe schätzen

+1

haben Sie nur zwei Spalten haben? Ist der Name jedes Headers eindeutig? –

+0

Ich habe mehr als zwei Spalten, und ja, jeder Name der Kopfzeile ist einzigartig. Die Namen der Spalten können auch mehr als 1 Zeichen lang sein, aber kein Leerzeichen enthalten. – Evan

+0

Der Datentyp für den Header scheint kein Problem zu sein, da Sie Strings vergleichen. Ich beantworte Ihre Frage jetzt. –

Antwort

1

den folgenden Code Versuchen:

while(!dataFile.eof()) { 
    std::string str; 
    std::getline(dataFile, str); 
    std::stringstream buffer(str); 
    std::string temp; 
    std::vector<double> values; 

    while(getline(buffer, temp, '\t')) { 
     values.push_back(::strtod(temp.c_str(), 0)); 
    } 

    data.push_back(values[numColumn]); 
} 
Verwandte Themen