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

Wow Спасибо. Это было быстро! Ну, в моем специальном случае постоянная ширина является достаточной. Но я оставлю этот вопрос открытым в течение некоторого времени на всякий случай, если кто-то знает метод с вкладками appoach. –

+1

@VietTran Вы также хотите избежать вкладок только в случае, если два из ваших значений в столбце отличаются больше ширины табуляции. Это приведет к тому, что столбцы больше не будут выстраиваться в линию. Поля с фиксированной шириной - лучший подход для таких дисплеев. – Suever

+0

Итак, вы бы рекомендовали сначала определить максимальную ширину, а затем использовать подход с фиксированной шириной? –

Смежные вопросы