// Print fixed-width row & fixed-width headers (more compressed print // format). Returns the column formats. public String[] toStringHdr(StringBuilder sb) { String[] fs = new String[numCols()]; for (int c = 0; c < fs.length; c++) { String n = (c < _names.length) ? _names[c] : ("C" + c); if (numRows() == 0) { sb.append(n).append(' '); continue; } int w = 0; if (_vecs[c].isEnum()) { String ss[] = _vecs[c]._domain; for (int i = 0; i < ss.length; i++) w = Math.max(w, ss[i].length()); w = Math.min(w, 10); fs[c] = "%" + w + "." + w + "s"; } else { Chunk C = _vecs[c].elem2BV(0); // 1st Chunk String f = fs[c] = C.pformat(); // Printable width for (int x = 0; x < f.length(); x++) // Get printable width from format if (Character.isDigit(f.charAt(x))) w = w * 10 + (f.charAt(x) - '0'); else if (w > 0) break; if (f.charAt(1) == ' ') w++; // Leading blank is not in print-width } int len = sb.length(); if (n.length() <= w) { // Short name, big digits sb.append(n); for (int i = n.length(); i < w; i++) sb.append(' '); } else if (w == 1) { // First char only sb.append(n.charAt(0)); } else if (w == 2) { // First 2 chars only sb.append(n.charAt(0)).append(n.charAt(1)); } else { // First char dot lastchars; e.g. Compress "Interval" to "I.val" sb.append(n.charAt(0)).append('.'); for (int i = n.length() - (w - 2); i < n.length(); i++) sb.append(n.charAt(i)); } assert len + w == sb.length(); sb.append(' '); // Column seperator } sb.append('\n'); return fs; }