2010-11-08 10 views
5

En MATLAB, estoy usando fprintf para imprimir una lista de valores numéricos bajo los encabezados de columna, así:¿Cómo obtengo fprintf para conservar espacio para un valor numérico vacío?

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 

Esto resulta en algo como esto:

col1  col2  col3  col4 
    123.5 234.6 345.7 456.8 

Sin embargo, cuando uno de las células está vacía (por ejemplo myVar{i,3} == []), el espacio no se conserva:

col1  col2  col3  col4 
    123.5 234.6  456.8 

¿Cómo preservar el espacio en mi formato para una valor numérico que puede estar vacío?

Respuesta

3

Una opción es utilizar las funciones CELLFUN y NUM2STR cambiar cada célula a una cadena en primer lugar, a continuación, imprimir cada celda como una cadena usando 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 

Esto debería darle una salida como:

col1  col2  col3  col4 
    123.5 234.6    456.8 

Observe también que agregué ochos a su primera llamada FPRINTF para corregir el formato de las etiquetas de columna y cambié length(myVar) a size(myVar,1) ya que está recorriendo las filas de myVar.

Cuestiones relacionadas