Brief description of class still missing. More...
#include <TimeReader.h>
Public Member Functions | |
bool | setOptions (int &argc, char **argv) |
TimeReader () | |
Protected Member Functions | |
virtual bool | parse (QTextStream &s) |
Brief description of class still missing.
Full description of class still missing
bool TimeReader::parse | ( | QTextStream & | s | ) | [protected, virtual] |
Implements QGpCoreTools::ArgumentStdinReader.
References QGpCoreTools::endl(), QGpCoreTools::LineParser::endsAt(), QGpCoreTools::LineParser::setDelimiters(), sOut(), QGpCoreTools::LineParser::startsAt(), str, QGpCoreTools::LineParser::toString(), QGpCoreTools::tr(), and TRACE.
{ TRACE; QTextStream sOut(stdout); QString buf; while(!s.atEnd()) { buf=s.readLine(); if(!buf.isEmpty() && buf[0]!='#') { switch(_action) { case Convert: { bool ok=true; QString textBefore, textAfter; if(_column>-1) { LineParser p(buf); p.setDelimiters(_delimiters); textAfter=buf.mid(p.endsAt(_column, ok)+1); textBefore=buf.left(p.startsAt(_column, ok)); buf=p.toString(_column, ok); if(!ok) { App::stream() << tr("gptime: error parsing column %1").arg(_column) << endl; return false; } } else { if(_endByte>0 && _endByte<buf.length()) { textAfter=buf.mid(_endByte+1); buf=buf.left(_endByte+1); } if(_startByte>0 && _startByte<buf.length()) { textBefore=buf.left(_startByte); buf=buf.mid(_startByte); } } buf=buf.trimmed(); if(_verbose) { sOut << "# converting \"" << buf << "\"" << endl; } QString str; switch(_mode) { case Absolute: { DateTime dt=inDateTime(buf, ok); if(!ok) { App::stream() << tr("gptime: error parsing input: '%1'").arg(buf) << endl; return false; } str=outDateTime(dt); } break; case Relative: { double t=Number::timeToSeconds(buf); str=Number::secondsToTime(t, Number::type(QChar(_outFormat[0]).toAscii()), _outputPrecision); } break; } if(!str.isNull()) { sOut << textBefore << str << textAfter << endl; } } break; case None: App::stream() << tr("gptime: no action defined, see -h") << endl; return false; } } } return true; }
bool TimeReader::setOptions | ( | int & | argc, |
char ** | argv | ||
) |
References QGpCoreTools::endl(), QGpCoreTools::tr(), and TRACE.
Referenced by main().
{ TRACE; int i, j=1; for(i=1; i<argc; i++) { QByteArray arg=argv[i]; if(arg[0]=='-') { if(arg=="-convert") { _action=Convert; } else if(arg=="-relative") { _mode=Relative; } else if(arg=="-i" || arg=="-in-format") { CoreApplication::checkOptionArg(i, argc, argv); _inFormat=argv[i]; } else if(arg=="-o" || arg=="-out-format") { CoreApplication::checkOptionArg(i, argc, argv); _outFormat=argv[i]; } else if(arg=="-p") { CoreApplication::checkOptionArg(i, argc, argv); _outputPrecision=atoi(argv[i]); } else if(arg=="-c") { CoreApplication::checkOptionArg(i, argc, argv); _column=atoi(argv[i])-1; } else if(arg=="-d") { CoreApplication::checkOptionArg(i, argc, argv); _delimiters=argv[i]; } else if(arg=="-s") { CoreApplication::checkOptionArg(i, argc, argv); _startByte=atoi(argv[i]); } else if(arg=="-e") { CoreApplication::checkOptionArg(i, argc, argv); _endByte=atoi(argv[i]); } else if(arg=="-verbose") { _verbose=true; } else { App::stream() << tr("gptime: bad option %1, see -help").arg(argv[i]) << endl; return false; } } else { argv[j++]=argv[i]; } } if(j < argc) { argv[j]=0; argc=j; } switch(_mode) { case Absolute: if(_inFormat.isEmpty()) { _inFormat="time_t"; } if(_outFormat.isEmpty()) { _outFormat="yyyy-MM-dd hh:mm:ssz"; } break; case Relative: if(!_inFormat.isEmpty()) { App::stream() << tr("gptime: for relative mode, input format is automatically recognized, '-i' is not valid.") << endl; return false; } if(_outFormat.isEmpty()) { _outFormat="w"; } else { if(_outFormat.count()>1) { App::stream() << tr("gptime: not a valid format in relative mode (%1).").arg(_outFormat) << endl; return false; } } break; } return true; }