comparison TextTable.m @ 943:21394c78c72e feature/utux2D

Merge with default
author Martin Almquist <malmquist@stanford.edu>
date Tue, 04 Dec 2018 15:24:36 -0800
parents f30eafd6d4dc
children
comparison
equal deleted inserted replaced
942:35701c85e356 943:21394c78c72e
2 properties 2 properties
3 data 3 data
4 fmtArray 4 fmtArray
5 vertDiv 5 vertDiv
6 horzDiv 6 horzDiv
7
8 nCols
9 nRows
10 end 7 end
11 8
12 methods 9 methods
13 function obj = TextTable(data, vertDiv, horzDiv); 10 function obj = TextTable(data, vertDiv, horzDiv)
14 default_arg('vertDiv', []); 11 default_arg('vertDiv', []);
15 default_arg('horzDiv', []); 12 default_arg('horzDiv', []);
16
17 13
18 obj.data = data; 14 obj.data = data;
19 obj.vertDiv = vertDiv; 15 obj.vertDiv = vertDiv;
20 obj.horzDiv = horzDiv; 16 obj.horzDiv = horzDiv;
21 17
22 [obj.nRows, obj.nCols] = size(data);
23 obj.fmtArray = cell(size(data)); 18 obj.fmtArray = cell(size(data));
24 obj.formatAll('%s'); 19 obj.formatAll('%s');
25 20
26 end 21 end
27 22
23 function n = nRows(obj)
24 n = size(obj.data, 1);
25 end
26
27 function n = nCols(obj)
28 n = size(obj.data, 2);
29 end
30
31 function print(obj)
32 disp(obj.toString());
33 end
34
28 function formatAll(obj, fmt) 35 function formatAll(obj, fmt)
36 obj.fmtArray = cell(size(obj.data));
29 obj.fmtArray(:,:) = {fmt}; 37 obj.fmtArray(:,:) = {fmt};
30 end 38 end
31 39
32 function formatCell(obj, i, j, fmt) 40 function formatCell(obj, i, j, fmt)
33 obj.fmtArray{i,j} = fmt; 41 obj.fmtArray{i,j} = fmt;
42 end
43
44 function formatGrid(obj, I, J, fmt)
45 for i = I
46 for j = J
47 obj.fmtArray{i,j} = fmt;
48 end
49 end
34 end 50 end
35 51
36 function formatRow(obj, i, fmt) 52 function formatRow(obj, i, fmt)
37 obj.fmtArray(i,:) = {fmt}; 53 obj.fmtArray(i,:) = {fmt};
38 end 54 end
56 strArray = obj.getStringArray(); 72 strArray = obj.getStringArray();
57 widths = obj.getWidths(); 73 widths = obj.getWidths();
58 74
59 str = ''; 75 str = '';
60 76
77 N = size(strArray, 2);
78
61 % First horzDiv 79 % First horzDiv
62 if ismember(0, obj.horzDiv) 80 if isDiv(0, obj.horzDiv, N);
63 str = [str, obj.getHorzDiv(widths)]; 81 str = [str, obj.getHorzDiv(widths)];
64 end 82 end
65 83
66 for i = 1:obj.nRows 84 for i = 1:obj.nRows
67 str = [str, TextTable.rowToString(strArray(i,:), widths, obj.vertDiv, obj.horzDiv)]; 85 str = [str, TextTable.rowToString(strArray(i,:), widths, obj.vertDiv)];
68 86
69 % Interior horzDiv 87 % Interior horzDiv
70 if ismember(i, obj.horzDiv) 88 if isDiv(i, obj.horzDiv, N)
71 str = [str, obj.getHorzDiv(widths)]; 89 str = [str, obj.getHorzDiv(widths)];
72 end 90 end
73 end 91 end
74 end 92 end
75 93
76 function str = getHorzDiv(obj, widths) 94 function str = getHorzDiv(obj, widths)
77 str = TextTable.rowToString(cell(1,obj.nCols), widths, obj.vertDiv, obj.horzDiv); 95 str = TextTable.rowToString(cell(1,obj.nCols), widths, obj.vertDiv);
78 str(find(' ' == str)) = '-'; 96 str(find(' ' == str)) = '-';
79 str(find('|' == str)) = '+'; 97 str(find('|' == str)) = '+';
80 end 98 end
81 99
82 function strArray = getStringArray(obj) 100 function strArray = getStringArray(obj)
101 assert(all(size(obj.data) == size(obj.fmtArray)), 'Sizes of format matrix and data matrix do not match.')
83 strArray = cell(size(obj.data)); 102 strArray = cell(size(obj.data));
84 103
85 for i = 1:obj.nRows 104 for i = 1:obj.nRows
86 for j = 1:obj.nCols 105 for j = 1:obj.nCols
87 strArray{i,j} = sprintf(obj.fmtArray{i,j}, obj.data{i,j}); 106 strArray{i,j} = sprintf(obj.fmtArray{i,j}, obj.data{i,j});
89 end 108 end
90 end 109 end
91 end 110 end
92 111
93 methods (Static) 112 methods (Static)
94 function str = rowToString(strs, widths, vertDiv, horzDiv) 113 function str = rowToString(strs, widths, vertDiv)
114 N = length(strs);
115
95 % First vertDiv 116 % First vertDiv
96 if ismember(0, vertDiv) 117 if isDiv(0, vertDiv, N)
97 str = '| '; 118 prefix = '| ';
98 else 119 else
99 str = ' '; 120 prefix = ' ';
100 end 121 end
101 122
102 % Interior cols 123 % Pad strings
103 for j = 1:length(strs) - 1 124 for i = 1:N
104 str = [str, sprintf('%*s ', widths(j), strs{j})]; 125 strs{i} = sprintf('%*s', widths(i), strs{i});
126 end
105 127
106 % Interior vertDiv 128 % Column delimiters
107 if ismember(j, vertDiv) 129 delims = cell(1,N-1);
108 str = [str, '| ']; 130 for i = 1:length(delims)
131 if isDiv(i, vertDiv, N);
132 delims{i} = '| ';
133 else
134 delims{i} = ' ';
109 end 135 end
110 end 136 end
111 137
112 % Last col 138 if isDiv(N, vertDiv, N);
113 str = [str, sprintf('%*s ', widths(end), strs{end})]; 139 suffix = '|';
114 140 else
115 if ismember(length(strs), vertDiv) 141 suffix = '';
116 str = [str, '|'];
117 end 142 end
118 143
119 str = [str, sprintf('\n')]; 144 str = [prefix, strjoin(strs, delims), suffix, sprintf('\n')];
120 end 145 end
121 end 146 end
122 end 147 end
148
149 function b = isDiv(i, div, N)
150 b = ismember(i, div) || ismember(i, N+div+1);
151 end