Verschiedene Dateinamen hintereinander erzeugen lassen ???
-
Hallo,
ich parse eine GPS-Datei im NMEA-Format, die mit einem Logger beim Autofahren aufgenommen wurde, daraus bekomme ich die Struktur:
Datum , Zeit , xKoord , yKoordIn der Datei befinden sich mehrere geloggte Tage nach Datum sortiert (hintereinander geschrieben sozusagen).
Ich möchte nun die Datei nach den einzelnen Tagen gleich beim parsen splitten lassen und in verschiedene Dateien schreiben um sie danach einzeln nach Tagen und Fahrten auszuwerten.
Die Namen der Dateien sollten folgendes Format besitzen:Prevname_Datum_#.txt (Prevname ist der Name der zu parsenden Datei)
Kann mir jemand eine kleine Hilfestellung geben wie man sowas macht, hab leider nicht den superdurchblick in C++, ich schreibe die gesamte Datei zur Zeit ungetrennt mit fstream in eine komplette mit nur einem vordefinierten Dateinamen.
Vielen Dank im voraus !!!
-
Hallo,
ich nehme mal an, dass du Prevname, Datum etc. als string vorliegen hast.
Dann kannst du einfach hingehen und folgendes tun://irgendwo ne schleife oder aehnliches... const char *delim = "_"; std::stringstream j; j << i; //wobei i ne zaehlvariable oder sowas ist //datei, entsprechend zusammengesetzt, oeffnen std::fstream file((prevName + delim + datum + delim j.str()).c_str()); j.str(""); //inhalt wieder loeschen (gibts da en anderen weg?)
Ist mir jetzt mal so spontan eingefallen. Wenn ich nichts falsch gemacht habe,
dann sollte das so funktionieren.mfg
v R
-
Hey, danke für die schnelle Antwort, mein Code sieht folgendermaßen aus:
#include <iostream> #include <iomanip> #include "nmeaParse.h" #include <time.h> #include <fstream> using namespace std; int main(int argc, char* argv[]) { NMEAParser nmp_parser; GPSPosition gps_pos; char nextLine[256]; long PunktID; fstream f; f.open("testdatei.txt", ios::out); if (argc<2) { cerr << "Keine Datei angegeben !\n"; return (1); }; for (int i=0;i<256;i++) { nextLine [i] = 0x00; }; ifstream daten(argv[1]); PunktID=0; if (!daten.fail()) { while (!daten.eof()) { // Hier ist der Zeilenumbruch nicht im String daten.getline(nextLine,256,'\n'); if (!nmp_parser.GetTimeAndPosition (nextLine+1, &gps_pos)) { // cerr << "Falsches Format - Datensatz wird übersprungen\n"; } else { if (gps_pos.tvalid&&gps_pos.xyvalid) { struct tm* theTime = localtime((time_t*)&gps_pos.gps_time.tv_sec); // Punkt ID festlegen PunktID++; cout << PunktID << " " // Datum << setfill('0') << setw(2) << theTime->tm_mday << "." << setfill('0') << setw(2) << theTime->tm_mon + 1 << "." << setfill('0') << setw(4) << theTime->tm_year + 1900 << " " // Zeit << setfill('0') << setw(2) << theTime->tm_hour << "." << setfill('0') << setw(2) << theTime->tm_min << "." << setfill('0') << setw(2) << theTime->tm_sec << " " // Koordinaten << setprecision (6) << gps_pos.x << " " << setprecision (7) << gps_pos.y << "\n"; // Schreibe in Datei //-------------------------------------------------------------------------------------------- // Punkt ID festlegen f << PunktID << "," // Datum << setfill('0') << setw(2) << theTime->tm_mday << "." << setfill('0') << setw(2) << theTime->tm_mon + 1 << "." << setfill('0') << setw(4) << theTime->tm_year + 1900 << "," // Zeit << setfill('0') << setw(2) << theTime->tm_hour << ":" << setfill('0') << setw(2) << theTime->tm_min << ":" << setfill('0') << setw(2) << theTime->tm_sec << "," // Koordinaten << setprecision (6) << gps_pos.x << "," << setprecision (7) << gps_pos.y << endl; //-------------------------------------------------------------------------------------------- } } }; } else { cerr << "Fehler beim Öffnen der Datendatei !\n"; }; return 0; }
Prevname ist der Name der Datei, er wird beim Einlesen der Daten aus dem Logger willkürlich definiert, ich verwende den Namen des Fahrers, da mehrere Leute Daten sammeln.
Mal sehen, wie ich Deine Infos verarbeiten kann, danke schonmal !