2016-06-06 11 views
0

Ich habe eine Reihe von Datendateien, die ich bis zu einem gewissen mehrdimensionalen Containern lesen in müssen, von denen alle in der folgenden Form sind:die Anzahl der Datenpunkte in einer Linie von ifstream Counting

a1,a2,a3,...,aN, 
b1,b2,b3,...,bN, 
c1,c2,c3,...,cN, 
................ 
z1,z2,z3,...,zN, 

Ich weiß from this previous question dass eine schnelle Möglichkeit, die Gesamtzahl der Zeilen in einer Datei zu zählen kann wie folgt erreicht werden:

std::ifstream is("filename"); 
int lines = std::count(std::istreambuf_iterator<char>(is), std::istreambuf_iterator<char>(), '\n'); 

Diese mich wissen, was z läßt, setzt die Gesamtzahl der Daten in lesen, in denen sie jeweils N Daten Punkte. Die nächste Herausforderung ist es, die Anzahl der Datenwerte pro Zeile zu zählen, für die ich folgendes tun:

std::ifstream is("filename"); 
std::string line; 
std::getline(is, line); 
std::istringstream line_(line); 
int points = std::count(std::istreambuf_iterator<char>(line_), std::istreambuf_iterator<char>(), ','); 

Ich kann sicher sein, dass jede Datei, um die gleiche Menge an Datenwerte pro Zeile hat. Meine Frage ist, gibt es einen schöneren/schnelleren Weg, um das oben genannte zu erreichen, ohne auf die Verwendung von getline zu zurückgreifen und eine einzelne Zeile zu einer Zeichenkette zu entladen? Ich habe mich gefragt, ob dies mit Stream-Puffern erreicht werden könnte, aber nachdem ich ein wenig gesucht habe, ist es mir nicht ganz klar.

Jede Hilfe wäre sehr dankbar, danke!

+5

Sieht gut aus für mich. Hatten Sie ein Problem? Entspricht es nicht Ihren Leistungsanforderungen? Es ist sehr offen für was "Hilfe" Sie eigentlich hier suchen. Wenn ich Sie wäre, würde ich nur darüber lächeln, was Sie bisher getan haben, und zur nächsten Aufgabe in Ihrem Projekt übergehen. –

Antwort

0

Wenn Sie benötigt wurden

int points = std::count(std::istreambuf_iterator<char>(line_), std::istreambuf_iterator<char>(), ','); 

für jede Textzeile zu verwenden, würde ich Ihnen raten, nach einem Weg zu suchen es effizienter zu gestalten.

Allerdings sagte man:

ich sicher sein, dass jede Datei, um die gleiche Menge an Datenwerten pro Zeile hat.

Das bedeutet, können Sie die Anzahl Punkte aus der ersten Zeile berechnen und annehmen, dass es für den Rest der Linien gültig.

Ich würde es nicht für einen einmaligen Anruf schwitzen.

Verwandte Themen