2010-11-08 19 views
5

Trong MATLAB, tôi đang sử dụng fprintf để in một danh sách các giá trị số dưới tiêu đề cột, như vậy:Làm thế nào để có được fprintf để bảo toàn không gian cho một giá trị số trống?

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 

Điều này dẫn đến một cái gì đó như thế này:

col1  col2  col3  col4 
    123.5 234.6 345.7 456.8 

Tuy nhiên, khi một trong những các ô trống (ví dụ: myVar{i,3} == []), không gian không được giữ nguyên:

col1  col2  col3  col4 
    123.5 234.6  456.8 

Làm cách nào để giữ không gian ở định dạng của tôi cho một giá trị số có thể trống?

Trả lời

3

Một lựa chọn là sử dụng các chức năng CELLFUNNUM2STR để thay đổi mỗi tế bào thành một chuỗi đầu tiên, sau đó in mỗi tế bào là một chuỗi sử dụng 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 

này sẽ cho bạn kết quả như:

col1  col2  col3  col4 
    123.5 234.6    456.8 

Cũng lưu ý rằng tôi đã thêm các eights vào cuộc gọi FPRINTF đầu tiên của bạn để sửa định dạng nhãn cột và thay đổi length(myVar) thành size(myVar,1) vì bạn đang lặp qua các hàng của myVar.

Các vấn đề liên quan