84 lines
1.6 KiB
Go
84 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"flag"
|
|
"fmt"
|
|
"github.com/olekukonko/tablewriter"
|
|
"io"
|
|
"os"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
var (
|
|
fileName = flag.String("f", "", "Set file with eg. sample.csv")
|
|
delimiter = flag.String("d", ",", "Set CSV File delimiter eg. ,|;|\t ")
|
|
header = flag.Bool("h", true, "Set header options eg. true|false ")
|
|
align = flag.String("a", "none", "Set aligmement with eg. none|left|right|centre")
|
|
pipe = flag.Bool("p", false, "Suport for Piping from STDIN")
|
|
border = flag.Bool("b", true, "Enable / disable table border")
|
|
)
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
fmt.Println()
|
|
if *pipe || hasArg("-p") {
|
|
process(os.Stdin)
|
|
} else {
|
|
if *fileName == "" {
|
|
fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
|
|
flag.PrintDefaults()
|
|
fmt.Println()
|
|
os.Exit(1)
|
|
}
|
|
processFile()
|
|
}
|
|
fmt.Println()
|
|
}
|
|
|
|
func hasArg(name string) bool {
|
|
for _ , v := range os.Args {
|
|
if name == v {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
func processFile() {
|
|
r, err := os.Open(*fileName)
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
defer r.Close()
|
|
process(r)
|
|
}
|
|
func process(r io.Reader) {
|
|
csvReader := csv.NewReader(r)
|
|
rune, size := utf8.DecodeRuneInString(*delimiter)
|
|
if size == 0 {
|
|
rune = ','
|
|
}
|
|
csvReader.Comma = rune
|
|
|
|
table, err := tablewriter.NewCSVReader(os.Stdout, csvReader, *header)
|
|
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
|
|
switch *align {
|
|
case "left":
|
|
table.SetAlignment(tablewriter.ALIGN_LEFT)
|
|
case "right":
|
|
table.SetAlignment(tablewriter.ALIGN_RIGHT)
|
|
case "center":
|
|
table.SetAlignment(tablewriter.ALIGN_CENTRE)
|
|
}
|
|
table.SetBorder(*border)
|
|
table.Render()
|
|
}
|
|
|
|
func exit(err error) {
|
|
fmt.Fprintf(os.Stderr, "#Error : %s", err)
|
|
os.Exit(1)
|
|
}
|