如何让fprintf为空数值保留空间?

jjk*_*ker 5 matlab

在MATLAB中,我fprintf用来打印列标题下的数值列表,如下所示:

fprintf('%s %s %s %s\n', 'col1', 'col2', 'col3', 'col4')
for i = 1:length(myVar)
    fprintf('%8.4g %8.4g %8.4g %8.4g\n', myVar{i,1}, myVar{i,2}, myVar{i,3}, myVar{i,4})
end
Run Code Online (Sandbox Code Playgroud)

这导致如下所示:

    col1     col2     col3     col4
   123.5    234.6    345.7    456.8
Run Code Online (Sandbox Code Playgroud)

但是,当其中一个单元格为空(例如myVar{i,3} == [])时,不保留空间:

    col1     col2     col3     col4
   123.5    234.6     456.8
Run Code Online (Sandbox Code Playgroud)

如何以我的格式保留可能为空的数值的空间?

gno*_*ice 3

一种选择是使用函数CELLFUNNUM2STR首先将每个单元格更改为字符串,然后使用FPRINTF将每个单元格打印为字符串:

fprintf('%8s %8s %8s %8s\n', 'col1', 'col2', 'col3', 'col4');
for i = 1:size(myVar,1)
  temp = cellfun(@(x) num2str(x,'%8.4g'),myVar(i,:),'UniformOutput',false);
  fprintf('%8s %8s %8s %8s\n',temp{:});
end
Run Code Online (Sandbox Code Playgroud)

这应该给你类似的输出:

    col1     col2     col3     col4
   123.5    234.6             456.8
Run Code Online (Sandbox Code Playgroud)

另请注意,我在您的第一个 FPRINTF 调用中添加了 8,以修复列标签的格式,并更改length(myVar)为,size(myVar,1)因为您正在循环遍历myVar.