Documentation ¶
Overview ¶
Package tablewriter Create & Generate text based table
Example (Autowrap) ¶
var multiline = `A multiline string with some lines being really long.` const ( testRow = iota testHeader testFooter testFooter2 ) for mode := testRow; mode <= testFooter2; mode++ { for _, autoFmt := range []bool{false, true} { if mode == testRow && autoFmt { // Nothing special to test, skip continue } for _, autoWrap := range []bool{false, true} { for _, reflow := range []bool{false, true} { if !autoWrap && reflow { // Invalid configuration, skip continue } fmt.Println("mode", mode, "autoFmt", autoFmt, "autoWrap", autoWrap, "reflow", reflow) t := NewWriter(os.Stdout) t.SetAutoFormatHeaders(autoFmt) t.SetAutoWrapText(autoWrap) t.SetReflowDuringAutoWrap(reflow) if mode == testHeader { t.SetHeader([]string{"woo", multiline}) } else { t.SetHeader([]string{"woo", "waa"}) } if mode == testRow { t.Append([]string{"woo", multiline}) } else { t.Append([]string{"woo", "waa"}) } if mode == testFooter { t.SetFooter([]string{"woo", multiline}) } else if mode == testFooter2 { t.SetFooter([]string{"", multiline}) } else { t.SetFooter([]string{"woo", "waa"}) } t.Render() } } } fmt.Println() }
Output: mode 0 autoFmt false autoWrap false reflow false +-----+-------------------------------------------+ | woo | waa | +-----+-------------------------------------------+ | woo | A multiline | | | string with some lines being really long. | +-----+-------------------------------------------+ | woo | waa | +-----+-------------------------------------------+ mode 0 autoFmt false autoWrap true reflow false +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | woo | A multiline | | | | | | string with some lines being | | | really long. | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ mode 0 autoFmt false autoWrap true reflow true +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | woo | A multiline string with some | | | lines being really long. | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ mode 1 autoFmt false autoWrap false reflow false +-----+-------------------------------------------+ | woo | A multiline | | | string with some lines being really long. | +-----+-------------------------------------------+ | woo | waa | +-----+-------------------------------------------+ | woo | waa | +-----+-------------------------------------------+ mode 1 autoFmt false autoWrap true reflow false +-----+--------------------------------+ | woo | A multiline | | | | | | string with some lines being | | | really long. | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ mode 1 autoFmt false autoWrap true reflow true +-----+--------------------------------+ | woo | A multiline string with some | | | lines being really long. | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ mode 1 autoFmt true autoWrap false reflow false +-----+-------------------------------------------+ | WOO | A MULTILINE | | | STRING WITH SOME LINES BEING REALLY LONG | +-----+-------------------------------------------+ | woo | waa | +-----+-------------------------------------------+ | WOO | WAA | +-----+-------------------------------------------+ mode 1 autoFmt true autoWrap true reflow false +-----+--------------------------------+ | WOO | A MULTILINE | | | | | | STRING WITH SOME LINES BEING | | | REALLY LONG | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | WOO | WAA | +-----+--------------------------------+ mode 1 autoFmt true autoWrap true reflow true +-----+--------------------------------+ | WOO | A MULTILINE STRING WITH SOME | | | LINES BEING REALLY LONG | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | WOO | WAA | +-----+--------------------------------+ mode 2 autoFmt false autoWrap false reflow false +-----+-------------------------------------------+ | woo | waa | +-----+-------------------------------------------+ | woo | waa | +-----+-------------------------------------------+ | woo | A multiline | | | string with some lines being really long. | +-----+-------------------------------------------+ mode 2 autoFmt false autoWrap true reflow false +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | woo | A multiline | | | | | | string with some lines being | | | really long. | +-----+--------------------------------+ mode 2 autoFmt false autoWrap true reflow true +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | woo | A multiline string with some | | | lines being really long. | +-----+--------------------------------+ mode 2 autoFmt true autoWrap false reflow false +-----+-------------------------------------------+ | WOO | WAA | +-----+-------------------------------------------+ | woo | waa | +-----+-------------------------------------------+ | WOO | A MULTILINE | | | STRING WITH SOME LINES BEING REALLY LONG | +-----+-------------------------------------------+ mode 2 autoFmt true autoWrap true reflow false +-----+--------------------------------+ | WOO | WAA | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | WOO | A MULTILINE | | | | | | STRING WITH SOME LINES BEING | | | REALLY LONG | +-----+--------------------------------+ mode 2 autoFmt true autoWrap true reflow true +-----+--------------------------------+ | WOO | WAA | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | WOO | A MULTILINE STRING WITH SOME | | | LINES BEING REALLY LONG | +-----+--------------------------------+ mode 3 autoFmt false autoWrap false reflow false +-----+-------------------------------------------+ | woo | waa | +-----+-------------------------------------------+ | woo | waa | +-----+-------------------------------------------+ | A multiline | | string with some lines being really long. | +-----+-------------------------------------------+ mode 3 autoFmt false autoWrap true reflow false +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | A multiline | | | | string with some lines being | | really long. | +-----+--------------------------------+ mode 3 autoFmt false autoWrap true reflow true +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | A multiline string with some | | lines being really long. | +-----+--------------------------------+ mode 3 autoFmt true autoWrap false reflow false +-----+-------------------------------------------+ | WOO | WAA | +-----+-------------------------------------------+ | woo | waa | +-----+-------------------------------------------+ | A MULTILINE | | STRING WITH SOME LINES BEING REALLY LONG | +-----+-------------------------------------------+ mode 3 autoFmt true autoWrap true reflow false +-----+--------------------------------+ | WOO | WAA | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | A MULTILINE | | | | STRING WITH SOME LINES BEING | | REALLY LONG | +-----+--------------------------------+ mode 3 autoFmt true autoWrap true reflow true +-----+--------------------------------+ | WOO | WAA | +-----+--------------------------------+ | woo | waa | +-----+--------------------------------+ | A MULTILINE STRING WITH SOME | | LINES BEING REALLY LONG | +-----+--------------------------------+
Index ¶
- Constants
- func Color(colors ...int) []int
- func ConditionString(cond bool, valid, inValid string) string
- func DisplayWidth(str string) int
- func Pad(s, pad string, width int) string
- func PadLeft(s, pad string, width int) string
- func PadRight(s, pad string, width int) string
- func Title(name string) string
- func WrapString(s string, lim int) ([]string, int)
- func WrapWords(words []string, spc, lim, pen int) [][]string
- type Border
- type Colors
- type Table
- func (t *Table) Append(row []string)
- func (t *Table) AppendBulk(rows [][]string)
- func (t *Table) ClearFooter()
- func (t *Table) ClearRows()
- func (t *Table) EnableBorder(border bool)
- func (t *Table) NumLines() int
- func (t *Table) Render()
- func (t *Table) Rich(row []string, colors []Colors)
- func (t *Table) SetAlignment(align int)
- func (t *Table) SetAutoFormatHeaders(auto bool)
- func (t *Table) SetAutoMergeCells(auto bool)
- func (t *Table) SetAutoMergeCellsByColumnIndex(cols []int)
- func (t *Table) SetAutoWrapText(auto bool)
- func (t *Table) SetBorder(border bool)
- func (t *Table) SetBorders(border Border)
- func (t *Table) SetCaption(caption bool, captionText ...string)
- func (t *Table) SetCenterSeparator(sep string)
- func (t *Table) SetColMinWidth(column int, width int)
- func (t *Table) SetColWidth(width int)
- func (t *Table) SetColumnAlignment(keys []int)
- func (t *Table) SetColumnColor(colors ...Colors)
- func (t *Table) SetColumnSeparator(sep string)
- func (t *Table) SetFooter(keys []string)
- func (t *Table) SetFooterAlignment(fAlign int)
- func (t *Table) SetFooterColor(colors ...Colors)
- func (t *Table) SetHeader(keys []string)
- func (t *Table) SetHeaderAlignment(hAlign int)
- func (t *Table) SetHeaderColor(colors ...Colors)
- func (t *Table) SetHeaderLine(line bool)
- func (t *Table) SetNewLine(nl string)
- func (t *Table) SetNoWhiteSpace(allow bool)
- func (t *Table) SetReflowDuringAutoWrap(auto bool)
- func (t *Table) SetRowLine(line bool)
- func (t *Table) SetRowSeparator(sep string)
- func (t *Table) SetStructs(v interface{}) error
- func (t *Table) SetTablePadding(padding string)
- func (t *Table) SetUnicodeHV(horizontal, vertical UnicodeLineStyle) error
- type UnicodeLineStyle
Examples ¶
Constants ¶
const ( CENTER = "+" ROW = "-" COLUMN = "|" SPACE = " " NEWLINE = "\n" )
const ( ALIGN_DEFAULT = iota ALIGN_CENTER ALIGN_RIGHT ALIGN_LEFT )
const ( BgBlackColor int = iota + 40 BgRedColor BgGreenColor BgYellowColor BgBlueColor BgMagentaColor BgCyanColor BgWhiteColor )
const ( FgBlackColor int = iota + 30 FgRedColor FgGreenColor FgYellowColor FgBlueColor FgMagentaColor FgCyanColor FgWhiteColor )
const ( BgHiBlackColor int = iota + 100 BgHiRedColor BgHiGreenColor BgHiYellowColor BgHiBlueColor BgHiMagentaColor BgHiCyanColor BgHiWhiteColor )
const ( FgHiBlackColor int = iota + 90 FgHiRedColor FgHiGreenColor FgHiYellowColor FgHiBlueColor FgHiMagentaColor FgHiCyanColor FgHiWhiteColor )
const ( Normal = 0 Bold = 1 UnderlineSingle = 4 Italic )
const ESC = "\033"
const (
MAX_ROW_WIDTH = 30
)
const SEP = ";"
Variables ¶
This section is empty.
Functions ¶
func ConditionString ¶
ConditionString Simple Condition for string Returns value based on condition
func DisplayWidth ¶
func PadLeft ¶
PadLeft Pad String Left position This would place string at the right side of the screen
func PadRight ¶
PadRight Pad String Right position This would place string at the left side of the screen
func WrapString ¶
WrapString wraps s into a paragraph of lines of length lim, with minimal raggedness.
func WrapWords ¶
WrapWords is the low-level line-breaking algorithm, useful if you need more control over the details of the text wrapping process. For most uses, WrapString will be sufficient and more convenient.
WrapWords splits a list of words into lines with minimal "raggedness", treating each rune as one unit, accounting for spc units between adjacent words on each line, and attempting to limit lines to lim units. Raggedness is the total error over all lines, where error is the square of the difference of the length of the line and lim. Too-long lines (which only happen when a single word is longer than lim units) have pen penalty units added to the error.
Types ¶
type Table ¶
type Table struct {
// contains filtered or unexported fields
}
Example ¶
data := [][]string{ {"Learn East has computers with adapted keyboards with enlarged print etc", " Some Data ", " Another Data"}, {"Instead of lining up the letters all ", "the way across, he splits the keyboard in two", "Like most ergonomic keyboards", "See Data"}, } table := NewWriter(os.Stdout) table.SetHeader([]string{"Name", "Sign", "Rating"}) table.SetCenterSeparator("*") table.SetRowSeparator("=") for _, v := range data { table.Append(v) } table.Render()
Output: *================================*================================*===============================*==========* | NAME | SIGN | RATING | | *================================*================================*===============================*==========* | Learn East has computers | Some Data | Another Data | | with adapted keyboards with | | | | enlarged print etc | | | | Instead of lining up the | the way across, he splits the | Like most ergonomic keyboards | See Data | | letters all | keyboard in two | | | *================================*================================*===============================*==========*
func NewCSV ¶
NewCSV Start A new table by importing from a CSV file Takes io.Writer and csv File name
Example ¶
table, _ := NewCSV(os.Stdout, "testdata/test.csv", true) table.SetCenterSeparator("*") table.SetRowSeparator("=") table.Render()
Output: *============*===========*=========* | FIRST NAME | LAST NAME | SSN | *============*===========*=========* | John | Barry | 123456 | | Kathy | Smith | 687987 | | Bob | McCornick | 3979870 | *============*===========*=========*
func NewCSVReader ¶
NewCSVReader Start a New Table Writer with csv.Reader This enables customisation such as reader.Comma = ';' See http://golang.org/src/pkg/encoding/csv/reader.go?s=3213:3671#L94
func (*Table) AppendBulk ¶
AppendBulk Allow Support for Bulk Append Eliminates repeated for loops
func (*Table) EnableBorder ¶
EnableBorder Set Table Border This would enable / disable line around the table
func (*Table) SetAlignment ¶
SetAlignment Set Table Alignment
func (*Table) SetAutoFormatHeaders ¶
SetAutoFormatHeaders Turn header autoformatting on/off. Default is on (true).
func (*Table) SetAutoMergeCells ¶
SetAutoMergeCells Set Auto Merge Cells This would enable / disable the merge of cells with identical values
func (*Table) SetAutoMergeCellsByColumnIndex ¶
SetAutoMergeCellsByColumnIndex Set Auto Merge Cells By Column Index This would enable / disable the merge of cells with identical values for specific columns If cols is empty, it is the same as `SetAutoMergeCells(true)`.
func (*Table) SetAutoWrapText ¶
SetAutoWrapText Turn automatic multiline text adjustment on/off. Default is on (true).
func (*Table) SetBorder ¶
SetBorder Set Table Border This would enable / disable line around the table Deprecated: use EnableBorder
func (*Table) SetBorders ¶
SetBorders SetBorder Set Custom Table Border
func (*Table) SetCaption ¶
SetCaption Set table Caption
func (*Table) SetCenterSeparator ¶
SetCenterSeparator Set the center Separator
func (*Table) SetColMinWidth ¶
SetColMinWidth Set the minimal width for a column
func (*Table) SetColWidth ¶
SetColWidth Set the Default column width
func (*Table) SetColumnAlignment ¶
SetColumnAlignment Set Column Alignment
func (*Table) SetColumnColor ¶
Adding column colors (ANSI codes)
func (*Table) SetColumnSeparator ¶
SetColumnSeparator Set the Column Separator
func (*Table) SetFooterAlignment ¶
SetFooterAlignment Set Footer Alignment
func (*Table) SetFooterColor ¶
Adding column colors (ANSI codes)
func (*Table) SetHeaderAlignment ¶
SetHeaderAlignment Set Header Alignment
func (*Table) SetHeaderColor ¶
Adding header colors (ANSI codes)
func (*Table) SetHeaderLine ¶
SetHeaderLine Set Header Line This would enable / disable a line after the header
func (*Table) SetNoWhiteSpace ¶
SetNoWhiteSpace Set No White Space
func (*Table) SetReflowDuringAutoWrap ¶
SetReflowDuringAutoWrap Turn automatic reflowing of multiline text when rewrapping. Default is on (true).
func (*Table) SetRowLine ¶
SetRowLine Set Row Line This would enable / disable a line on each row of the table
func (*Table) SetRowSeparator ¶
SetRowSeparator Set the Row Separator
func (*Table) SetStructs ¶
SetStructs sets header and rows from slice of struct. If something that is not a slice is passed, error will be returned. The tag specified by "tablewriter" for the struct becomes the header. If not specified or empty, the field name will be used. The field of the first element of the slice is used as the header. If the element implements fmt.Stringer, the result will be used. And the slice contains nil, it will be skipped without rendering.
func (*Table) SetTablePadding ¶
SetTablePadding Set Table Padding
func (*Table) SetUnicodeHV ¶
func (t *Table) SetUnicodeHV(horizontal, vertical UnicodeLineStyle) error
Use unicode box drawing symbols to achieve the specified line styles. Note that combinations of thick and double lines are not supported. Will return an error in case of unsupported combinations.
Example ¶
data := [][]string{ {"Regular", "regular line", "1"}, {"Thick", "particularly thick line", "2"}, {"Double", "double line", "3"}, } table := NewWriter(os.Stdout) table.SetFooter([]string{"Constant", "Meaning", "Seq"}) table.SetUnicodeHV(Double, Regular) table.AppendBulk(data) table.Render()
Output: ╒══════════╤═════════════════════════╤═════╕ │ Regular │ regular line │ 1 │ │ Thick │ particularly thick line │ 2 │ │ Double │ double line │ 3 │ ╞══════════╪═════════════════════════╪═════╡ │ CONSTANT │ MEANING │ SEQ │ ╘══════════╧═════════════════════════╧═════╛
type UnicodeLineStyle ¶
type UnicodeLineStyle int
const ( Regular UnicodeLineStyle = iota Thick Double )