Sie sind hier: Startseite » Forum » Software » Developer » Windows und COM-Ports
Nächstes Thema anzeigen
Vorheriges Thema anzeigen

Vorheriges Thema anzeigenDieses Thema verschickenZeige Benutzer, die dieses Thema gesehen habenDieses Thema als Datei sichernPrintable versionEinloggen, um private Nachrichten zu lesenNächstes Thema anzeigen
Du musst dich anmelden um Beiträge zu schreiben!Du musst dich anmelden um Beiträge zu schreiben!
Autor Nachricht
JTRipper
Inputsammler
Inputsammler


Alter: 38
Anmeldung: 17.04.2007
Beiträge: 29
Wohnort: Neu-Anspach


BeitragVerfasst: Di 21 Aug, 2007 19:05  Titel:  Windows und COM-Ports
Nach untenNach oben

Hey Leute!
Ich habe ein Problem...
Ich habe keine Lust mehr, wenn ich mal wieder Straßen für OpenStreetMap mitlogge, jedes Mal einen Logger zu starten, dann eine Datei zum speichern auszuwählen, und anschließend das ganze von NMEA nach GPX umzuwandeln...
Also dachte ich mir, schreibe ich mir ein Programm.
Das Programm tut zwar fast was es soll, aber eben nur fast. Es öffnet den Com-Port, liest 1 Zeile vom Com-Port und schreibt in die Ausgabedatei. Ich hätte aber gern, dass er liest, bis das Programm beendet wird. Was mache ich falsch?

Hier mal der Code:

Code:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

bool fileExists(const std::string& fileName)
{
  std::fstream fin;
  fin.open(fileName.c_str(),std::ios::in);
  if( fin.is_open() )
  {
    fin.close();
    return true;
  }
  fin.close();
  return false;
}

int main(){
  string line;
  ifstream myfile ("COM3");
  int i = 1;
  string filename = "C:\logs\gpslog";
  filename.push_back((char)i+48);
  filename.append(".gpx");
  while(fileExists(filename)){
    i++;
    filename = "C:\logs\gpslog";
    filename.push_back((char)i+48);
    filename.append(".gpx");
  }
  ofstream outfile (filename.data());

  if (myfile.is_open() && outfile.is_open())
  {
    outfile << "<xml>" << endl;
    outfile << "<gpx>" << endl;
    outfile << "<trk>" << endl;
    outfile << "<trkseg>" << endl;

    do
    {
      getline (myfile,line);
// Parsen der Daten und ausgeben
   }
    while (! myfile.eof() );
    outfile << "</trkseg>" << endl;
    outfile << "</trk>" << endl;
    outfile << "</gpx>" << endl;
    myfile.close();
    outfile.close();
  }

  else cout << "Fehler!n";

  return 0;
}


Hoffe ihr könnt mir helfen...

Gruß,
JTRipper

Hardware: Voom 1, Jetway 7F2WE1G5-OC-PB, 512MB RAM, M1-ATX, CID650

Software: Windows XP MCE, cPOS

    
da_user
Forum-Elite
Forum-Elite


Alter: 38
Anmeldung: 26.02.2007
Beiträge: 2058
Wohnort: Regensburg


BeitragVerfasst: Di 21 Aug, 2007 19:49  Titel:  (Kein Titel)
Nach untenNach oben

Ich kenn jetzt die Programmiersprache nicht, und habs nur überflogen, aber folgender Gedanke:
Hast du einen entsprechende Schleife programmiert?

Hardware: Medion MD41300

Software: cPos & iGO

    
billy
Moderator
Moderator


Alter: 41
Anmeldung: 10.11.2004
Beiträge: 5194
Wohnort: Stein bei Nürnberg


BeitragVerfasst: Di 21 Aug, 2007 20:00  Titel:  (Kein Titel)
Nach untenNach oben

stimmt, das teil macht nur einen umlauf, dann ist es fertig.

ich denke du hast wie da_user schon schreibt einen timer o.ä vergessen der das ganze immer wieder ablaufen lässt.

gruß
billy

Hardware: Seat RNS-E 2


    
dridders
Foruminventar
Foruminventar


Alter: 45
Anmeldung: 19.02.2007
Beiträge: 1268
Wohnort: Weidenbach

1997 Ford Mondeo
BeitragVerfasst: Di 21 Aug, 2007 20:08  Titel:  (Kein Titel)
Nach untenNach oben

nein, das Teil läuft endlos, aber es liest nur und wandert über einen Kommentar drüber. Sofern da kein Code ausgeschnitten worden ist würd ich empfehlen in der Schleife nicht nur zu lesen sondern auch zu schreiben.



    
JTRipper
Inputsammler
Inputsammler


Alter: 38
Anmeldung: 17.04.2007
Beiträge: 29
Wohnort: Neu-Anspach


BeitragVerfasst: Di 21 Aug, 2007 21:08  Titel:  (Kein Titel)
Nach untenNach oben

also eigentlich sollte das ding lesen bis es das ende der "datei" erreicht hat, dafür ist die do{....} while();-schleife da, das scheint aber ziemlich schnell zu gehen... habs unter linux programmiert und mit "/dev/ttyUSB0" als serielles device probiert, da ging es ohne probleme... nur im auto unter windows will es nicht so ganz.

da wo der kommentar steht hab ich code ausgeschnitten, weil ich dachte der sei unnötig... aber hier habt ihr nochmal den kompletten code:

Code:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

bool fileExists(const std::string& fileName)
{
  std::fstream fin;
  fin.open(fileName.c_str(),std::ios::in);
  if( fin.is_open() )
  {
    fin.close();
    return true;
  }
  fin.close();
  return false;
}

int main(){
  string line;
  ifstream myfile ("COM3");
  int i = 1;
  string filename = "C:logsgpslog";
  filename.push_back((char)i+48);
  filename.append(".gpx");
  while(fileExists(filename)){
    i++;
    filename = "C:logsgpslog";
    filename.push_back((char)i+48);
    filename.append(".gpx");
  }
  ofstream outfile (filename.data());

//  ifstream myfile ("/dev/ttyUSB0");
  if (myfile.is_open() && outfile.is_open())
  {
    outfile << "<xml>" << endl;
    outfile << "<gpx>" << endl;
    outfile << "<trk>" << endl;
    outfile << "<trkseg>" << endl;

    do
    {
      getline (myfile,line);
      try{
        if(line.compare(1, 5, "GPRMC") == 0){
          size_t pos1;
          size_t pos2;
          size_t pos3;
          size_t pos4;
          size_t pos5;
          size_t pos6;
          size_t pos7;
          size_t pos8;
          size_t pos9;
          size_t pos10;
          size_t pos11;
          string time_hour;
          string time_minute;
          string time_second;
          string status;
          string latG;
          string latM;
          string lonG;
          string lonM;
          string latsign;
          string lonsign;
          string speed;
          string course;
          string date_day;
          string date_month;
          string date_year;
          pos1 = line.find(",")+1;
          pos2 = line.find(",", pos1+1)+1;
          pos3 = line.find(",", pos2+1)+1;
          pos4 = line.find(",", pos3+1)+1;
          pos5 = line.find(",", pos4+1)+1;
          pos6 = line.find(",", pos5+1)+1;
          pos7 = line.find(",", pos6+1)+1;
          pos8 = line.find(",", pos7+1)+1;
          pos9 = line.find(",", pos8+1)+1;
     time_hour = line.substr(pos1, 2);
          time_minute = line.substr(pos1+2, 2);
          time_second = line.substr(pos1+4, 2);
          status = line.substr(pos2, 1);
          date_day = line.substr(pos9, 2);
          date_month = line.substr(pos9+2, 2);
          date_year = line.substr(pos9+4, 2);
          if(status.compare("A") == 0){
            size_t poslat = line.find(".", pos3+1)+1;
            latG = line.substr(pos3, 2);
            latM = line.substr(pos3+2, pos4-pos3);
            latsign = line.substr(pos4, 1);
            size_t poslon = line.find(".", pos5+1)+1;
            lonG = line.substr(pos5, 3);
            lonM = line.substr(pos5+3, pos6-pos5);
            lonsign = line.substr(pos6, 1);
            speed = line.substr(pos7, pos8 - pos7 -1);
            course = line.substr(pos8, pos9 - pos8 -1);
            float x;
            float y;
            int xg;
            float xm;
            int yg;
            float ym;
            sscanf(latG.data(), "%d", &xg);
            sscanf(latM.data(), "%f", &xm);
            sscanf(lonG.data(), "%d", &yg);
            sscanf(lonM.data(), "%f", &ym);
            x = xg + (xm/60);
            y = yg + (ym/60);
            outfile.precision ( 9 );
            outfile << "<trkpt lat="" << x << "" lon="" << y << "">" << endl;
            outfile << "  <time>20" << date_year << "-" << date_month << "-" << date_day << "T";
            outfile << time_hour << ":" << time_minute << ":" << time_second << "Z</time>" << endl;
            outfile << "<course>" << course << "</course>" << endl;
            outfile << "<speed>" << speed << "</speed>" << endl;
            outfile << "</trkpt>" << endl;
          }
       
        }
      }
      catch(std::exception& e){
      }
    }
    while (! myfile.eof() );
    outfile << "</trkseg>" << endl;
    outfile << "</trk>" << endl;
    outfile << "</gpx>" << endl;
    myfile.close();
    outfile.close();
  }

  else cout << "Unable to open filen";

  return 0;
}


edit: sagt nix, ich weiß, der code ist schrecklich. ich hab normal nciht so viel mit c++ am hut

Hardware: Voom 1, Jetway 7F2WE1G5-OC-PB, 512MB RAM, M1-ATX, CID650

Software: Windows XP MCE, cPOS

    
Beiträge der letzten Zeit anzeigen:      
Du musst dich anmelden um Beiträge zu schreiben!Du musst dich anmelden um Beiträge zu schreiben!
Vorheriges Thema anzeigenDieses Thema verschickenZeige Benutzer, die dieses Thema gesehen habenDieses Thema als Datei sichernPrintable versionEinloggen, um private Nachrichten zu lesenNächstes Thema anzeigen

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen
 

CarTFT
Forenspecials



Forensicherheit - Alle Zeiten sind GMT + 1 Stunde -
Powered by phpBB2 Plus, phpBB Styles, based on phpBB © 2001/6 phpBB Group :: FI Theme ::

[ Zeit: 1.0228s ][ Queries: 48 (0.5339s) ][ GZIP Ein - Debug Ein ]
carTFT.com