Skip to content

Commit 58c0a42

Browse files
authored
Merge pull request #8 from triole/master
Add write to file option and small improvements
2 parents 2886e3c + af75fa8 commit 58c0a42

File tree

6 files changed

+44
-19
lines changed

6 files changed

+44
-19
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
.go-version
1+
.go-version

args.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ const (
99
)
1010

1111
type Args struct {
12-
Files []string
13-
Delim string
14-
Pad int
12+
Files []string
13+
Delim string
14+
Pad int
15+
OutputFile string
16+
ForceOverwrite bool
1517
}
1618

1719
var Delims = []string{",", ";"}
@@ -32,21 +34,21 @@ func (args *Args) ValidateAll() error {
3234

3335
func (args *Args) validateFiles() error {
3436
if len(args.Files) < 1 {
35-
return fmt.Errorf(ERROR_NO_FILENAME)
37+
return fmt.Errorf("%s", ERROR_NO_FILENAME)
3638
}
3739
return nil
3840
}
3941

4042
func (args *Args) validateDelim() error {
4143
if !contains(Delims, args.Delim) {
42-
return fmt.Errorf("Error: delimiter should be one of %+q, but got %q", Delims, args.Delim)
44+
return fmt.Errorf("error: delimiter should be one of %+q, but got %q", Delims, args.Delim)
4345
}
4446
return nil
4547
}
4648

4749
func (args *Args) validatePad() error {
4850
if args.Pad < 0 {
49-
return fmt.Errorf("Error: padding should be positive integer, but got %d", args.Pad)
51+
return fmt.Errorf("error: padding should be positive integer, but got %d", args.Pad)
5052
}
5153
return nil
5254
}

args_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ func TestArgs(t *testing.T) {
1414
}
1515
err := args.ValidateAll()
1616
if err != nil {
17-
t.Errorf(err.Error())
17+
t.Error(err.Error())
1818
t.Errorf("Input Args: %+v\n", args)
1919
}
2020
})
@@ -27,7 +27,7 @@ func TestArgs(t *testing.T) {
2727
}
2828
err := args.ValidateAll()
2929
if err != nil {
30-
t.Errorf(err.Error())
30+
t.Error(err.Error())
3131
t.Errorf("Input Args: %+v\n", args)
3232
}
3333
})

convert.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"encoding/csv"
5+
"errors"
56
"fmt"
67
"os"
78
"strings"
@@ -19,8 +20,18 @@ func ConvertAll(args *Args) error {
1920
if err != nil {
2021
return err
2122
}
22-
// print markdown
23-
fmt.Println(md)
23+
if args.OutputFile == "" {
24+
fmt.Println(md)
25+
} else {
26+
_, err := os.Stat(args.OutputFile)
27+
if errors.Is(err, os.ErrNotExist) || args.ForceOverwrite {
28+
os.WriteFile(args.OutputFile, []byte(md), 0644)
29+
} else {
30+
fmt.Printf(
31+
"skip writing output, file exists: %s\n", args.OutputFile,
32+
)
33+
}
34+
}
2435
}
2536
return nil
2637
}
@@ -74,9 +85,7 @@ func ArrayToMd(records [][]string, args *Args) (string, error) {
7485
md := []string{}
7586
md = append(md, rows[0]) // header
7687
md = append(md, horiz) // horizontal devider
77-
for _, v := range rows[1:] {
78-
md = append(md, v)
79-
}
88+
md = append(md, rows[1:]...)
8089

8190
return strings.Join(md, "\n"), nil
8291
}
@@ -99,7 +108,7 @@ func padCells(records [][]string, colSizes []int) ([][]string, error) {
99108
fmt.Println(v)
100109
fmt.Println(colSizes[j])
101110
fmt.Println(utf8.RuneCountInString(v))
102-
return nil, fmt.Errorf("Internal error: column size is bigger than max.")
111+
return nil, fmt.Errorf("internal error: column size is bigger than max")
103112
}
104113
}
105114
}

convert_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func TestConvert(t *testing.T) {
2222

2323
md, err := Convert(testFile, args)
2424
if err != nil {
25-
t.Errorf(err.Error())
25+
t.Error(err.Error())
2626
}
2727

2828
if md != expected {
@@ -43,7 +43,7 @@ func TestConvert(t *testing.T) {
4343

4444
md, err := Convert(testFile, args)
4545
if err != nil {
46-
t.Errorf(err.Error())
46+
t.Error(err.Error())
4747
}
4848

4949
if md != expected {
@@ -64,7 +64,7 @@ func TestConvert(t *testing.T) {
6464

6565
md, err := Convert(testFile, args)
6666
if err != nil {
67-
t.Errorf(err.Error())
67+
t.Error(err.Error())
6868
}
6969

7070
if md != expected {
@@ -85,7 +85,7 @@ func TestConvert(t *testing.T) {
8585

8686
md, err := Convert(testFile, args)
8787
if err != nil {
88-
t.Errorf(err.Error())
88+
t.Error(err.Error())
8989
}
9090

9191
if md != expected {

main.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,20 @@ func main() {
3030
Usage: "CSV delimiter, expected values: ',', ';'.",
3131
Destination: &args.Delim,
3232
},
33+
&cli.StringFlag{
34+
Name: "output",
35+
Aliases: []string{"o"},
36+
Value: "",
37+
Usage: "Write output to file, not overwriting existing file by default",
38+
Destination: &args.OutputFile,
39+
},
40+
&cli.BoolFlag{
41+
Name: "force",
42+
Aliases: []string{"f"},
43+
Value: false,
44+
Usage: "Force overwrite, if output file already exists",
45+
Destination: &args.ForceOverwrite,
46+
},
3347
},
3448
Action: func(c *cli.Context) error {
3549
args.Files = c.Args().Slice()

0 commit comments

Comments
 (0)