Κώδικας:
#include <iostream>
#include <fstream>
#include <string>
#include <boost/regex.hpp>
using namespace std;
int main(int argc, const char *argv[])
{
string line;
ifstream myfile ("/dev/rfcomm0");
// get the logfile from the input
string mylogfile = argv[1];
cout << mylogfile << endl;
ofstream logfile;
logfile.open((mylogfile).c_str());
string gpstime,gpslatitude,gpslongitude,gpsfix,gpssat,gpsaltitude,gpsspeedtext;
int gpsspeed;
// print the header
logfile << "# header information" << endl;
logfile << "# gpstime,latitude,longitude,speed(km/h),fix,satellites,altitude(m)" << endl;
if(myfile.is_open())
{
while(!myfile.eof())
{
getline (myfile,line);
boost::regex gprmc(".+GPRMC,\\d+\\.\\d+,\\w,\\d+\\.\\d+,\\w,\\d+\\.\\d+,\\w,(\\d+\\.\\d+).+");
boost::smatch mgprmc;
if(boost::regex_match(line, mgprmc, gprmc, boost::match_extra))
{
gpsspeedtext=mgprmc[1];
istringstream speedbuf(gpsspeedtext);
speedbuf >> gpsspeed;
// now we need to convert it to kilometers
gpsspeed=1.852*gpsspeed;
} // if
boost::regex gpgga(".+GPGGA,(\\d+\\.\\d+),(\\d+\\.\\d+,\\w),(\\d+\\.\\d+,\\w),(\\d+),(\\d+),\\d+\\.\\d+,(\\d+\\.\\d+).+");
boost::smatch mgpgga;
if(boost::regex_match(line, mgpgga, gpgga, boost::match_extra))
{
gpstime=mgpgga[1];
gpslatitude=mgpgga[2];
gpslongitude=mgpgga[3];
gpsfix=mgpgga[4];
gpssat=mgpgga[5];
gpsaltitude=mgpgga[6];
logfile << gpstime << "," << gpslatitude << "," << gpslongitude << "," << "," << gpsspeed << gpsfix << "," << gpssat << "," << gpsaltitude << endl;
}
} // while
myfile.close();
logfile.close();
} // if
return 0;
}