bool AMExporterGeneralAscii::writeSeparateFiles(const QString& destinationFolderPath) { for(int s=0; s<separateFileDataSources_.count(); s++) { setCurrentDataSource(separateFileDataSources_.at(s)); // sets currentDataSourceIndex_ AMDataSource* ds = currentScan_->dataSourceAt(currentDataSourceIndex_); QFile file; QString separateFileName = parseKeywordString( destinationFolderPath % "/" % option_->separateSectionFileName() ); if(!openFile(&file, separateFileName)) { AMErrorMon::report(AMErrorReport(this, AMErrorReport::Alert, -4, "Export failed (partially): You selected to create separate files for certain data sets. Could not open the file '" % separateFileName % "' for writing. Check that you have permission to save files there, and that a file with that name doesn't already exists.")); return false; } QTextStream ts(&file); // section header? if(option_->sectionHeaderIncluded()) { ts << parseKeywordString(option_->sectionHeader()); ts << option_->newlineDelimiter(); } // column header? if(option_->columnHeaderIncluded()) { // 1D data sources: if(ds->rank() == 0) { ts << parseKeywordString(option_->columnHeader()) << option_->columnDelimiter(); } else if(ds->rank() == 1) { if(separateFileIncludeX_.at(s)) ts << parseKeywordString(option_->columnHeader()) << ".X" << option_->columnDelimiter(); ts << parseKeywordString(option_->columnHeader()) << option_->columnDelimiter(); } else if(ds->rank() == 2) { // 2D if(separateFileIncludeX_.at(s)) ts << parseKeywordString(option_->columnHeader()) << ".X" << option_->columnDelimiter(); // need a loop over the second axis columns for(int cc=0; cc<ds->size(1); cc++) { setCurrentColumnIndex(cc); ts << parseKeywordString(option_->columnHeader()) << "[" << ds->axisValue(1, cc).toString() << ds->axisInfoAt(1).units << "]" << option_->columnDelimiter(); } } ts << option_->newlineDelimiter() << option_->columnHeaderDelimiter() << option_->newlineDelimiter(); } // table switch(ds->rank()) { case 0: ts << ds->value(AMnDIndex()).toString() << option_->columnDelimiter() << option_->newlineDelimiter(); break; case 1: { int maxTableRows = ds->size(0); for(int r=0; r<maxTableRows; r++) { if(separateFileIncludeX_.at(s)) { ts << ds->axisValue(0,r).toString() << option_->columnDelimiter(); } ts << ds->value(r).toString() << option_->columnDelimiter() << option_->newlineDelimiter(); } } break; case 2: { int maxTableRows = ds->size(0); for(int r=0; r<maxTableRows; r++) { if(separateFileIncludeX_.at(s)) ts << ds->axisValue(0,r).toString() << option_->columnDelimiter(); // need a loop over the second axis columns for(int cc=0; cc<ds->size(1); cc++) { ts << ds->value(AMnDIndex(r,cc)).toString() << option_->columnDelimiter(); } ts << option_->newlineDelimiter(); } } break; default: /// \todo Implement 3D break; } } return true; }
void AMExporterGeneralAscii::writeMainTable() { QTextStream ts(file_); // 1. Column header. int maxTableRows = 0; if(option_->columnHeaderIncluded()) { for(int c=0; c<mainTableDataSources_.count(); c++) { setCurrentDataSource(mainTableDataSources_.at(c)); AMDataSource* ds = currentScan_->dataSourceAt(currentDataSourceIndex_); if(ds->size(0) > maxTableRows) maxTableRows = ds->size(0); // convenient... lets figure this out while we're looping through anyway // 1D data sources: if(ds->rank() == 1) { if(mainTableIncludeX_.at(c)) ts << parseKeywordString(option_->columnHeader()) << ".X" << option_->columnDelimiter(); ts << parseKeywordString(option_->columnHeader()) << option_->columnDelimiter(); } else { // 2D if(mainTableIncludeX_.at(c)) ts << parseKeywordString(option_->columnHeader()) << ".X" << option_->columnDelimiter(); // need a loop over the second axis columns for(int cc=0; cc<ds->size(1); cc++) { setCurrentColumnIndex(cc); ts << parseKeywordString(option_->columnHeader()) << "[" << ds->axisValue(1, cc).toString() << ds->axisInfoAt(1).units << "]" << option_->columnDelimiter(); } } } ts << option_->newlineDelimiter() << option_->columnHeaderDelimiter() << option_->newlineDelimiter(); } // 2. rows for(int r=0; r<maxTableRows; r++) { // over rows within columns for(int c=0; c<mainTableDataSources_.count(); c++) { setCurrentDataSource(mainTableDataSources_.at(c)); AMDataSource* ds = currentScan_->dataSourceAt(currentDataSourceIndex_); bool doPrint = (ds->size(0) > r); // print x column? if(mainTableIncludeX_.at(c)) { if(doPrint) ts << ds->axisValue(0,r).toString(); ts << option_->columnDelimiter(); } // 1D data sources: if(ds->rank() == 1) { if(doPrint) ts << ds->value(r).toString(); ts << option_->columnDelimiter(); } else if(ds->rank() == 2) { // need a loop over the second axis columns for(int cc=0; cc<ds->size(1); cc++) { if(doPrint) ts << ds->value(AMnDIndex(r,cc)).toString(); ts << option_->columnDelimiter(); } } } ts << option_->newlineDelimiter(); } }
void AMExporterGeneralAscii::writeSeparateSections() { QTextStream ts(file_); for(int s=0; s<separateSectionDataSources_.count(); s++) { ts << option_->newlineDelimiter(); setCurrentDataSource(separateSectionDataSources_.at(s)); // sets currentDataSourceIndex_ AMDataSource* ds = currentScan_->dataSourceAt(currentDataSourceIndex_); // section header? if(option_->sectionHeaderIncluded()) { ts << parseKeywordString(option_->sectionHeader()); ts << option_->newlineDelimiter(); } // column header? if(option_->columnHeaderIncluded()) { // 1D data sources: if(ds->rank() == 0) { ts << parseKeywordString(option_->columnHeader()) << option_->columnDelimiter(); } else if(ds->rank() == 1) { if(separateSectionIncludeX_.at(s)) ts << parseKeywordString(option_->columnHeader()) << ".X" << option_->columnDelimiter(); ts << parseKeywordString(option_->columnHeader()) << option_->columnDelimiter(); } else if(ds->rank() == 2) { // 2D if(separateSectionIncludeX_.at(s)) ts << parseKeywordString(option_->columnHeader()) << ".X" << option_->columnDelimiter(); // need a loop over the second axis columns for(int cc=0; cc<ds->size(1); cc++) { setCurrentColumnIndex(cc); ts << parseKeywordString(option_->columnHeader()) << "[" << ds->axisValue(1, cc).toString() << ds->axisInfoAt(1).units << "]" << option_->columnDelimiter(); } } ts << option_->newlineDelimiter() << option_->columnHeaderDelimiter() << option_->newlineDelimiter(); } // table switch(ds->rank()) { case 0: ts << ds->value(AMnDIndex()).toString() << option_->columnDelimiter() << option_->newlineDelimiter(); break; case 1: { int maxTableRows = ds->size(0); for(int r=0; r<maxTableRows; r++) { if(separateSectionIncludeX_.at(s)) { ts << ds->axisValue(0,r).toString() << option_->columnDelimiter(); } ts << ds->value(r).toString() << option_->columnDelimiter() << option_->newlineDelimiter(); } } break; case 2: { int maxTableRows = ds->size(0); for(int r=0; r<maxTableRows; r++) { if(separateSectionIncludeX_.at(s)) ts << ds->axisValue(0,r).toString() << option_->columnDelimiter(); // need a loop over the second axis columns for(int cc=0; cc<ds->size(1); cc++) { ts << ds->value(AMnDIndex(r,cc)).toString() << option_->columnDelimiter(); } ts << option_->newlineDelimiter(); } } break; default: /// \todo Implement 3D break; } } }
void AMExporterGeneralAscii::writeSeparateSections() { QTextStream ts(file_); if (option_->higherDimensionsInRows()){ for(int s=0; s<separateSectionDataSources_.count(); s++) { ts << option_->newlineDelimiter(); setCurrentDataSource(separateSectionDataSources_.at(s)); // sets currentDataSourceIndex_ AMDataSource* ds = currentScan_->dataSourceAt(currentDataSourceIndex_); int precision = option_->exportPrecision(ds->name()); // section header? if(option_->sectionHeaderIncluded()) { ts << parseKeywordString(option_->sectionHeader()); ts << option_->newlineDelimiter(); } // column header? if(option_->columnHeaderIncluded()) { // 1D data sources: if(ds->rank() == 0) { ts << parseKeywordString(option_->columnHeader()) << option_->columnDelimiter(); } else if(ds->rank() == 1) { if(separateSectionIncludeX_.at(s)) ts << parseKeywordString(option_->columnHeader()) << ".X" << option_->columnDelimiter(); ts << parseKeywordString(option_->columnHeader()) << option_->columnDelimiter(); } else if(ds->rank() == 2) { // 2D if(separateSectionIncludeX_.at(s)) ts << parseKeywordString(option_->columnHeader()) << ".X" << option_->columnDelimiter(); // need a loop over the second axis columns for(int cc=0; cc<ds->size(1); cc++) { setCurrentColumnIndex(cc); ts << parseKeywordString(option_->columnHeader()) << "[" << ds->axisValue(1, cc).toString(precision) << ds->axisInfoAt(1).units << "]" << option_->columnDelimiter(); } } ts << option_->newlineDelimiter() << option_->columnHeaderDelimiter() << option_->newlineDelimiter(); } // table switch(ds->rank()) { case 0: ts << ds->value(AMnDIndex()).toString(precision) << option_->columnDelimiter() << option_->newlineDelimiter(); break; case 1: { int maxTableRows = ds->size(0); for(int r=0; r<maxTableRows; r++) { if(separateSectionIncludeX_.at(s)) { ts << ds->axisValue(0,r).toString(precision) << option_->columnDelimiter(); } ts << ds->value(r).toString(precision) << option_->columnDelimiter() << option_->newlineDelimiter(); } } break; case 2: { int maxTableRows = ds->size(0); for(int r=0; r<maxTableRows; r++) { if(separateSectionIncludeX_.at(s)) ts << ds->axisValue(0,r).toString(precision) << option_->columnDelimiter(); // need a loop over the second axis columns for(int cc=0; cc<ds->size(1); cc++) { ts << ds->value(AMnDIndex(r,cc)).toString(precision) << option_->columnDelimiter(); } ts << option_->newlineDelimiter(); } } break; default: /// \todo Implement 3D break; } } } // For writing out in columns. Essentially transposing the file. else{ for(int s=0; s<separateSectionDataSources_.count(); s++) { setCurrentDataSource(separateSectionDataSources_.at(s)); // sets currentDataSourceIndex_ AMDataSource* ds = currentScan_->dataSourceAt(currentDataSourceIndex_); int precision = option_->exportPrecision(ds->name()); // section header? if(option_->sectionHeaderIncluded()) { ts << parseKeywordString(option_->sectionHeader()); ts << option_->newlineDelimiter(); } // If including the X values. if (separateSectionIncludeX_.at(s)){ switch(ds->rank()){ case 0: break; case 1: case 2:{ ts << parseKeywordString(option_->columnHeader()) << ".X" << option_->columnDelimiter(); int maxTableColumns = ds->size(0); for(int column = 0; column < maxTableColumns; column++) ts << ds->axisValue(0,column).toString(precision) << option_->columnDelimiter(); ts << option_->newlineDelimiter(); break; } default: /// \todo 3D. break; } } // Main table with column headers prefacing rows. switch (ds->rank()){ case 0:{ if(option_->columnHeaderIncluded()) ts << parseKeywordString(option_->columnHeader()) << option_->columnDelimiter(); ts << ds->value(AMnDIndex()).toString(precision) << option_->columnDelimiter() << option_->newlineDelimiter(); break; } case 1:{ if (option_->columnHeaderIncluded()) ts << parseKeywordString(option_->columnHeader()) << option_->columnDelimiter(); int maxTableColumns = ds->size(0); for(int column = 0; column < maxTableColumns; column++) ts << ds->value(column).toString(precision) << option_->columnDelimiter(); ts << option_->newlineDelimiter(); break; } case 2:{ for (int cc = 0; cc < ds->size(1); cc++){ if (option_->columnHeaderIncluded()) ts << parseKeywordString(option_->columnHeader()) << "[" << ds->axisValue(1, cc).toString(precision) << ds->axisInfoAt(1).units << "]" << option_->columnDelimiter(); int maxTableColumns = ds->size(0); for (int column = 0; column < maxTableColumns; column++) ts << ds->value(AMnDIndex(column, cc)).toString(precision) << option_->columnDelimiter(); ts << option_->newlineDelimiter(); } break; } default: /// \todo 3D break; } } } }