A formatted and aligned table printer library for Zig. This library is an implementation of prettytable in the Zig programming language.
NOTE: Minimum Supported Zig Version: 0.12.0-dev.1773+8a8fd47d2. Any suggestions or feedback are welcome.
- Automatic alignment
- Customizable border
- Color and style
Let's start with an example. All example code can be found in the examples
directory.
const std = @import("std");
const pt = @import("prettytable");
pub fn main() !void {
var table = pt.Table.init(std.heap.page_allocator);
defer table.deinit();
try table.setTitle(&.{
"City", "Country", "Longitude", "Latitude", " Temperature", "Humidity",
});
try table.addRows(&.{
&.{ "Caconda", "AO", "15.06", "-13.73", "26.15", "35" },
&.{ "Diamantino", "BR", "-56.44", "-14.4", "29.4", "74" },
&.{ "Hirara", "JP", "125.28", "24.8", "21.77", "100" },
&.{ "Abha", "SA", "42.5", "18.22", "14.03", "100" },
});
try table.printstd();
}
Output:
+---------------+---------+-----------+----------+--------------+----------+
| City | Country | Longitude | Latitude | Temperature | Humidity |
+===============+=========+===========+==========+==============+==========+
| Prince Rupert | CA | -130.32 | 54.32 | 7.0 | 87 |
+---------------+---------+-----------+----------+--------------+----------+
| Caconda | AO | 15.06 | -13.73 | 26.15 | 35 |
+---------------+---------+-----------+----------+--------------+----------+
| Diamantino | BR | -56.44 | -14.4 | 29.4 | 74 |
+---------------+---------+-----------+----------+--------------+----------+
| Hirara | JP | 125.28 | 24.8 | 21.77 | 100 |
+---------------+---------+-----------+----------+--------------+----------+
| Abha | SA | 42.5 | 18.22 | 14.03 | 100 |
+---------------+---------+-----------+----------+--------------+----------+
Add a row to the table.
try table.addRow(
&[_][]const u8{ "Kaseda", "JP", "130.32", "31.42", "13.37", "100" },
);
Insert a row.
try table.insertRow(
0,
&[_][]const u8{ "Kaseda", "JP", "130.32", "31.42", "13.37", "100" },
);
Remove a row from the table.
table.removeRow(0);
try table.setCell(0, 5, "100");
The table is aligned to the left by default. You can change the alignment of the entire table.
// table.setAlign(Alignment.left);
// table.setAlign(Alignment.center);
table.setAlign(Alignment.right);
Or you can change the alignment of a specific column.
table.setColumnAlign(1, Alignment.right);
You can use the readFrom
function to read data from Reader
and construct a table.
One scenario is to read data from a CSV file.
var data =
\\name, id, favorite food
\\beau, 2, cereal
\\abbey, 3, pizza
\\
;
var s = std.io.fixedBufferStream(data);
var reader = s.reader();
var table = Table.init(std.heap.page_allocator);
defer table.deinit();
var read_buf: [1024]u8 = undefined;
try table.readFrom(reader, &read_buf, ",", true);
try table.printstd();
var buf = std.ArrayList(u8).init(std.heap.page_allocator);
defer buf.deinit();
var out = buf.writer();
_ = try table.print(out);
// buf.items is the bytes of table
table.setFormat(pt.FORMAT_BORDERS_ONLY);
Output:
+---------------------------------------------------------------------+
| City Country Longitude Latitude Temperature Humidity |
+=====================================================================+
| Prince Rupert CA -130.32 54.32 7.0 87 |
| Caconda AO 15.06 -13.73 26.15 35 |
| Diamantino BR -56.44 -14.4 29.4 74 |
| Hirara JP 125.28 24.8 21.77 100 |
| Abha SA 42.5 18.22 14.03 100 |
+---------------------------------------------------------------------+
It supports bold, italic, underline styles, and can also set colors.
Color list:
black
red
green
yellow
blue
magenta
cyan
white
If the above names are capitalized, such as RED
, it indicates a bright color.
try table.setCellStyle(0, 0, .{ .bold = true, .fg = .yellow });
try table.setCellStyle(0, 1, .{ .bold = true, .fg = .red });
try table.setCellStyle(0, 2, .{ .bold = true, .fg = .magenta });
try table.setCellStyle(1, 0, .{ .fg = .black, .bg = .cyan });
try table.setCellStyle(1, 1, .{ .fg = .black, .bg = .blue });
try table.setCellStyle(1, 2, .{ .fg = .black, .bg = .white });
Output:
MIT