000
08.05.2009, 18:34 Uhr
~Jogi
Gast
|
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++: |
#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
mod edit: :twisted: verwende die CPP-Tags selber :twisted: Dieser Post wurde am 13.05.2009 um 21:55 Uhr von Pablo editiert. |