Struct prettytable::Table
source · pub struct Table { /* private fields */ }
Expand description
An owned printable table
Implementations§
source§impl Table
impl Table
sourcepub fn from_csv_string(csv_s: &str) -> Result<Self>
pub fn from_csv_string(csv_s: &str) -> Result<Self>
Create a table from a CSV string
For more customisability use from_csv()
Examples found in repository?
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
fn main() {
use prettytable::Table;
let table = Table::from_csv_string(
"ABC,DEFG,HIJKLMN\n\
foobar,bar,foo\n\
foobar2,bar2,foo2",
)
.unwrap();
table.printstd();
println!("");
println!(
"{}",
String::from_utf8(table.to_csv(Vec::new()).unwrap().into_inner().unwrap()).unwrap()
);
}
sourcepub fn from_csv_file<P: AsRef<Path>>(csv_p: P) -> Result<Self>
pub fn from_csv_file<P: AsRef<Path>>(csv_p: P) -> Result<Self>
Create a table from a CSV file
For more customisability use from_csv()
sourcepub fn to_csv<W: Write>(&self, w: W) -> Result<Writer<W>>
pub fn to_csv<W: Write>(&self, w: W) -> Result<Writer<W>>
Write the table to the specified writer.
Examples found in repository?
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
fn main() {
use prettytable::Table;
let table = Table::from_csv_string(
"ABC,DEFG,HIJKLMN\n\
foobar,bar,foo\n\
foobar2,bar2,foo2",
)
.unwrap();
table.printstd();
println!("");
println!(
"{}",
String::from_utf8(table.to_csv(Vec::new()).unwrap().into_inner().unwrap()).unwrap()
);
}
source§impl Table
impl Table
sourcepub fn new() -> Table
pub fn new() -> Table
Create an empty table
Examples found in repository?
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
fn main() {
let mut table = Table::new();
table.add_row(row!["ABC", "DEFG", "HIJKLMN"]);
table.add_row(row!["foobar", "bar", "foo"]);
table.add_row(Row::new(vec![
Cell::new("foobar2"),
Cell::new("bar2"),
Cell::new("foo2"),
]));
table.printstd();
println!("Modified : ");
table.set_element("new_foo", 2, 1).unwrap();
table.printstd();
// The same table can be built the following way :
let _table = table!(
["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"]
);
// Or directly print it like this
let _table = ptable!(
["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"]
);
}
More examples
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
fn main() {
let _ = table!();
let mut table = Table::new();
// Add style to a cell
table.add_row(row![FrByb->"ABC", "DEFG", "HIJKLMN"]);
// Add style to a full row
table.add_row(row![FY => "styled", "bar", "foo"]);
table.add_row(Row::new(vec![
Cell::new("foobar2"),
// Create a cell with a red foreground color
Cell::new("bar2").with_style(Attr::ForegroundColor(color::RED)),
// Create a cell with red foreground color, yellow background color, with bold characters
Cell::new("foo2").style_spec("FrByb"),
// Using the cell! macro
cell!(Fr->"red"),
]));
table.printstd();
// Print a table with some styles on it :
// FrBybl means : Foregound red, Background yellow, bold, left align
ptable!([FrBybl->"A", "B", FrBybr->"C"], [123, 234, 345, 456], [Fg => 1, 2, 3]);
// You can also apply style to full rows :
let mut table = table!([Frb => "A", "B", "C"], [1, 2, 3, 4], ["A\nBCCZZZ\nDDD", 2, table]);
// Set a title line, with all text centered in the cell
table.set_titles(row![c => "Title 1", "Title 2"]);
table.printstd();
}
sourcepub fn set_format(&mut self, format: TableFormat)
pub fn set_format(&mut self, format: TableFormat)
Change the table format. Eg : Separators
Examples found in repository?
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
fn main() {
let mut table = table!(["Value 1", "Value 2"], ["Value three", "Value four"]);
table.set_titles(row!["Title 1", "Title 2"]);
// Print
// +-------------+------------+
// | Title 1 | Title 2 |
// +-------------+------------+
// | Value 1 | Value 2 |
// | Value three | Value four |
// +-------------+------------+
println!("FORMAT_NO_LINESEP_WITH_TITLE :");
table.set_format(*format::consts::FORMAT_NO_LINESEP_WITH_TITLE);
table.printstd();
println!("");
// Print
// -------------------------
// Title 1 Title 2
// =========================
// Value 1 Value 2
// -------------------------
// Value three Value four
// -------------------------
println!("FORMAT_NO_COLSEP :");
table.set_format(*format::consts::FORMAT_NO_COLSEP);
table.printstd();
println!("");
// Print
// +-------------------------+
// | Title 1 Title 2 |
// +=========================+
// | Value 1 Value 2 |
// | Value three Value four |
// +-------------------------+
println!("FORMAT_BORDERS_ONLY :");
table.set_format(*format::consts::FORMAT_BORDERS_ONLY);
table.printstd();
println!("");
// Custom format can be implemented using `prettytable::format::FormatBuilder`
// Example to print
// +-------------+------------+
// | Title 1 | Title 2 |
// | Value 1 | Value 2 |
// | Value three | Value four |
// +-------------+------------+
println!("Custom :");
table.set_format(
format::FormatBuilder::new()
.column_separator('|')
.borders('|')
.separators(
&[format::LinePosition::Top, format::LinePosition::Bottom],
format::LineSeparator::new('-', '+', '+', '+'),
)
.padding(1, 1)
.build(),
);
table.printstd();
// Customized format with unicode
// Example to print
// ┌─────────────┬────────────┐
// │ Title 1 │ Title 2 │
// ├─────────────┼────────────┤
// │ Value 1 │ Value 2 │
// ├─────────────┼────────────┤
// │ Value three │ Value four │
// └─────────────┴────────────┘
println!("With unicode:");
table.set_format(
format::FormatBuilder::new()
.column_separator('│')
.borders('│')
.separators(
&[format::LinePosition::Top],
format::LineSeparator::new('─', '┬', '┌', '┐'),
)
.separators(
&[format::LinePosition::Intern],
format::LineSeparator::new('─', '┼', '├', '┤'),
)
.separators(
&[format::LinePosition::Bottom],
format::LineSeparator::new('─', '┴', '└', '┘'),
)
.padding(1, 1)
.build(),
);
table.printstd();
// Customized format with unicode and different padding
// Example to print
// ┌───────────────┬──────────────┐
// │ Title 1 │ Title 2 │
// ├───────────────┼──────────────┤
// │ Value 1 │ Value 2 │
// ├───────────────┼──────────────┤
// │ Value three │ Value four │
// └───────────────┴──────────────┘
// Change individual format settings
println!("With unicode and padding:");
table.get_format().padding(2, 2);
table.printstd();
}
sourcepub fn get_format(&mut self) -> &mut TableFormat
pub fn get_format(&mut self) -> &mut TableFormat
Get a mutable reference to the internal format
Examples found in repository?
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
fn main() {
let mut table = table!(["Value 1", "Value 2"], ["Value three", "Value four"]);
table.set_titles(row!["Title 1", "Title 2"]);
// Print
// +-------------+------------+
// | Title 1 | Title 2 |
// +-------------+------------+
// | Value 1 | Value 2 |
// | Value three | Value four |
// +-------------+------------+
println!("FORMAT_NO_LINESEP_WITH_TITLE :");
table.set_format(*format::consts::FORMAT_NO_LINESEP_WITH_TITLE);
table.printstd();
println!("");
// Print
// -------------------------
// Title 1 Title 2
// =========================
// Value 1 Value 2
// -------------------------
// Value three Value four
// -------------------------
println!("FORMAT_NO_COLSEP :");
table.set_format(*format::consts::FORMAT_NO_COLSEP);
table.printstd();
println!("");
// Print
// +-------------------------+
// | Title 1 Title 2 |
// +=========================+
// | Value 1 Value 2 |
// | Value three Value four |
// +-------------------------+
println!("FORMAT_BORDERS_ONLY :");
table.set_format(*format::consts::FORMAT_BORDERS_ONLY);
table.printstd();
println!("");
// Custom format can be implemented using `prettytable::format::FormatBuilder`
// Example to print
// +-------------+------------+
// | Title 1 | Title 2 |
// | Value 1 | Value 2 |
// | Value three | Value four |
// +-------------+------------+
println!("Custom :");
table.set_format(
format::FormatBuilder::new()
.column_separator('|')
.borders('|')
.separators(
&[format::LinePosition::Top, format::LinePosition::Bottom],
format::LineSeparator::new('-', '+', '+', '+'),
)
.padding(1, 1)
.build(),
);
table.printstd();
// Customized format with unicode
// Example to print
// ┌─────────────┬────────────┐
// │ Title 1 │ Title 2 │
// ├─────────────┼────────────┤
// │ Value 1 │ Value 2 │
// ├─────────────┼────────────┤
// │ Value three │ Value four │
// └─────────────┴────────────┘
println!("With unicode:");
table.set_format(
format::FormatBuilder::new()
.column_separator('│')
.borders('│')
.separators(
&[format::LinePosition::Top],
format::LineSeparator::new('─', '┬', '┌', '┐'),
)
.separators(
&[format::LinePosition::Intern],
format::LineSeparator::new('─', '┼', '├', '┤'),
)
.separators(
&[format::LinePosition::Bottom],
format::LineSeparator::new('─', '┴', '└', '┘'),
)
.padding(1, 1)
.build(),
);
table.printstd();
// Customized format with unicode and different padding
// Example to print
// ┌───────────────┬──────────────┐
// │ Title 1 │ Title 2 │
// ├───────────────┼──────────────┤
// │ Value 1 │ Value 2 │
// ├───────────────┼──────────────┤
// │ Value three │ Value four │
// └───────────────┴──────────────┘
// Change individual format settings
println!("With unicode and padding:");
table.get_format().padding(2, 2);
table.printstd();
}
sourcepub fn set_titles(&mut self, titles: Row)
pub fn set_titles(&mut self, titles: Row)
Set the optional title lines
Examples found in repository?
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
fn main() {
let mut table = table![
[0, 0, 0],
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4],
[5, 5, 5]
];
table.set_titles(row!["t1", "t2", "t3"]);
let slice = table.slice(..);
let slice = slice.slice(2..);
let slice = slice.slice(..3);
/*
Will print
+----+----+----+
| t1 | t2 | t3 |
+====+====+====+
| 2 | 2 | 2 |
+----+----+----+
| 3 | 3 | 3 |
+----+----+----+
| 4 | 4 | 4 |
+----+----+----+
*/
slice.printstd();
// This is equivalent to
let slice = table.slice(2..5);
slice.printstd();
}
More examples
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
fn main() {
/*
The following code will output
+---------------+---------------+--------------+
| A table with horizontal span |
+===============+===============+==============+
| This is a cell with span of 2 | span of 1 |
+---------------+---------------+--------------+
| span of 1 | span of 1 | span of 1 |
+---------------+---------------+--------------+
| This cell with a span of 3 is centered |
+---------------+---------------+--------------+
*/
let mut table: prettytable::Table = table![
[H2 -> "This is a cell with span of 2", "span of 1"],
["span of 1", "span of 1", "span of 1"],
[H03c -> "This cell with a span of 3 is centered"]
];
table.set_titles(Row::new(vec![Cell::new_align(
"A table with horizontal span",
Alignment::CENTER,
)
.with_hspan(3)]));
table.printstd();
}
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
fn main() {
let _ = table!();
let mut table = Table::new();
// Add style to a cell
table.add_row(row![FrByb->"ABC", "DEFG", "HIJKLMN"]);
// Add style to a full row
table.add_row(row![FY => "styled", "bar", "foo"]);
table.add_row(Row::new(vec![
Cell::new("foobar2"),
// Create a cell with a red foreground color
Cell::new("bar2").with_style(Attr::ForegroundColor(color::RED)),
// Create a cell with red foreground color, yellow background color, with bold characters
Cell::new("foo2").style_spec("FrByb"),
// Using the cell! macro
cell!(Fr->"red"),
]));
table.printstd();
// Print a table with some styles on it :
// FrBybl means : Foregound red, Background yellow, bold, left align
ptable!([FrBybl->"A", "B", FrBybr->"C"], [123, 234, 345, 456], [Fg => 1, 2, 3]);
// You can also apply style to full rows :
let mut table = table!([Frb => "A", "B", "C"], [1, 2, 3, 4], ["A\nBCCZZZ\nDDD", 2, table]);
// Set a title line, with all text centered in the cell
table.set_titles(row![c => "Title 1", "Title 2"]);
table.printstd();
}
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
fn main() {
let mut table = table!(["Value 1", "Value 2"], ["Value three", "Value four"]);
table.set_titles(row!["Title 1", "Title 2"]);
// Print
// +-------------+------------+
// | Title 1 | Title 2 |
// +-------------+------------+
// | Value 1 | Value 2 |
// | Value three | Value four |
// +-------------+------------+
println!("FORMAT_NO_LINESEP_WITH_TITLE :");
table.set_format(*format::consts::FORMAT_NO_LINESEP_WITH_TITLE);
table.printstd();
println!("");
// Print
// -------------------------
// Title 1 Title 2
// =========================
// Value 1 Value 2
// -------------------------
// Value three Value four
// -------------------------
println!("FORMAT_NO_COLSEP :");
table.set_format(*format::consts::FORMAT_NO_COLSEP);
table.printstd();
println!("");
// Print
// +-------------------------+
// | Title 1 Title 2 |
// +=========================+
// | Value 1 Value 2 |
// | Value three Value four |
// +-------------------------+
println!("FORMAT_BORDERS_ONLY :");
table.set_format(*format::consts::FORMAT_BORDERS_ONLY);
table.printstd();
println!("");
// Custom format can be implemented using `prettytable::format::FormatBuilder`
// Example to print
// +-------------+------------+
// | Title 1 | Title 2 |
// | Value 1 | Value 2 |
// | Value three | Value four |
// +-------------+------------+
println!("Custom :");
table.set_format(
format::FormatBuilder::new()
.column_separator('|')
.borders('|')
.separators(
&[format::LinePosition::Top, format::LinePosition::Bottom],
format::LineSeparator::new('-', '+', '+', '+'),
)
.padding(1, 1)
.build(),
);
table.printstd();
// Customized format with unicode
// Example to print
// ┌─────────────┬────────────┐
// │ Title 1 │ Title 2 │
// ├─────────────┼────────────┤
// │ Value 1 │ Value 2 │
// ├─────────────┼────────────┤
// │ Value three │ Value four │
// └─────────────┴────────────┘
println!("With unicode:");
table.set_format(
format::FormatBuilder::new()
.column_separator('│')
.borders('│')
.separators(
&[format::LinePosition::Top],
format::LineSeparator::new('─', '┬', '┌', '┐'),
)
.separators(
&[format::LinePosition::Intern],
format::LineSeparator::new('─', '┼', '├', '┤'),
)
.separators(
&[format::LinePosition::Bottom],
format::LineSeparator::new('─', '┴', '└', '┘'),
)
.padding(1, 1)
.build(),
);
table.printstd();
// Customized format with unicode and different padding
// Example to print
// ┌───────────────┬──────────────┐
// │ Title 1 │ Title 2 │
// ├───────────────┼──────────────┤
// │ Value 1 │ Value 2 │
// ├───────────────┼──────────────┤
// │ Value three │ Value four │
// └───────────────┴──────────────┘
// Change individual format settings
println!("With unicode and padding:");
table.get_format().padding(2, 2);
table.printstd();
}
sourcepub fn unset_titles(&mut self)
pub fn unset_titles(&mut self)
Unset the title line
sourcepub fn get_mut_row(&mut self, row: usize) -> Option<&mut Row>
pub fn get_mut_row(&mut self, row: usize) -> Option<&mut Row>
Get a mutable reference to a row
Examples found in repository?
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
fn main() {
let mut table = table![
[EMPTY, EMPTY, EMPTY],
[EMPTY, EMPTY, EMPTY],
[EMPTY, EMPTY, EMPTY]
];
let mut height = table.print_tty(false).unwrap();
let stdin = io::stdin();
let mut stdout = io::stdout();
let mut current = CROSS;
let mut terminal = term::stdout().unwrap();
loop {
let mut line = String::new();
print!("{} plays > ", current);
height += 1;
stdout.flush().unwrap();
stdin.read_line(&mut line).expect("Cannot read input");
let i = match usize::from_str(line.trim()) {
Ok(i) => i,
_ => {
println!("Bad input");
height += 1;
continue;
}
};
if i < 1 || i > 9 {
println!("Bad input, should be between 1 and 9");
height += 1;
continue;
}
let x = (i - 1) % 3;
let y = (i - 1) / 3;
{
let row = table.get_mut_row(y).unwrap();
if row.get_cell(x).unwrap().to_string() != EMPTY {
println!("There's already someone there");
height += 1;
continue;
}
row.set_cell(cell!(current), x).unwrap();
}
for _ in 0..height {
terminal.cursor_up().unwrap();
terminal.delete_line().unwrap();
}
height = table.print_tty(false).unwrap();
if check(&table) {
return;
}
if current == CROSS {
current = ROUND;
} else {
current = CROSS;
}
}
}
sourcepub fn add_row(&mut self, row: Row) -> &mut Row
pub fn add_row(&mut self, row: Row) -> &mut Row
Append a row in the table, transferring ownership of this row to the table and returning a mutable reference to the row
Examples found in repository?
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
fn main() {
let mut table = Table::new();
table.add_row(row!["ABC", "DEFG", "HIJKLMN"]);
table.add_row(row!["foobar", "bar", "foo"]);
table.add_row(Row::new(vec![
Cell::new("foobar2"),
Cell::new("bar2"),
Cell::new("foo2"),
]));
table.printstd();
println!("Modified : ");
table.set_element("new_foo", 2, 1).unwrap();
table.printstd();
// The same table can be built the following way :
let _table = table!(
["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"]
);
// Or directly print it like this
let _table = ptable!(
["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"]
);
}
More examples
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
fn main() {
let _ = table!();
let mut table = Table::new();
// Add style to a cell
table.add_row(row![FrByb->"ABC", "DEFG", "HIJKLMN"]);
// Add style to a full row
table.add_row(row![FY => "styled", "bar", "foo"]);
table.add_row(Row::new(vec![
Cell::new("foobar2"),
// Create a cell with a red foreground color
Cell::new("bar2").with_style(Attr::ForegroundColor(color::RED)),
// Create a cell with red foreground color, yellow background color, with bold characters
Cell::new("foo2").style_spec("FrByb"),
// Using the cell! macro
cell!(Fr->"red"),
]));
table.printstd();
// Print a table with some styles on it :
// FrBybl means : Foregound red, Background yellow, bold, left align
ptable!([FrBybl->"A", "B", FrBybr->"C"], [123, 234, 345, 456], [Fg => 1, 2, 3]);
// You can also apply style to full rows :
let mut table = table!([Frb => "A", "B", "C"], [1, 2, 3, 4], ["A\nBCCZZZ\nDDD", 2, table]);
// Set a title line, with all text centered in the cell
table.set_titles(row![c => "Title 1", "Title 2"]);
table.printstd();
}
sourcepub fn add_empty_row(&mut self) -> &mut Row
pub fn add_empty_row(&mut self) -> &mut Row
Append an empty row in the table. Return a mutable reference to this new row.
sourcepub fn insert_row(&mut self, index: usize, row: Row) -> &mut Row
pub fn insert_row(&mut self, index: usize, row: Row) -> &mut Row
Insert row
at the position index
, and return a mutable reference to this row.
If index is higher than current numbers of rows, row
is appended at the end of the table
sourcepub fn set_element(
&mut self,
element: &str,
column: usize,
row: usize
) -> Result<(), &str>
pub fn set_element(
&mut self,
element: &str,
column: usize,
row: usize
) -> Result<(), &str>
Modify a single element in the table
Examples found in repository?
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
fn main() {
let mut table = Table::new();
table.add_row(row!["ABC", "DEFG", "HIJKLMN"]);
table.add_row(row!["foobar", "bar", "foo"]);
table.add_row(Row::new(vec![
Cell::new("foobar2"),
Cell::new("bar2"),
Cell::new("foo2"),
]));
table.printstd();
println!("Modified : ");
table.set_element("new_foo", 2, 1).unwrap();
table.printstd();
// The same table can be built the following way :
let _table = table!(
["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"]
);
// Or directly print it like this
let _table = ptable!(
["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"]
);
}
sourcepub fn remove_row(&mut self, index: usize)
pub fn remove_row(&mut self, index: usize)
Remove the row at position index
. Silently skip if the row does not exist
sourcepub fn column_iter(&self, column: usize) -> ColumnIter<'_> ⓘ
pub fn column_iter(&self, column: usize) -> ColumnIter<'_> ⓘ
Return an iterator over the immutable cells of the column specified by column
sourcepub fn column_iter_mut(&mut self, column: usize) -> ColumnIterMut<'_> ⓘ
pub fn column_iter_mut(&mut self, column: usize) -> ColumnIterMut<'_> ⓘ
Return an iterator over the mutable cells of the column specified by column
sourcepub fn row_iter_mut(&mut self) -> IterMut<'_, Row>
pub fn row_iter_mut(&mut self) -> IterMut<'_, Row>
Returns an iterator over mutable rows
sourcepub fn print<T: Write + ?Sized>(&self, out: &mut T) -> Result<usize, Error>
pub fn print<T: Write + ?Sized>(&self, out: &mut T) -> Result<usize, Error>
Print the table to out
and returns the number
of lines printed, or an error
sourcepub fn print_term<T: Terminal + ?Sized>(
&self,
out: &mut T
) -> Result<usize, Error>
pub fn print_term<T: Terminal + ?Sized>(
&self,
out: &mut T
) -> Result<usize, Error>
Print the table to terminal out
, applying styles when needed and returns the number
of lines printed, or an error
sourcepub fn print_tty(&self, force_colorize: bool) -> Result<usize, Error>
pub fn print_tty(&self, force_colorize: bool) -> Result<usize, Error>
Print the table to standard output. Colors won’t be displayed unless
stdout is a tty terminal, or force_colorize
is set to true
.
In ANSI terminals, colors are displayed using ANSI escape characters. When for example the
output is redirected to a file, or piped to another program, the output is considered
as not beeing tty, and ANSI escape characters won’t be displayed unless force colorize
is set to true
.
Returns
A Result
holding the number of lines printed, or an io::Error
if any failure happens
Examples found in repository?
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
fn main() {
let mut table = table![
[EMPTY, EMPTY, EMPTY],
[EMPTY, EMPTY, EMPTY],
[EMPTY, EMPTY, EMPTY]
];
let mut height = table.print_tty(false).unwrap();
let stdin = io::stdin();
let mut stdout = io::stdout();
let mut current = CROSS;
let mut terminal = term::stdout().unwrap();
loop {
let mut line = String::new();
print!("{} plays > ", current);
height += 1;
stdout.flush().unwrap();
stdin.read_line(&mut line).expect("Cannot read input");
let i = match usize::from_str(line.trim()) {
Ok(i) => i,
_ => {
println!("Bad input");
height += 1;
continue;
}
};
if i < 1 || i > 9 {
println!("Bad input, should be between 1 and 9");
height += 1;
continue;
}
let x = (i - 1) % 3;
let y = (i - 1) / 3;
{
let row = table.get_mut_row(y).unwrap();
if row.get_cell(x).unwrap().to_string() != EMPTY {
println!("There's already someone there");
height += 1;
continue;
}
row.set_cell(cell!(current), x).unwrap();
}
for _ in 0..height {
terminal.cursor_up().unwrap();
terminal.delete_line().unwrap();
}
height = table.print_tty(false).unwrap();
if check(&table) {
return;
}
if current == CROSS {
current = ROUND;
} else {
current = CROSS;
}
}
}
sourcepub fn printstd(&self)
pub fn printstd(&self)
Print the table to standard output. Colors won’t be displayed unless
stdout is a tty terminal. This means that if stdout is redirected to a file, or piped
to another program, no color will be displayed.
To force colors rendering, use print_tty()
method.
Any failure to print is ignored. For better control, use print_tty()
.
Calling printstd()
is equivalent to calling print_tty(false)
and ignoring the result.
Examples found in repository?
20 21 22 23 24 25 26 27 28 29 30 31 32
fn main() {
let table1 = table!(
["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"]
);
let table2 = table!(
["Title 1", "Title 2"],
["This is\na multiline\ncell", "foo"],
["Yo dawg ;) You can even\nprint tables\ninto tables", table1]
);
table2.printstd();
}
More examples
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
fn main() {
use prettytable::Table;
let table = Table::from_csv_string(
"ABC,DEFG,HIJKLMN\n\
foobar,bar,foo\n\
foobar2,bar2,foo2",
)
.unwrap();
table.printstd();
println!("");
println!(
"{}",
String::from_utf8(table.to_csv(Vec::new()).unwrap().into_inner().unwrap()).unwrap()
);
}
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
fn main() {
let mut table = Table::new();
table.add_row(row!["ABC", "DEFG", "HIJKLMN"]);
table.add_row(row!["foobar", "bar", "foo"]);
table.add_row(Row::new(vec![
Cell::new("foobar2"),
Cell::new("bar2"),
Cell::new("foo2"),
]));
table.printstd();
println!("Modified : ");
table.set_element("new_foo", 2, 1).unwrap();
table.printstd();
// The same table can be built the following way :
let _table = table!(
["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"]
);
// Or directly print it like this
let _table = ptable!(
["ABC", "DEFG", "HIJKLMN"],
["foobar", "bar", "foo"],
["foobar2", "bar2", "foo2"]
);
}
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
fn main() {
/*
The following code will output
+---------------+---------------+--------------+
| A table with horizontal span |
+===============+===============+==============+
| This is a cell with span of 2 | span of 1 |
+---------------+---------------+--------------+
| span of 1 | span of 1 | span of 1 |
+---------------+---------------+--------------+
| This cell with a span of 3 is centered |
+---------------+---------------+--------------+
*/
let mut table: prettytable::Table = table![
[H2 -> "This is a cell with span of 2", "span of 1"],
["span of 1", "span of 1", "span of 1"],
[H03c -> "This cell with a span of 3 is centered"]
];
table.set_titles(Row::new(vec![Cell::new_align(
"A table with horizontal span",
Alignment::CENTER,
)
.with_hspan(3)]));
table.printstd();
}
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
fn main() {
let _ = table!();
let mut table = Table::new();
// Add style to a cell
table.add_row(row![FrByb->"ABC", "DEFG", "HIJKLMN"]);
// Add style to a full row
table.add_row(row![FY => "styled", "bar", "foo"]);
table.add_row(Row::new(vec![
Cell::new("foobar2"),
// Create a cell with a red foreground color
Cell::new("bar2").with_style(Attr::ForegroundColor(color::RED)),
// Create a cell with red foreground color, yellow background color, with bold characters
Cell::new("foo2").style_spec("FrByb"),
// Using the cell! macro
cell!(Fr->"red"),
]));
table.printstd();
// Print a table with some styles on it :
// FrBybl means : Foregound red, Background yellow, bold, left align
ptable!([FrBybl->"A", "B", FrBybr->"C"], [123, 234, 345, 456], [Fg => 1, 2, 3]);
// You can also apply style to full rows :
let mut table = table!([Frb => "A", "B", "C"], [1, 2, 3, 4], ["A\nBCCZZZ\nDDD", 2, table]);
// Set a title line, with all text centered in the cell
table.set_titles(row![c => "Title 1", "Title 2"]);
table.printstd();
}
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
fn main() {
let mut table = table!(["Value 1", "Value 2"], ["Value three", "Value four"]);
table.set_titles(row!["Title 1", "Title 2"]);
// Print
// +-------------+------------+
// | Title 1 | Title 2 |
// +-------------+------------+
// | Value 1 | Value 2 |
// | Value three | Value four |
// +-------------+------------+
println!("FORMAT_NO_LINESEP_WITH_TITLE :");
table.set_format(*format::consts::FORMAT_NO_LINESEP_WITH_TITLE);
table.printstd();
println!("");
// Print
// -------------------------
// Title 1 Title 2
// =========================
// Value 1 Value 2
// -------------------------
// Value three Value four
// -------------------------
println!("FORMAT_NO_COLSEP :");
table.set_format(*format::consts::FORMAT_NO_COLSEP);
table.printstd();
println!("");
// Print
// +-------------------------+
// | Title 1 Title 2 |
// +=========================+
// | Value 1 Value 2 |
// | Value three Value four |
// +-------------------------+
println!("FORMAT_BORDERS_ONLY :");
table.set_format(*format::consts::FORMAT_BORDERS_ONLY);
table.printstd();
println!("");
// Custom format can be implemented using `prettytable::format::FormatBuilder`
// Example to print
// +-------------+------------+
// | Title 1 | Title 2 |
// | Value 1 | Value 2 |
// | Value three | Value four |
// +-------------+------------+
println!("Custom :");
table.set_format(
format::FormatBuilder::new()
.column_separator('|')
.borders('|')
.separators(
&[format::LinePosition::Top, format::LinePosition::Bottom],
format::LineSeparator::new('-', '+', '+', '+'),
)
.padding(1, 1)
.build(),
);
table.printstd();
// Customized format with unicode
// Example to print
// ┌─────────────┬────────────┐
// │ Title 1 │ Title 2 │
// ├─────────────┼────────────┤
// │ Value 1 │ Value 2 │
// ├─────────────┼────────────┤
// │ Value three │ Value four │
// └─────────────┴────────────┘
println!("With unicode:");
table.set_format(
format::FormatBuilder::new()
.column_separator('│')
.borders('│')
.separators(
&[format::LinePosition::Top],
format::LineSeparator::new('─', '┬', '┌', '┐'),
)
.separators(
&[format::LinePosition::Intern],
format::LineSeparator::new('─', '┼', '├', '┤'),
)
.separators(
&[format::LinePosition::Bottom],
format::LineSeparator::new('─', '┴', '└', '┘'),
)
.padding(1, 1)
.build(),
);
table.printstd();
// Customized format with unicode and different padding
// Example to print
// ┌───────────────┬──────────────┐
// │ Title 1 │ Title 2 │
// ├───────────────┼──────────────┤
// │ Value 1 │ Value 2 │
// ├───────────────┼──────────────┤
// │ Value three │ Value four │
// └───────────────┴──────────────┘
// Change individual format settings
println!("With unicode and padding:");
table.get_format().padding(2, 2);
table.printstd();
}
Trait Implementations§
source§impl AsTableSlice for Table
impl AsTableSlice for Table
source§fn as_slice(&self) -> TableSlice<'_>
fn as_slice(&self) -> TableSlice<'_>
source§impl<A: Into<Row>> Extend<A> for Table
impl<A: Into<Row>> Extend<A> for Table
source§fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T)
fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T)
source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)