2010-11-08 40 views
5

在MATLAB中,我使用fprintf打印的數值列表下的列標題,就像這樣:我怎麼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 

這導致這樣的事情:

col1  col2  col3  col4 
    123.5 234.6 345.7 456.8 

然而,當一個人細胞是空的(如myVar{i,3} == []),不保留空間:

col1  col2  col3  col4 
    123.5 234.6  456.8 

怎樣在我的格式保存空間的數值可能是空的?

回答

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 

這應該給你的輸出,如:

col1  col2  col3  col4 
    123.5 234.6    456.8 

另請注意,我爲您的第一個FPRINTF調用添加了八個字來修復列標籤的格式,並將length(myVar)更改爲size(myVar,1),因爲您正在循環顯示012行。