Esempio n. 1
0
//! 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();
	}
}
Esempio n. 2
0
const size_t SpikeNeuronBase::localId() const {
	return xi() + colSize()*yi();
}