Mercurial > repos > public > sbplib
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 |