2016-07-29 3 views
1

셀 배열 A가 있습니다. 테이블로 인쇄하려고합니다. 첫 번째 열과 첫 번째 행은 머리글입니다. 예를 들어 나는Matlab에서 구분 기호로 행을 채우는 방법

A: 
1  2  3 
4  5  6 
7  8  9 

을 그리고 출력은 다음과 같이 할 :

A: 
1 ||2 |3 
------------- 
4 ||5 |6 
7 ||8 |9 

수직 막대는 문제가되지 않습니다. 나는 수평선을 출력하는 방법을 모른다. 더 유연해야하며 disp('-------')이어야합니다. 내 셀의 문자열이 얼마나 큰지에 따라 크기가 조정되어야합니다.

지금까지 정적 문자열 '-----'을 표시하는 추악한 방법 만 구현했습니다.

function [] = dispTable(table) 
basicStr = '%s\t| '; 
fmt = strcat('%s\t||',repmat(basicStr,1,size(table,2)-1),'\n'); 
lineHeader = '------'; 
%print first line as header: 
fprintf(1,fmt,table{1,:}); 
disp(lineHeader); 
fprintf(1,fmt,table{2:end,:}); 
end 

도움을 주시면 감사하겠습니다. 감사!

+0

탭을 사용하고 공간의 탭 너비가 컴퓨터마다 다양하기 때문에 힘들어집니다. 고정 너비 필드 대신'sprintf'를 사용하는 것이 좋습니다. – Suever

답변

2

너비가 컴퓨터마다 다를 수있는 탭을 사용하기 때문에 필드 너비를 안정적으로 계산할 수는 없습니다. 또한 표 형식의 구조로 무언가를 표시하려는 경우 두 개의 값이 8 자 이상 다른 경우 열이 정렬되지 않도록 탭을 피하는 것이 가장 좋습니다.

탭을 사용하는 대신 데이터에 고정 너비 필드를 사용하고 정확하게 사용하는 문자 수는 -입니다.

% Construct a format string using fixed-width fonts 
% NOTE: You could compute the needed width dynamically based on input 
format = ['%-4s||', repmat('%-4s|', 1, size(table, 2) - 1)]; 

% Replace the last | with a newline 
format(end) = char(10); 

% You can compute how many hypens you need to span your data 
h_line = [repmat('-', [1, 5 * size(table, 2)]), 10]; 

% Now print the result 
fprintf(format, table{1,:}) 
fprintf(h_line) 
fprintf(format, table{2:end,:}) 

% 1 ||2 |3 
% --------------- 
% 4 ||7 |5 
% 8 ||6 |9 
+0

와우 감사합니다. 그것은 빨랐다! 음, 내 특별한 경우에는 일정한 폭이 충분합니다. 그러나 누군가가 탭 접근법을 사용하는 방법을 알고있는 경우를 대비하여이 질문을 잠시 동안 열어 두겠습니다. –

+1

@VietTran 또한 열의 두 값이 탭 너비보다 다른 경우 탭을 피하기를 원합니다. 이로 인해 열이 더 이상 정렬되지 않습니다. 고정 폭 필드는 이와 같은 디스플레이를위한 더 나은 접근 방법입니다. – Suever

+0

먼저 너비 최대 길이를 결정한 다음 고정 너비 방식을 사용하는 것이 좋습니다. –