Danke, so funktioniert es! Aber hat jemand ne Ahnung warum es vorher nicht funktioniert hat?
Beiträge von Jogi85
-
-
Hallo, ich bin relativ neu mit C++ unterwegs und das ist auch meine erste Programmiersprache. Ich habe ein txt-file mit 6000 Zeilen, die ich von feet in Meter umrechnen will. In jeder Zeile steht erst eine Zahl, dann ein Space, dann die Einheit (ft). Allerdings steht nicht in jeder Zeile ein Wert, in manchen Zeilen steht ein "N" für "No Data".
Ich hab mir das bisher so gemacht, dass ich mir zuerst mit tellg die Position merke, dann mit getline die komplette Zeile eingelesen habe und dann vergleiche ob in der Zeile ein N steht oder nicht. Steht ein N soll er "nodata" schreiben, sonst zurück zur letzten gespeicherten Position und einen float (die Zahl) und ein string (die Einheit) einlesen. Der float soll dann in Meter umgerechnet werden und in die neue Datei geschrieben werden. Das ganze funktioniert bisher so lange kein "N" steht. Beim ersten "N" bleibt das Skript hängen und schreibt unendlich oft die letzte Zahl vor dem "N" in die Datei.
Das ganze sieht bisher so aus:C
Alles anzeigen#include <fstream> #include <iostream> #include <iomanip> using namespace std; int main() { float tiefe; string ft; char zeile[100]; string zeichen="N"; int zaehler=0; string zeilestr; streampos einlesepos; ifstream eingabe("/EL_tiefe.txt", ios::in); if (eingabe.good()){ cout<<"Datei konnte geöffnet werden"<<endl; } else cout<<"Fehler beim öffnen"<<endl; ofstream ausgabe("EL_tiefe_m.txt", ios::out); eingabe.seekg(0L,ios::beg); while (!eingabe.eof()) { einlesepos=eingabe.tellg(); eingabe.getline(zeile,100); zeilestr=zeile; if(zeilestr==zeichen){ ausgabe<<"nodata"<<endl; } else{ eingabe.seekg(einlesepos,ios::beg); eingabe>>tiefe>>ft; ausgabe<<(tiefe*0.3048)<<" m"<<endl; } } return 0; }
Ich weiß, dass ich das ganze auch mit Excel machen könnte, aber ich würde es gerne so hinbekommen, da ich nicht nur eine Datei hab...Wäre für Hilfe echt dankbar.
Vielen Dank
Jogi