2016-07-29 5 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

幅がマシンごとに異なるタブを使用しているので、フィールドの幅を確実に計算することはできません。また、表形式の構造で何かを表示しようとしている場合、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また、カラム内の2つの値がタブ幅よりも異なる場合に備えて、タブを避けることもできます。これにより、列がそれ以上整列しなくなります。固定幅のフィールドは、このような表示のためのより良いアプローチです。 – Suever

+0

まず、最大幅の長さを決定してから固定幅の方法を使用することをお勧めしますか? –

関連する問題