Class columnify (o2scl)

O2scl : Class List

class columnify

Create nicely formatted columns from a table of strings.

This is a brute-force approach of order \( \mathrm{ncols} \times \mathrm{nrows} \). The column widths and spacings of are computed by exhaustively examining all strings in every column.

Idea for Future:

Create a single column version of add_spaces().

Create a function which accepts delimited strings (e.g. like csv) instead of vector<vector<string>>.

Move the screenify() functionality from misc.h into this class?

It might be better to allow the string table to be specified with iterators.

Consider a function which takes a o2scl::table object as input?

Public Functions

inline columnify()
template<class mat_string_t, class vec_string_t, class vec_int_t>
inline int align(const mat_string_t &table, size_t ncols, size_t nrows, vec_string_t &ctable, vec_int_t &align_spec)

Take table and create a new object ctable with appropriately formatted columns.

The table of strings should be stored in table in “column-major” order (table[ncols][nrows]), so that table has the interpretation of a set of columns to be aligned. Before calling align(), ctable should be allocated so that at least the first nrows entries can be assigned, and align_spec should contain ncols entries specifying the style of alignment for each column.

The first argument can be any type which is accessible using two applications of operator[], such as string **, vector<string>[], or vector<vector<string> >

template<class mat_string_t, class vec_int_t>
inline int add_spaces(const mat_string_t &table_in, size_t ncols, size_t nrows, vec_int_t &align_spec, mat_string_t &table_out)

Add enough spaces to ensure all columns have the same width.

Public Members

int table_lines

Specification for table lines (experimental)

Public Static Attributes

static const int align_left = 1

Align the left-hand sides.

static const int align_right = 2

Align the right-hand sides.

static const int align_lmid = 3

Center, slightly to the left if spacing is uneven.

static const int align_rmid = 4

Center, slightly to the right if spacing is uneven.

static const int align_dp = 5

Align with decimal points.

static const int align_lnum = 6

Align negative numbers to the left and use a space for positive numbers.