Zahlen von einer Textdatei einlesen
-
Hallo
ich habe eine Textdatei nur mit nur einer zeile. (0.384 3 0.384 5......)
Die zahlen will ich in x und y arrays oder vectoren abspeichern.
Das einlesen funktioniert, aber ich weiss nicht wie ich die erste zahl in x und die zweite zahl in y abspeichern uswstd::ifstream Stream( "Daten.txt" );
while ( Stream ) {
if ( isdigit( Stream.peek() ) ) {
// Ziffer gefunden, es kommt eine Zahl
float Number; int zähler;Stream >> Number;
std::cout << Number << '\n';
}
else {
Stream.get();
}
-
Benutz
for (double x,y; stream >> x >> y;) { // Verarbeite x und y }oder äquivalentes Schleifenkonstrukt. Dein Code hat derzeit Logikfehler was die Reihenfolge der Fehlerprüfungen angeht. Können eigentlich auch Nicht-Zahlen in der Zeile vorkommen? Falls ja, muss man darauf nochmal reagieren, hier in diesem Beispiel wäre eine Nicht-Zahl ein Fehler. Übrigens gibt es auch reichlich Zahlenformate mit Nicht-Ziffern drin, mit denen der operator>> jedoch umgehen kann. Was wäre bei deinem Code beispielsweise mit negativen Zahlen? Oder Zahlen wie .05? Oder +1.0? Die Prüfung, was Zahl ist und was nicht, würde ich daher schon dem Zahlenparser überlassen, anstatt sie selber zu machen. Wenn der dann fehlschlägt, dann kannst du ggf. weiterspringen, anstatt abzubrechen, das musst du dann selber wissen, was für dein Programm passend ist.
P.S.: Leider kommt operator>> jedoch nicht mit Nan, Inf oder Varianten davon zurecht. Dafür müsste man strtof bemühen. Für dich sicherlich irrelevant, ich will's bloß mal erwähnen, da ich Zahlenformate zum Thema gemacht habe.
-
Danke für deine hilfe
in der der Textdatei sind nur zahlen drin und alle >0.
for (double x,y; stream >> x >> y;) { // Verarbeite x und y }das probiere ich morgen aus.
-
Es funktioniert

Nun kriege ich es nicht ein ein vector gespeichert.
Mit array klappt es.for (double x,y; Stream >> x >> y; ) { arrx[i]=x; arry[i]=y; i++; }
-
std::vector<std::pair<double,double>> vec; for( double x,y; Stream >> x >> y; vec.push_back(std::make_pair(x,y) ) { }Was hälst du davon?

-
Beim tippen ist mir glaub eine ) abhanden gekommen. Aber das merkst du dann schon. :p
-
Davon halte ich noch mehr:
vec.push_back({x,y});vec.emplace_back(x,y);