// get Date and time from this format : xx.xx.xx|xx:xx:xx:xxx TimeStamp* TimeStamp::DateTimeParse(string& tstamp) { stringstream cstream(tstamp); string date = "", time = ""; getline(cstream, date, '|'); getline(cstream, time); if (!CommandParser::getInstance()->checkDateFormat(date)) throw new EXCEPTION("Time format for date isn't correct. Valid format : xx.xx.xxxx"); if (time != "" && !CommandParser::getInstance()->checkTimeFormat(time)) throw new EXCEPTION("Time format for time isn't correct. Valid format : xx:xx:xx:xxx"); stringstream dstream(date), tstream(time); string day, month, year, hr , min, sec, ms; getline(dstream, day, '.'); getline(dstream, month, '.'); getline(dstream, year); /*podrazumevano vreme*/ if (time == "") { hr = min = sec = ms = "0"; } else { getline(tstream, hr, ':'); getline(tstream, min, ':'); getline(tstream, sec, ':'); getline(tstream, ms); } int Day = atoi(day.c_str()); int Month = atoi(month.c_str()); int Year = atoi(year.c_str()); int Hour = atoi(hr.c_str()); int Min = atoi(min.c_str()); int Sec = atoi(sec.c_str()); int Ms = atoi(ms.c_str()); return new TimeStamp(Hour, Min, Sec, Ms, Day, Month, Year); }
void TestImport::csvImport() { // Fetch data QFETCH(QString, csv); QFETCH(char, separator); QFETCH(char, quote); QFETCH(QString, encoding); QFETCH(int, numfields); QFETCH(QVector<QStringList>, result); // Create temporary CSV file QTemporaryFile file; QVERIFY(file.open()); { QTextStream out(&file); out.setCodec(encoding.toUtf8()); out << csv; } file.flush(); CSVParser csvparser(true, separator, quote); file.seek(0); QTextStream tstream(&file); tstream.setCodec(encoding.toUtf8()); csvparser.parse(tstream); // Check return values QCOMPARE(csvparser.csv(), result); QCOMPARE((int)csvparser.columns(), numfields); }
void ImportCsvDialog::updatePreview() { // Show/hide custom quote/separator input fields ui->editCustomQuote->setVisible(ui->comboQuote->currentIndex() == ui->comboQuote->count()-1); ui->editCustomSeparator->setVisible(ui->comboSeparator->currentIndex() == ui->comboSeparator->count()-1); ui->editCustomEncoding->setVisible(ui->comboEncoding->currentIndex() == ui->comboEncoding->count()-1); // Get preview data QFile file(csvFilename); file.open(QIODevice::ReadOnly); CSVParser csv(ui->checkBoxTrimFields->isChecked(), currentSeparatorChar(), currentQuoteChar()); QTextStream tstream(&file); tstream.setCodec(currentEncoding().toUtf8()); csv.parse(tstream, 20); file.close(); // Reset preview widget ui->tablePreview->clear(); ui->tablePreview->setColumnCount(csv.columns()); // Exit if there are no lines to preview at all if(csv.columns() == 0) return; // Use first row as header if necessary CSVParser::TCSVResult::const_iterator itBegin = csv.csv().begin(); if(ui->checkboxHeader->isChecked()) { ui->tablePreview->setHorizontalHeaderLabels(*itBegin); ++itBegin; } // Fill data section ui->tablePreview->setRowCount(std::distance(itBegin, csv.csv().end())); for(CSVParser::TCSVResult::const_iterator ct = itBegin; ct != csv.csv().end(); ++ct) { for(QStringList::const_iterator it = ct->begin(); it != ct->end(); ++it) { int rowNum = std::distance(itBegin, ct); if(it == ct->begin()) { ui->tablePreview->setVerticalHeaderItem( rowNum, new QTableWidgetItem(QString::number(rowNum + 1))); } ui->tablePreview->setItem( rowNum, std::distance(ct->begin(), it), new QTableWidgetItem(*it)); } } }
void HTMLExporter::write(const KBookmarkGroup &grp, const QString &filename, bool showAddress) { QFile file(filename); if (!file.open(QIODevice::WriteOnly)) { qCritical() << "Can't write to file " << filename << endl; return; } QTextStream tstream(&file); tstream.setCodec("UTF-8"); tstream << toString(grp, showAddress); }
void AccountManager::SaveToFile() { QFile file(accounts_path_ + accounts_filename_); if(file.open(QIODevice::ReadWrite)) { QTextStream tstream(&file); accounts_->save(tstream, 2); file.close(); } }
void HTMLExporter::write(const KBookmarkGroup &grp, const QString &filename, bool showAddress) { QFile file(filename); if(!file.open(IO_WriteOnly)) { kdError(7043) << "Can't write to file " << filename << endl; return; } QTextStream tstream(&file); tstream.setEncoding(QTextStream::UnicodeUTF8); tstream << toString(grp, showAddress); }
void ExpressionEvaluator2::parse() { ExpressionASTLexer::InputStreamType input((const ANTLR_UINT8*)expr.c_str(), ANTLR_ENC_8BIT, expr.length(), NULL); ExpressionASTLexer lxr(&input); ExpressionASTParser::TokenStreamType tstream(ANTLR_SIZE_HINT, lxr.get_tokSource() ); ExpressionASTParser psr(&tstream); psr.setSymbolTable(&st); exprAst = psr.expr(); }
int WebmConverter::make_conv_file() { QFile conv_file("tmp.config"); conv_file.open(QIODevice::ReadWrite); QTextStream tstream(&conv_file); tstream >> _exec_script; conv_file.close(); return 0; }
void accountsCache::saveToFile() { QDir dir; if(!dir.exists(getSettingsDir())) dir.mkpath(getSettingsDir()); QString fileAccounts = getSettingsDir() + "accounts.xml"; QFile file(fileAccounts); if(file.open(QIODevice::ReadWrite)) { QTextStream tstream(&file); m_accountsDocument.save(tstream, 2); file.close(); } }
void TestImport::csvImport() { // Fetch data QFETCH(QString, csv); QFETCH(char, separator); QFETCH(char, quote); QFETCH(QString, encoding); QFETCH(int, numfields); QFETCH(QVector<QVector<QByteArray>>, result); // Create temporary CSV file QTemporaryFile file; QVERIFY(file.open()); { QTextStream out(&file); out.setCodec(encoding.toUtf8()); out << csv; } file.flush(); CSVParser csvparser(true, separator, quote); file.seek(0); QTextStream tstream(&file); tstream.setCodec(encoding.toUtf8()); QVector<QVector<QByteArray>> parsedCsv; int parsedCsvColumns = 0; csvparser.parse([&parsedCsv, &parsedCsvColumns](size_t /*rowNum*/, const CSVRow& data) -> bool { QVector<QByteArray> row; for(size_t i=0;i<data.num_fields;i++) row.push_back(QByteArray(data.fields[i].data, data.fields[i].data_length)); parsedCsv.push_back(row); if(row.size() > parsedCsvColumns) parsedCsvColumns = row.size(); return true; }, tstream); // Check return values QCOMPARE(parsedCsvColumns, numfields); QCOMPARE(parsedCsv.size(), result.size()); for(int i=0;i<parsedCsv.size();i++) { QCOMPARE(parsedCsv.at(i).size(), result.at(i).size()); for(int j=0;j<parsedCsv.at(i).size();j++) QCOMPARE(parsedCsv.at(i).at(j), result.at(i).at(j)); } QCOMPARE(parsedCsv, result); }
QStringList FileOperations::contentsByLine(const QString& filename) { QStringList list; QString line; if (!fileExists(filename)) return list; QFile f(filename); f.open(IO_ReadOnly); QTextStream tstream(&f); while(!(line=tstream.readLine()).isNull()) { list.push_back(line); } f.close(); return list; }
double ExpressionEvaluator::evaluateExpression() { //std::cerr << "Expression:" << expr << std::endl; //st.dump(); // TODO: There should be no need to recreate a new lexer and parser, // however the reset() methods of lexer and parser do not work (yet) // a possible solution could be to create an AST in the parser, // and then reuse the AST during evaluation ExpressionLexer::InputStreamType input((const ANTLR_UINT8*)expr.c_str(), ANTLR_ENC_8BIT, expr.length(), NULL); ExpressionLexer lxr(&input); ExpressionParser::TokenStreamType tstream(ANTLR_SIZE_HINT, lxr.get_tokSource() ); ExpressionParser psr(&tstream); psr.setSymbolTable(&st); return psr.expr(); }
//------------------------------------------------------------------------ bool FormatLoad::getFormats(QList<Format> &formatList) { formatList.clear(); QProcess babel; babel.start("gpsbabel", QStringList() << "-^3"); if (!babel.waitForStarted()) return false; babel.closeWriteChannel(); if (!babel.waitForFinished()) return false; if (babel.exitCode() != 0) return false; QTextStream tstream(babel.readAll()); QList<int>lineList; int k=0; while(!tstream.atEnd()) { QString l = tstream.readLine(); k++; if (!QRegExp("^[\\s]*$").exactMatch(l)) { lines << l; lineList<<k; } } currentLine = 0; for (bool dataPresent = skipToValidLine(); dataPresent; dataPresent=skipToValidLine()) { Format format; if (!processFormat(format)) { QMessageBox::information (0, appName, QObject::tr("Error processing formats from running process \"gpsbabel -^3\" at line %1").arg(lineList[currentLine])); } else { formatList << format; } } return true; }
void ImportCsvDialog::accept() { // save settings QSettings settings(QApplication::organizationName(), QApplication::organizationName()); settings.beginGroup("importcsv"); settings.setValue("firstrowheader", ui->checkboxHeader->isChecked()); settings.setValue("separator", currentSeparatorChar()); settings.setValue("quotecharacter", currentQuoteChar()); settings.setValue("trimfields", ui->checkBoxTrimFields->isChecked()); settings.setValue("encoding", currentEncoding()); settings.endGroup(); // Parse all csv data QFile file(csvFilename); file.open(QIODevice::ReadOnly); CSVParser csv(ui->checkBoxTrimFields->isChecked(), currentSeparatorChar(), currentQuoteChar()); csv.setCSVProgress(new CSVImportProgress(file.size())); QTextStream tstream(&file); tstream.setCodec(currentEncoding().toUtf8()); csv.parse(tstream); file.close(); if(csv.csv().size() == 0) return; // Generate field names. These are either taken from the first CSV row or are generated in the format of "fieldXY" depending on the user input sqlb::FieldVector fieldList; CSVParser::TCSVResult::const_iterator itBegin = csv.csv().begin(); if(ui->checkboxHeader->isChecked()) { ++itBegin; for(QStringList::const_iterator it = csv.csv().at(0).begin(); it != csv.csv().at(0).end(); ++it) { // Remove invalid characters QString thisfield = *it; thisfield.replace("`", ""); thisfield.replace(" ", ""); thisfield.replace('"', ""); thisfield.replace("'",""); thisfield.replace(",",""); thisfield.replace(";",""); // Avoid empty field names if(thisfield.isEmpty()) thisfield = QString("field%1").arg(std::distance(csv.csv().at(0).begin(), it) + 1); fieldList.push_back(sqlb::FieldPtr(new sqlb::Field(thisfield, ""))); } } else { for(size_t i=0; i < csv.columns(); ++i) fieldList.push_back(sqlb::FieldPtr(new sqlb::Field(QString("field%1").arg(i+1), ""))); } // Show progress dialog QProgressDialog progress(tr("Inserting data..."), tr("Cancel"), 0, csv.csv().size()); progress.setWindowModality(Qt::ApplicationModal); progress.show(); // Are we importing into an existing table? bool importToExistingTable = false; objectMap objects = pdb->getBrowsableObjects(); for(objectMap::ConstIterator i=objects.begin();i!=objects.end();++i) { if(i.value().gettype() == "table" && i.value().getname() == ui->editName->text()) { if((size_t)i.value().table.fields().size() != csv.columns()) { QMessageBox::warning(this, QApplication::applicationName(), tr("There is already a table of that name and an import into an existing table is only possible if the number of columns match.")); return; } else { if(QMessageBox::question(this, QApplication::applicationName(), tr("There is already a table of that name. Do you want to import the data into it?"), QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) { importToExistingTable = true; break; } else { return; } } } } // Create a savepoint, so we can rollback in case of any errors during importing // db needs to be saved or an error will occur QString restorepointName = QString("CSVIMPORT_%1").arg(QDateTime::currentMSecsSinceEpoch()); if(!pdb->setSavepoint(restorepointName)) return rollback(this, pdb, progress, restorepointName, 0, tr("Creating restore point failed: %1").arg(pdb->lastErrorMessage)); // Create table if(!importToExistingTable) { if(!pdb->createTable(ui->editName->text(), fieldList)) return rollback(this, pdb, progress, restorepointName, 0, tr("Creating the table failed: %1").arg(pdb->lastErrorMessage)); } // now lets import all data, one row at a time for(CSVParser::TCSVResult::const_iterator it = itBegin; it != csv.csv().end(); ++it) { QString sql = QString("INSERT INTO `%1` VALUES(").arg(ui->editName->text()); QStringList insertlist; for(QStringList::const_iterator jt = it->begin(); jt != it->end(); ++jt) { // need to mprintf here char* formSQL = sqlite3_mprintf("%Q", (const char*)jt->toUtf8()); insertlist << formSQL; if(formSQL) sqlite3_free(formSQL); } // add missing fields with empty values for(unsigned int i = insertlist.size(); i < csv.columns(); ++i) { qWarning() << "ImportCSV" << tr("Missing field for record %1").arg(std::distance(itBegin, it) + 1); insertlist << "NULL"; } sql.append(insertlist.join(QChar(','))); sql.append(");"); if(!pdb->executeSQL(sql, false, false)) return rollback(this, pdb, progress, restorepointName, std::distance(itBegin, it) + 1, tr("Inserting row failed: %1").arg(pdb->lastErrorMessage)); // Update progress bar and check if cancel button was clicked unsigned int prog = std::distance(csv.csv().begin(), it); if(prog % 100 == 0) progress.setValue(prog); if(progress.wasCanceled()) return rollback(this, pdb, progress, restorepointName, std::distance(itBegin, it) + 1, ""); } QApplication::restoreOverrideCursor(); // restore original cursor QDialog::accept(); }
bool LoadSolutionRebus(Puzzle * puz, const std::string & table, const std::string & grid) { // NB: In the grid rebus section (GRBS), the index is 1 greater than the // index in the rebus table section (RTBL). if (grid.size() != puz->GetGrid().GetWidth() * puz->GetGrid().GetHeight()) return false; // Read the rebus table (RTBL) // Format: index ':' string ';' // - Index is a number, padded to two digits with a space if needed. std::map<unsigned char, std::string> rebusTable; std::istringstream tstream(table); istream_wrapper table_stream(tstream); for (;;) { std::string key; // Read the index try { key = table_stream.ReadString(':'); } catch(std::ios::failure &) { break; } int index = atoi(key.c_str()); if (index == 0 && key != " 0") return false; // The index value in the rebus-table section is 1 less than the // index in the grid-rebus, so we need add 1 here. ++index; std::string value = table_stream.ReadString(';'); rebusTable[static_cast<unsigned char>(index)] = value; } if (! table_stream.CheckEof()) return false; // Set the grid rebus solution std::istringstream gstream(grid); istream_wrapper grid_stream(gstream); for (Square * square = puz->GetGrid().First(); square != NULL; square = square->Next()) { const unsigned char index = grid_stream.ReadChar(); if (index > 0) { // Look for this index in the rebus table std::map<unsigned char, std::string>::const_iterator it; it = rebusTable.find(index); if (it == rebusTable.end()) return false; // Don't overwrite the plain solution square->SetSolutionRebus(decode_puz(it->second)); } } if (! grid_stream.CheckEof()) return false; return true; }