Einlesen von daten file
-
Also bei mir besteht das Problem weiterhin und beim Ausführen stürzt es ab
-
mm? bei mir auch. jetzt.
liegt wohl daran, dass ich hier bei mir zum testen eine etwas andere version hatte und nicht aufgepasst, was ich wo noch geändert hatte...hab jetzt den code etwas aufgeräumt und umstrukturiert:
using record_t = vector <float>; using label_t = int; struct dataStruct { vector <record_t> dsgnMat; vector<label_t> labels; }; std::pair<record_t, label_t> record_from(string const& line) //hier jetzt ohne den ursprünglichen stream zu übergeben. //zuviele streams machen mir den kopf ganz wirr. { istringstream ss(line); //ignoriere den ersten wert (bis zum ersten ';') ss.ignore(std::numeric_limits<std::streamsize>::max(), ';'); record_t recordLine; float f{ 0.f }; char tmp; while (ss >> f >> tmp) { recordLine.push_back(f); //ignoriert den letzten wert } if (f == 1) { return std::make_pair(std::move(recordLine), 1); } else if (f == 2) { return std::make_pair(std::move(recordLine), -1); } throw std::invalid_argument{"wrong line format given to record_from" }; } istream& operator >> (istream& ins, dataStruct& data) { data.dsgnMat.clear(); data.labels.clear(); ins.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //so, besser einfach als kompliziert: string line; while (getline(ins, line)) { record_t recordLine; label_t label; std::tie(recordLine, label) = record_from(line); data.dsgnMat.push_back(std::move(recordLine)); data.labels.push_back(label); } return ins; } //----------------------------------------------------------------------------- // Now to put it all to use. int main() { // Here is the data we want. dataStruct data; // Here is the file containing the data. Read it into data. ifstream infile("test.txt"); try { //jetzt mit ausnahmebehandlung. infile >> data; } catch (...) { for (int i = 0; i < 100; ++i) cout << "ich hätte exceptions nicht ansprechen sollen."; return -1; } // Complain if something went wrong. if (!infile) //nicht eof! - eof steht für "end of file" { cout << "something went wrong!\n"; return 1; } //zum testen: for (auto const& row: data.dsgnMat) { for (auto&& value: row) { cout << value << "; "; } cout << endl; } //das close am ende ist unnötig, die arbeit übernimmt der destruktor von infile }
-
Hallo Sewing,
du solltest aber dann schnellstens lernen mit dem Debugger zu arbeiten, um solche Fehler zu analysieren und dann beheben zu können. Welche IDE benutzt du denn?
-
Visual Studio Community. Ja das stimmt, ich habe da Nachholbedarf und werde mir das schnellstmöglich aneignen. Leider funktioniert der obige Code immer noch nicht

-
Unter Debugging with Visual Studio 2005/2008, Part 1: Debugging Concepts ff. (besonders Part 3) kriegst du einen guten Überblick über die Möglichkeiten.
Kurzhinweis:
Breakpoint setzen (Links-Klick auf linken Zeilenrand oder F9)
Programm im Debugmodus starten
Warten bis Breakpoint erreicht wird
Im Einzelschritt (F10) die Zeilen ausführen (dann kannst du den Ablauf verfolgen und siehst im Watch-Fenster die aktuellen Variableninhalte)