From 14632595315a4d0c2e1ef7986d6c482ba7e2e714 Mon Sep 17 00:00:00 2001 From: Michael Innerberger <michael.innerberger@asc.tuwien.ac.at> Date: Tue, 8 Aug 2023 16:38:10 -0400 Subject: [PATCH] Consolidate some of the printing functionality --- lib/storage/@LevelData/LevelData.m | 66 ++++++++++++---------------- lib/storage/@LevelData/printHeader.m | 7 +-- lib/storage/@LevelData/printLevel.m | 12 +++-- lib/storage/@LevelData/saveToTable.m | 20 ++++----- 4 files changed, 42 insertions(+), 63 deletions(-) diff --git a/lib/storage/@LevelData/LevelData.m b/lib/storage/@LevelData/LevelData.m index 1be398c..04c3ec1 100644 --- a/lib/storage/@LevelData/LevelData.m +++ b/lib/storage/@LevelData/LevelData.m @@ -34,13 +34,6 @@ classdef LevelData < handle timeVariable (1,:) cell end - properties (Access=private) - % Separator for printing to command line - separator - % Minimal width of variables for printing in command line - minimalWidth = 8; - end - properties (Dependent) % Path to folder for file storage foldername (1,:) char @@ -67,10 +60,6 @@ classdef LevelData < handle properties (Dependent, Access=private) % Boolean vector determining whether variable is a scalar value isScalar (1,:) logical - % String specifying output format in printLevel - formatSpecifier (1,:) char - % String specifying header format in printLevel - headerSpecifier (1,:) char end methods @@ -197,32 +186,6 @@ classdef LevelData < handle bool = (obj.nLevel <= 1); end - function spec = get.headerSpecifier(obj) - % Creates formatting string for the header of the output - % to command line - spec = ''; - for j = 1:obj.nScalarVariable - t = obj.type.(obj.scalarVariable{j}); - if j < obj.nScalarVariable - spec = [spec, '%', obj.getWidth(t), 's', obj.separator]; %#ok<*AGROW> - else - spec = [spec, '%', obj.getWidth(t), 's\n']; - end - end - end - - function spec = get.formatSpecifier(obj) - % Creates formatting string for printing to command line - spec = ''; - for j = 1:obj.nScalarVariable - t = obj.type.(obj.scalarVariable{j}); - if j < obj.nScalarVariable - spec = [spec, '%', obj.getWidth(t), t.type, obj.separator]; - else - spec = [spec, '%', obj.getWidth(t), t.type, '\n']; - end - end - end %% READ LEVEL DATA data = get(obj, jLevel, variableName) @@ -307,8 +270,33 @@ classdef LevelData < handle [~, idx] = ismember(variableName, obj.label); end - function width = getWidth(obj, type) - width = num2str(max(type.width, obj.minimalWidth)); + function width = getWidth(~, type) + minimalWidth = 8; + width = num2str(max(type.width, minimalWidth)); + end + + function spec = getHeaderSpecifier(obj, separator) + % Creates formatting string for the header of the output to command line + spec = ''; + for j = 1:obj.nScalarVariable + if j == obj.nScalarVariable + separator = '\n'; + end + t = obj.type.(obj.scalarVariable{j}); + spec = [spec, '%', obj.getWidth(t), 's', separator]; + end + end + + function spec = getFormatSpecifier(obj, separator) + % Creates formatting string for printing to command line + spec = ''; + for j = 1:obj.nScalarVariable + if j == obj.nScalarVariable + separator = '\n'; + end + t = obj.type.(obj.scalarVariable{j}); + spec = [spec, '%', obj.getWidth(t), t.type, separator]; + end end ax = plotLevel(obj, plotFunction, xVariable, variableName) diff --git a/lib/storage/@LevelData/printHeader.m b/lib/storage/@LevelData/printHeader.m index d4da24d..3888afc 100644 --- a/lib/storage/@LevelData/printHeader.m +++ b/lib/storage/@LevelData/printHeader.m @@ -20,12 +20,9 @@ function printHeader(obj) % along with this program. If not, see <http://www.gnu.org/licenses/>. % - - % Set separator variable - obj.separator = ' '; - % Create header with variable names - header = sprintf(obj.headerSpecifier, obj.scalarVariable{:}); + specifier = obj.getHeaderSpecifier(' '); + header = sprintf(specifier, obj.scalarVariable{:}); % Print header to command line fprintf(header); diff --git a/lib/storage/@LevelData/printLevel.m b/lib/storage/@LevelData/printLevel.m index b600c86..110e49f 100644 --- a/lib/storage/@LevelData/printLevel.m +++ b/lib/storage/@LevelData/printLevel.m @@ -21,9 +21,9 @@ function printLevel(obj, jLevel) % along with this program. If not, see <http://www.gnu.org/licenses/>. % - % Print current level by default - if nargin < 2 - jLevel = obj.nLevel; + arguments + obj + jLevel (1,:) double = obj.nLevel end % Print header in case of plotting the first level @@ -31,10 +31,8 @@ function printLevel(obj, jLevel) obj.printHeader(); end - % Set separator variable - obj.separator = ' '; - % Iterate over given list of levels + specifier = obj.getFormatSpecifier(' '); for k = 1:length(jLevel) % Extract data of all variables data = cell(obj.nVariable, 1); @@ -46,6 +44,6 @@ function printLevel(obj, jLevel) end end % Print information on current level to command line - fprintf(obj.formatSpecifier, data{1:ind}); + fprintf(specifier, data{1:ind}); end end diff --git a/lib/storage/@LevelData/saveToTable.m b/lib/storage/@LevelData/saveToTable.m index 8ac9fc8..7527c78 100644 --- a/lib/storage/@LevelData/saveToTable.m +++ b/lib/storage/@LevelData/saveToTable.m @@ -21,32 +21,28 @@ function saveToTable(obj, separator) % along with this program. If not, see <http://www.gnu.org/licenses/>. % - - % Proceed optional input - if nargin < 2 - obj.separator = ','; - else - obj.separator = separator; + arguments + obj + separator {mustBeTextScalar} = ',' end - % Create problem- and method-specific folder - ensureFolderExists(obj.foldername); - % Open file + ensureFolderExists(obj.foldername); fid = fopen(obj.foldername + '/' + obj.filename + '.csv', 'w'); % Save header to file - fprintf(fid, obj.headerSpecifier, obj.scalarVariable{:}); + specifier = obj.getHeaderSpecifier(separator); + fprintf(fid, specifier, obj.scalarVariable{:}); % Save information on each level to file + specifier = obj.getFormatSpecifier(separator); for k = 1:obj.nLevel data = cell(obj.nScalarVariable, 1); for j = 1:obj.nScalarVariable data{j} = obj.level(k).(obj.scalarVariable{j}); end - fprintf(fid, obj.formatSpecifier, data{:}); + fprintf(fid, specifier, data{:}); end - % Close file fclose(fid); end -- GitLab