1 2 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 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
|
# Gotabulate - Easily tabulate Data
[](https://godoc.org/github.com/bndr/gotabulate)
[](https://travis-ci.org/bndr/gotabulate)
## Summary
Go-Tabulate - Generic Go Library for easy tabulation of your data.
## Installation
go get github.com/bndr/gotabulate
## Description
Supported data types:
- 2D Array of Int, Int64, Float64, String, interface{}
- Map of String, interface{} (Keys will be used as header)
## Usage
```go
// Create Some Fake Rows
row_1 := []interface{}{"john", 20, "ready"}
row_2 := []interface{}{"bndr", 23, "ready"}
// Create an object from 2D interface array
t := gotabulate.Create([][]interface{}{row_1, row_2})
// Set the Headers (optional)
t.SetHeaders([]string{"age", "status"})
// Set the Empty String (optional)
t.SetEmptyString("None")
// Set Align (Optional)
t.SetAlign("right")
// Print the result: grid, or simple
fmt.Println(t.Render("grid"))
+---------+--------+-----------+
| | age | status |
+=========+========+===========+
| john | 20 | ready |
+---------+--------+-----------+
| bndr | 23 | ready |
+---------+--------+-----------+
```
## Example with String
```
// Some Strings
string_1 := []string{"TV", "1000$", "Sold"}
string_2 := []string{"PC", "50%", "on Hold"}
// Create Object
tabulate := gotabulate.Create([][]string{string_1, string_2})
// Set Headers
tabulate.SetHeaders([]string{"Type", "Cost", "Status"})
// Render
fmt.Println(tabulate.Render("simple"))
--------- ---------- ------------
Type Cost Status
--------- ---------- ------------
TV 1000$ Sold
PC 50% on Hold
--------- ---------- ------------
```
## Example with String Wrapping
```go
tabulate := gotabulate.Create([][]string{[]string{"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus laoreet vestibulum pretium. Nulla et ornare elit. Cum sociis natoque penatibus et magnis",
"Vivamus laoreet vestibulum pretium. Nulla et ornare elit. Cum sociis natoque penatibus et magnis", "zzLorem ipsum", " test", "test"}, []string{"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus laoreet vestibulum pretium. Nulla et ornare elit. Cum sociis natoque penatibus et magnis",
"Vivamus laoreet vestibulum pretium. Nulla et ornare elit. Cum sociis natoque penatibus et magnis", "zzLorem ipsum", " test", "test"}, STRING_ARRAY, []string{"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus laoreet vestibulum pretium. Nulla et ornare elit. Cum sociis natoque penatibus et magnis",
"Vivamus laoreet vestibulum pretium. Nulla et ornare elit. Cum sociis natoque penatibus et magnis", "zzLorem ipsum", " test", "test"}, STRING_ARRAY})
tabulate.SetHeaders([]string{"Header 1", "header 2", "header 3", "header 4"})
// Set Max Cell Size
tabulate.SetMaxCellSize(16)
// Turn On String Wrapping
tabulate.SetWrapStrings(true)
// Render the table
fmt.Println(tabulate.Render("grid"))
+---------------------+---------------------+----------------+-------------+-------------+
| | Header 1 | header 2 | header 3 | header 4 |
+=====================+=====================+================+=============+=============+
| Lorem ipsum dolo | Vivamus laoreet | Lorem ipsum | test | test |
| r sit amet, cons | vestibulum preti | | | |
| ectetur adipisci | um. Nulla et orn | | | |
| ng elit. Vivamus | are elit. Cum so | | | |
| laoreet vestibu | ciis natoque pen | | | |
| lum pretium. Nul | atibus et magnis | | | |
| la et ornare eli | | | | |
| t. Cum sociis na | | | | |
| toque penatibus | | | | |
| et magnis | | | | |
+---------------------+---------------------+----------------+-------------+-------------+
| Lorem ipsum dolo | Vivamus laoreet | Lorem ipsum | test | test |
| r sit amet, cons | vestibulum preti | | | |
| ectetur adipisci | um. Nulla et orn | | | |
| ng elit. Vivamus | are elit. Cum so | | | |
| laoreet vestibu | ciis natoque pen | | | |
| lum pretium. Nul | atibus et magnis | | | |
| la et ornare eli | | | | |
| t. Cum sociis na | | | | |
| toque penatibus | | | | |
| et magnis | | | | |
+---------------------+---------------------+----------------+-------------+-------------+
| test string | test string 2 | test | row | bndr |
+---------------------+---------------------+----------------+-------------+-------------+
| Lorem ipsum dolo | Vivamus laoreet | Lorem ipsum | test | test |
| r sit amet, cons | vestibulum preti | | | |
| ectetur adipisci | um. Nulla et orn | | | |
| ng elit. Vivamus | are elit. Cum so | | | |
| laoreet vestibu | ciis natoque pen | | | |
| lum pretium. Nul | atibus et magnis | | | |
| la et ornare eli | | | | |
| t. Cum sociis na | | | | |
| toque penatibus | | | | |
| et magnis | | | | |
+---------------------+---------------------+----------------+-------------+-------------+
| test string | test string 2 | test | row | bndr |
+---------------------+---------------------+----------------+-------------+-------------+
```
## Examples
```
t := gotabulate.Create([][]string{STRING_ARRAY, STRING_ARRAY})
t.SetHeaders(HEADERS) // If not headers are set, the first row will be used.
t.SetEmptyString("None") // Set what will be printed in the empty cell
rendered_string := t.Render("simple") // Render() will return a string
Simple Table
---------------------- ---------------------- ---------------------- ------------- -------------
Header 1 Header 2 Header 3 Header 4 Header 5
---------------------- ---------------------- ---------------------- ------------- -------------
test string test string 2 test row bndr
test string test string 2 test row bndr
4th element empty 4th element empty 4th element empty None None
---------------------- ---------------------- ---------------------- ------------- -------------
Grid Table (Align Right)
+-------------+-------------+-------------+-------------+-------------+
| Header 1 | Header 2 | Header 3 | Header 4 | Header 5 |
+=============+=============+=============+=============+=============+
| 10.01 | 12.002 | -123.5 | 20.00005 | 1.01 |
+-------------+-------------+-------------+-------------+-------------+
| 10.01 | 12.002 | -123.5 | 20.00005 | 1.01 |
+-------------+-------------+-------------+-------------+-------------+
| 10.01 | 12.002 | -123.5 | 20.00005 | None |
+-------------+-------------+-------------+-------------+-------------+
Padded Headers:
+----------------------+----------------------+----------------------+-------------+-------------+
| | Header 1 | header 2 | header 3 | header 4 |
+======================+======================+======================+=============+=============+
| test string | test string 2 | test | row | bndr |
+----------------------+----------------------+----------------------+-------------+-------------+
| test string | test string 2 | test | row | bndr |
+----------------------+----------------------+----------------------+-------------+-------------+
| 4th element empty | 4th element empty | 4th element empty | None | None |
+----------------------+----------------------+----------------------+-------------+-------------+
Align Center:
+-------------+-------------+-------------+-------------+-------------+
| Header 1 | Header 2 | Header 3 | Header 4 | Header 5 |
+=============+=============+=============+=============+=============+
| 10.01 | 12.002 | -123.5 | 20.00005 | 1.01 |
+-------------+-------------+-------------+-------------+-------------+
| 10.01 | 12.002 | -123.5 | 20.00005 | 1.01 |
+-------------+-------------+-------------+-------------+-------------+
| 10.01 | 12.002 | -123.5 | 20.00005 | 1.01 |
+-------------+-------------+-------------+-------------+-------------+
Align Left:
+-------------+-------------+-------------+-------------+-------------+
| Header 1 | Header 2 | Header 3 | Header 4 | Header 5 |
+=============+=============+=============+=============+=============+
| 10.01 | 12.002 | -123.5 | 20.00005 | 1.01 |
+-------------+-------------+-------------+-------------+-------------+
| 10.01 | 12.002 | -123.5 | 20.00005 | 1.01 |
+-------------+-------------+-------------+-------------+-------------+
| 10.01 | 12.002 | -123.5 | 20.00005 | 1.01 |
+-------------+-------------+-------------+-------------+-------------+
```
### Status
Beta version. There may be edge cases that I have missed, so if your tables don't render properly please open up an issue.
## Contribute
All Contributions are welcome. The todo list is on the bottom of this README. Feel free to send a pull request.
## License
Apache License 2.0
### TODO
- Add more examples
- Implement more data table formats
### Acknowledgement
Inspired by Python package https://pypi.python.org/pypi/tabulate
|