//! Controller function to convert input file data to an output .CSV file //! @see mainLayoutCreateConnections() void Window::dataToCsv() { QFile infile, outfile; bool errorOpeningEitherFile = csvOpenFiles(infile, outfile); if(!errorOpeningEitherFile) { int colCount = spinColumns->value(); int rowSize = rowDataSize(); quint64 rowsOutput = 0; quint64 rowLimit = comboRowLimit->currentText().toULongLong(); quint64 divCount = infileRowLimitDivisor(); bool byteSwap = checkBoxEndian->isChecked(); bool cancelled = false; double vMin = minVoltage->value(); double vMax = maxVoltage->value(); QTextStream ts(&outfile); if(checkBoxWriteColNames->isChecked()) if(csvWriteColumnNames(ts)) rowsOutput += 1; QByteArray colSize(colCount, '\n'); for(int index = 0; index < colCount; ++index) colSize[index] = dataSpinNumBytes.at(index)->value(); quint64 pMax = infileNumberRows(); if(rowLimit > 0 && rowLimit < pMax) pMax = rowLimit; QProgressDialog progress("Saving CSV file...", "Cancel", 0, pMax, this); progress.setModal(true); statusBarMessage->setText(tr("Processing data file...")); while(!infile.atEnd()) { // while(rowsOutput <= pMax) { if(rowLimit > 0 && rowsOutput >= rowLimit) break; // Updating the status bar for every line processed is too slow! if(rowsOutput % 1024 == 0) { progress.setValue(rowsOutput); if(progress.wasCanceled()) { cancelled = true; statusBarMessage->setText(tr("Processing cancelled.")); outfile.remove(); break; } } csvProcessRow(ts, infile, colCount, colSize, byteSwap, vMin, vMax); ++rowsOutput; if(divCount > 1) infile.seek(infile.pos() + (rowSize * (divCount - 1))); } infile.close(); outfile.close(); if(!cancelled) statusBarMessage->setText(tr("Processing complete.")); if(checkBoxOpenWhenDone->isChecked()) openFileWithAssociatedProgram(); } }
const size_t SpikeNeuronBase::localId() const { return xi() + colSize()*yi(); }