C++: Lesen .txt-Inhalt und speichern Sie in 2D-array
Also mich und meine groupmates plötzlich haben einige clutchwork bei der hand. Ich wurde beauftragt, eine import-Funktion, liest eine Textdatei, die wie folgt aussieht, und speichern Sie es zu einem 2D-array:
Sind die Spalten Tab-getrennt. Als dieser kam plötzlich, nicht über die gesamte Projekt-Datei, die mit mir und ich bin nirgendwo in der Nähe meiner alten, verlässlichen, ich habe versucht, beschwörend in die generische Art und Weise möglich:
void signal::import_data(string filename){
ifstream file;
file.open(filename.c_str());
if(file.fail()){
cerr << "file open fail" << endl;
}else{
while(!file.eof)
{
for(int j = 0; j < NumCols; j++){
for(int i = 0; i < NumRows; i++){
file >> _data[j][i];
}
}
}
}
file.close();
}
Tue ich das richtige? Ich bin nicht so sicher, ob das streaming, wie dies umgangen werden kann-tabs, oder kann es?
Vermeiden Sie diesen Fehler :
Verstanden! Aber auch der rest der code in Ordnung? Auch, ganz ehrlich? Ich weiß wirklich nicht, warum while(!Datei.eof) ist eine praktikable option, einfach Fragen, wenn Ihr mir sagen könnt warum
Ich glaube, Sie sollten es vermeiden
while(!file.eof)
,und Lesen Sie, wie if ( !(file >> _data[j][i])) break;
Verstanden! Aber auch der rest der code in Ordnung? Auch, ganz ehrlich? Ich weiß wirklich nicht, warum while(!Datei.eof) ist eine praktikable option, einfach Fragen, wenn Ihr mir sagen könnt warum
Ich glaube, Sie sollten es vermeiden
while (!file.eof())
denn wenn das token Lesen aus dem input-stream, wenn dabei file >> ...
kann nicht analysiert werden, in eine ganze Zahl, dann ist der input-iterator wird nicht Voraus. Wenn das der Fall ist, können Sie nie erreichen das Ende der Datei.InformationsquelleAutor Erasmus | 2013-01-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dieser code:
sollte ersetzt werden mit:
Ist, dass, wenn Sie erwarten, dass
NumCols * NumRows
Einträge es in der Datei, warum explizit zu überprüfen, für das Ende der Datei? Lassen Sie es Lesen, bis Sie LesenNumCols * NumRows
Einträge gelesen. Sobald Sie es Lesen, wird es automatisch mit der Ausfahrt aus der Schleife.Aber Sie müssen überprüfen, ob die Datei endet vor
NumCols * NumRows
Einträge gelesen, das ist, warum ich dies Tue:Wenn die Datei erreicht eof Charakter, ODER einige andere schreib-Fehler, bevor es fertig Lesen
NumCols * NumRows
Einträge, dann ist die Bedingung in derif
bewerten würde zutrue
und es wird gedruckt, die Fehlermeldung und brechen die Schleife, wird es brechen äußeren Schleife auch als Ausdruck!file
bewerten zutrue
.Für eine detaillierte Erklärung, WIE das Lesen von Dateien mit C++ - streams, Lesen Sie die Antworten zu folgenden Themen:
InformationsquelleAutor Nawaz