shared-snippets/matlab/export/getLineFormat.m

55 lines
1.5 KiB
Matlab

% -----------------
% Copyright © 2022 ACK Cyfronet AGH, Poland.
% -----------------
%
% Get string format specification used for fpritf, based on numeric 'FieldType' (GDF) or 'type' (catalog) field
% see https://docs.cyfronet.pl/display/ISEPOS/GDF+v2.2+-+description
function lineFormat = getLineFormat(fieldTypes)
lineFormat = '';
for f = 1:length(fieldTypes)
fieldType = fieldTypes{f};
formatSpec = getFormatSpec(fieldType);
lineFormat = [lineFormat ',' formatSpec];
end
lineFormat = [lineFormat(2:end) '\n'];
end
function formatSpec = getFormatSpec(fieldType)
if isTime(fieldType)
formatSpec = '"%s"';
elseif isnumeric(fieldType)
if fieldType < 10
formatSpec = getFormatSpecFromReservedFieldType(fieldType);
elseif fieldType < 200
formatSpec = ['%.', num2str(mod(fieldType, 10)), 'f'];
elseif fieldType < 300
formatSpec = ['%.', num2str(mod(fieldType, 10)), 'e'];
else
error(['Unrecognized fieldType: ', num2str(fieldType)])
end
else
error(['Unrecognized fieldType: ', num2str(fieldType)])
end
end
function formatSpec = getFormatSpecFromReservedFieldType(fieldType)
switch fieldType
case 1
formatSpec = '%f';
case 2
formatSpec = '%d';
case 3
formatSpec = '"%s"';
case 4
formatSpec = '%.1f';
case 5
formatSpec = '%s';
case 6
formatSpec = '%1.1e';
case 7
formatSpec = '%1.2e';
otherwise
error(['Unrecognized fieldType: ', num2str(fieldType)])
end
end