csv_to_table

A library for pretty print CSV as a table

5 releases (breaking)

0.6.0 Nov 22, 2024
0.5.0 Aug 5, 2024
0.4.0 Dec 20, 2023
0.3.0 Apr 23, 2023
0.2.0 Apr 11, 2023

#495 in Text processing

Download history 43/week @ 2024-09-08 10/week @ 2024-09-15 15/week @ 2024-09-22 18/week @ 2024-10-06 3/week @ 2024-10-13 1/week @ 2024-10-20 13/week @ 2024-11-03 46/week @ 2024-11-10 118/week @ 2024-11-17 46/week @ 2024-11-24 15/week @ 2024-12-01

225 downloads per month
Used in albion_terminal_rpg

MIT license

1MB
16K SLoC

A library for converting csv to a table.

It uses tabled as a rendering backend.

Install

Add the library to a dependency list.

[dependencies]
csv_to_table = "0.3"

Usage

There's 2 approaches the library provides.

  • In memory approach; where we load CSV into memory and then construct a table.
  • Sniffing a csv; so the used memory will be limited.
  • Setting your constrains so no memory will be used.
Example of in memory approach
fn main() {
    let syscalls = "\
        0,INDIR,,\"int sys_syscall(int number, ...)\"\n\
        1,STD,,\"void sys_exit(int rval)\"\n\
        2,STD,,\"int sys_fork(void)\"\n\
        3,STD,NOLOCK,\"ssize_t sys_read(int fd, void *buf, size_t nbyte)\"\n\
        4,STD,NOLOCK,\"ssize_t sys_write(int fd, const void *buf, size_t nbyte)\""; 

    let table = csv_to_table::from_reader(syscalls.as_bytes()).unwrap();

    println!("{table}")
}
Result
+---+-------+--------+----------------------------------------------------------+
| 0 | INDIR |        | int sys_syscall(int number, ...)                         |
+---+-------+--------+----------------------------------------------------------+
| 1 | STD   |        | void sys_exit(int rval)                                  |
+---+-------+--------+----------------------------------------------------------+
| 2 | STD   |        | int sys_fork(void)                                       |
+---+-------+--------+----------------------------------------------------------+
| 3 | STD   | NOLOCK | ssize_t sys_read(int fd, void *buf, size_t nbyte)        |
+---+-------+--------+----------------------------------------------------------+
| 4 | STD   | NOLOCK | ssize_t sys_write(int fd, const void *buf, size_t nbyte) |
+---+-------+--------+----------------------------------------------------------+
Example of sniffing approach
fn main() {
    let syscalls = "\
        0,INDIR,,\"int sys_syscall(int number, ...)\"\n\
        1,STD,,\"void sys_exit(int rval)\"\n\
        2,STD,,\"int sys_fork(void)\"\n\
        3,STD,NOLOCK,\"ssize_t sys_read(int fd, void *buf, size_t nbyte)\"\n\
        4,STD,NOLOCK,\"ssize_t sys_write(int fd, const void *buf, size_t nbyte)\"";

    let table = csv_to_table::iter::from_reader(syscalls.as_bytes()).sniff(3);

    table.build(std::io::stdout()).unwrap();
}
Result
+---+-------+--+----------------------------------+
| 0 | INDIR |  | int sys_syscall(int number, ...) |
+---+-------+--+----------------------------------+
| 1 | STD   |  | void sys_exit(int rval)          |
+---+-------+--+----------------------------------+
| 2 | STD   |  | int sys_fork(void)               |
+---+-------+--+----------------------------------+
| 3 | STD   |  | ssize_t sys_read(int fd, void *b |
+---+-------+--+----------------------------------+
| 4 | STD   |  | ssize_t sys_write(int fd, const  |
+---+-------+--+----------------------------------+
Notice that the last 2 rows are truncated.

Dependencies

~3.5MB
~53K SLoC