6 releases (breaking)

0.7.0 Feb 8, 2025
0.6.0 Nov 22, 2024
0.5.0 Aug 5, 2024
0.4.0 Dec 20, 2023
0.2.0 Apr 11, 2023

#481 in Text processing

Download history 32/week @ 2024-11-15 149/week @ 2024-11-22 18/week @ 2024-11-29 33/week @ 2024-12-06 10/week @ 2024-12-13 1/week @ 2024-12-20 21/week @ 2025-01-03 23/week @ 2025-01-10 76/week @ 2025-01-17 25/week @ 2025-01-24 59/week @ 2025-01-31 226/week @ 2025-02-07 51/week @ 2025-02-14 68/week @ 2025-02-21 46/week @ 2025-02-28

407 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
~52K SLoC