source: ntrip/trunk/BNC/src/bncoutf.cpp @ 8204

Last change on this file since 8204 was 8204, checked in by wiese, 23 months ago

CHANGE: #105 toAscii deprecated

File size: 5.5 KB
Line 
1
2/* -------------------------------------------------------------------------
3 * BKG NTRIP Server
4 * -------------------------------------------------------------------------
5 *
6 * Class:      bncoutf
7 *
8 * Purpose:    Basis Class for File-Writers
9 *
10 * Author:     L. Mervart
11 *
12 * Created:    25-Apr-2008
13 *
14 * Changes:
15 *
16 * -----------------------------------------------------------------------*/
17
18#include <math.h>
19#include <iomanip>
20
21#include "bncoutf.h"
22#include "bncsettings.h"
23
24using namespace std;
25
26// Constructor
27////////////////////////////////////////////////////////////////////////////
28bncoutf::bncoutf(const QString& sklFileName, const QString& intr, int sampl) {
29
30  bncSettings settings;
31
32  _headerWritten = false;
33  _sampl         = sampl;
34  _intr          = intr;
35  _numSec        = 0;
36
37  if (! sklFileName.isEmpty()) {
38    QFileInfo fileInfo(sklFileName);
39    _path        = fileInfo.absolutePath() + QDir::separator();
40    _sklBaseName = fileInfo.baseName();
41    _extension   = fileInfo.completeSuffix();
42
43    expandEnvVar(_path);
44    if (!_extension.isEmpty()) {
45      _extension = "." + _extension;
46    }
47  }
48
49  _append = Qt::CheckState(settings.value("rnxAppend").toInt()) == Qt::Checked;
50  _v3filenames = settings.value("PPP/v3filenames").toBool();
51}
52
53// Destructor
54////////////////////////////////////////////////////////////////////////////
55bncoutf::~bncoutf() {
56  closeFile();
57}
58
59// Close the Old RINEX File
60////////////////////////////////////////////////////////////////////////////
61void bncoutf::closeFile() {
62  _out.close();
63}
64
65// Epoch String
66////////////////////////////////////////////////////////////////////////////
67QString bncoutf::epochStr(const QDateTime& datTim, const QString& intStr,
68    int sampl) {
69
70  QString epoStr = "";
71
72  int indHlp = intStr.indexOf("min");
73  if (!sampl) {
74    sampl++;
75  }
76
77  if ( indHlp != -1) {
78    int step = intStr.left(indHlp-1).toInt();
79    if (_v3filenames) {
80      epoStr +=  QString("%1").arg(datTim.time().hour(), 2, 10, QChar('0')); // H
81    } else {
82      epoStr +=  'A' + datTim.time().hour();
83    }
84
85    if (datTim.time().minute() >= 60-step) {
86      epoStr += QString("%1").arg(60-step, 2, 10, QChar('0'));               // M
87    }
88    else {
89      for (int limit = step; limit <= 60-step; limit += step) {
90        if (datTim.time().minute() < limit) {
91          epoStr += QString("%1").arg(limit-step, 2, 10, QChar('0'));        // M
92          break;
93        }
94      }
95    }
96
97    if (_v3filenames) {
98      epoStr += QString("_%1M").arg(step, 2, 10, QChar('0'));                // period
99    }
100
101    _numSec = 60 * step;
102  }
103  else if (intStr == "1 hour") {
104    int step = intStr.left(indHlp-1).toInt();
105    if (_v3filenames) {
106      epoStr += QString("%1").arg(datTim.time().hour(), 2, 10, QChar('0'));  // H
107      epoStr += QString("%1").arg(0, 2, 10, QChar('0'));                     // M
108      epoStr += QString("_%1H").arg(step+1, 2, 10, QChar('0'));              // period
109    } else {
110      epoStr +=  'A' + datTim.time().hour();
111    }
112    _numSec = 3600;
113  }
114  else {
115    int step = intStr.left(indHlp-1).toInt();
116    if (_v3filenames) {
117      epoStr += QString("%1").arg(0, 2, 10, QChar('0'));                    // H
118      epoStr += QString("%1").arg(0, 2, 10, QChar('0'));                    // M
119      epoStr += QString("_%1D").arg(step+1, 2, 10, QChar('0'));             // period
120    }
121    _numSec = 86400;
122  }
123
124  if (_v3filenames) {
125    if (sampl < 60) {
126      epoStr += QString("_%1S").arg(sampl, 2, 10, QChar('0'));
127    }
128    else {
129      sampl /= 60;
130      epoStr += QString("_%1M").arg(sampl, 2, 10, QChar('0'));
131    }
132  }
133
134  return epoStr;
135}
136
137// File Name according to RINEX Standards
138////////////////////////////////////////////////////////////////////////////
139QString bncoutf::resolveFileName(int GPSweek, const QDateTime& datTim) {
140
141  int dayOfWeek = datTim.date().dayOfWeek();
142  if (dayOfWeek == 7) {
143    dayOfWeek = 0;
144  }
145  int dayOfYear = datTim.date().dayOfYear();
146
147  QString yyyy     = QString::number(datTim.date().year());
148  QString doy      = QString("%1").arg(dayOfYear,3,10, QLatin1Char('0'));
149  QString gpswd    = QString("%1%2").arg(GPSweek).arg(dayOfWeek);
150  QString epoStr   = epochStr(datTim, _intr, _sampl);
151  QString baseName = _sklBaseName;
152  baseName.replace("${GPSWD}", gpswd);
153  baseName.replace("${V3}" , QString("_U_%1%2").arg(yyyy).arg(doy));
154
155  return _path + baseName + epoStr + _extension;
156}
157
158// Re-Open Output File
159////////////////////////////////////////////////////////////////////////////
160t_irc bncoutf::reopen(int GPSweek, double GPSweeks) {
161
162  if (_sampl != 0 && fmod(GPSweeks, _sampl) != 0.0) {
163    return failure;
164  }
165
166  QDateTime datTim = dateAndTimeFromGPSweek(GPSweek, GPSweeks);
167
168  QString newFileName = resolveFileName(GPSweek, datTim);
169
170  // Close the file
171  // --------------
172  if (newFileName != _fName) {
173    closeFile();
174    _headerWritten = false;
175    _fName = newFileName;
176  }
177
178  // Re-Open File, Write Header
179  // --------------------------
180  if (!_headerWritten) {
181    _out.setf(ios::showpoint | ios::fixed);
182    if (_append && QFile::exists(_fName)) {
183      _out.open(_fName.toLatin1().data(), ios::out | ios::app);
184    }
185    else {
186      _out.open(_fName.toLatin1().data());
187      writeHeader(datTim);
188    }
189    if (_out.is_open()) {
190      _headerWritten = true;
191    }
192  }
193
194  return success;
195}
196
197// Write String
198////////////////////////////////////////////////////////////////////////////
199t_irc bncoutf::write(int GPSweek, double GPSweeks, const QString& str) {
200  reopen(GPSweek, GPSweeks);
201  _out << str.toLatin1().data();
202  _out.flush();
203  return success;
204}
Note: See TracBrowser for help on using the repository browser.