forked from episodes-platform/shared-snippets
55 lines
1.5 KiB
Mathematica
55 lines
1.5 KiB
Mathematica
|
% -----------------
|
||
|
% 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
|