comparison TextTable.m @ 797:5cf9fdf4c98f feature/poroelastic

Merge with feature/grids and bugfix bcSetup
author Martin Almquist <malmquist@stanford.edu>
date Thu, 26 Jul 2018 10:53:05 -0700
parents 11a39b274260
children f30eafd6d4dc
comparison
equal deleted inserted replaced
796:aa1ed37a1b56 797:5cf9fdf4c98f
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;
56 strArray = obj.getStringArray(); 64 strArray = obj.getStringArray();
57 widths = obj.getWidths(); 65 widths = obj.getWidths();
58 66
59 str = ''; 67 str = '';
60 68
69 N = size(strArray, 2);
70
61 % First horzDiv 71 % First horzDiv
62 if ismember(0, obj.horzDiv) 72 if isDiv(0, obj.horzDiv, N);
63 str = [str, obj.getHorzDiv(widths)]; 73 str = [str, obj.getHorzDiv(widths)];
64 end 74 end
65 75
66 for i = 1:obj.nRows 76 for i = 1:obj.nRows
67 str = [str, TextTable.rowToString(strArray(i,:), widths, obj.vertDiv, obj.horzDiv)]; 77 str = [str, TextTable.rowToString(strArray(i,:), widths, obj.vertDiv)];
68 78
69 % Interior horzDiv 79 % Interior horzDiv
70 if ismember(i, obj.horzDiv) 80 if isDiv(i, obj.horzDiv, N)
71 str = [str, obj.getHorzDiv(widths)]; 81 str = [str, obj.getHorzDiv(widths)];
72 end 82 end
73 end 83 end
74 end 84 end
75 85
76 function str = getHorzDiv(obj, widths) 86 function str = getHorzDiv(obj, widths)
77 str = TextTable.rowToString(cell(1,obj.nCols), widths, obj.vertDiv, obj.horzDiv); 87 str = TextTable.rowToString(cell(1,obj.nCols), widths, obj.vertDiv);
78 str(find(' ' == str)) = '-'; 88 str(find(' ' == str)) = '-';
79 str(find('|' == str)) = '+'; 89 str(find('|' == str)) = '+';
80 end 90 end
81 91
82 function strArray = getStringArray(obj) 92 function strArray = getStringArray(obj)
93 assert(all(size(obj.data) == size(obj.fmtArray)), 'Sizes of format matrix and data matrix do not match.')
83 strArray = cell(size(obj.data)); 94 strArray = cell(size(obj.data));
84 95
85 for i = 1:obj.nRows 96 for i = 1:obj.nRows
86 for j = 1:obj.nCols 97 for j = 1:obj.nCols
87 strArray{i,j} = sprintf(obj.fmtArray{i,j}, obj.data{i,j}); 98 strArray{i,j} = sprintf(obj.fmtArray{i,j}, obj.data{i,j});
89 end 100 end
90 end 101 end
91 end 102 end
92 103
93 methods (Static) 104 methods (Static)
94 function str = rowToString(strs, widths, vertDiv, horzDiv) 105 function str = rowToString(strs, widths, vertDiv)
106 N = length(strs);
107
95 % First vertDiv 108 % First vertDiv
96 if ismember(0, vertDiv) 109 if isDiv(0, vertDiv, N)
97 str = '| '; 110 prefix = '| ';
98 else 111 else
99 str = ' '; 112 prefix = ' ';
100 end 113 end
101 114
102 % Interior cols 115 % Pad strings
103 for j = 1:length(strs) - 1 116 for i = 1:N
104 str = [str, sprintf('%*s ', widths(j), strs{j})]; 117 strs{i} = sprintf('%*s', widths(i), strs{i});
118 end
105 119
106 % Interior vertDiv 120 % Column delimiters
107 if ismember(j, vertDiv) 121 delims = cell(1,N-1);
108 str = [str, '| ']; 122 for i = 1:length(delims)
123 if isDiv(i, vertDiv, N);
124 delims{i} = '| ';
125 else
126 delims{i} = ' ';
109 end 127 end
110 end 128 end
111 129
112 % Last col 130 if isDiv(N, vertDiv, N);
113 str = [str, sprintf('%*s ', widths(end), strs{end})]; 131 suffix = '|';
114 132 else
115 if ismember(length(strs), vertDiv) 133 suffix = '';
116 str = [str, '|'];
117 end 134 end
118 135
119 str = [str, sprintf('\n')]; 136 str = [prefix, strjoin(strs, delims), suffix, sprintf('\n')];
120 end 137 end
121 end 138 end
122 end 139 end
140
141 function b = isDiv(i, div, N)
142 b = ismember(i, div) || ismember(i, N+div+1);
143 end