9
9
"encoding/csv"
10
10
"flag"
11
11
"fmt"
12
+ "io"
12
13
"os"
13
14
"path"
14
15
@@ -46,6 +47,12 @@ This would yield
46
47
showHelp bool
47
48
showLicense bool
48
49
showVersion bool
50
+
51
+ // CSV Reader Options
52
+ lazyQuotes bool
53
+ trimLeadingSpaces bool
54
+ reuseRecord bool
55
+ fieldsPerRecord int
49
56
)
50
57
51
58
func main () {
@@ -56,6 +63,12 @@ func main() {
56
63
flag .BoolVar (& showLicense , "license" , false , "display license" )
57
64
flag .BoolVar (& showVersion , "version" , false , "display version" )
58
65
66
+ // CSV Reader options
67
+ flag .IntVar (& fieldsPerRecord , "fields-per-record" , 0 , "sets the number o fields expected in each row, -1 turns this off" )
68
+ flag .BoolVar (& lazyQuotes , "lazy-quotes" , false , "use lazy quoting for reader" )
69
+ flag .BoolVar (& trimLeadingSpaces , "left-trim" , false , "trims leading space read" )
70
+ flag .BoolVar (& reuseRecord , "reuse-record" , false , "re-uses the backing array on reader" )
71
+
59
72
// Parse Environment and Options
60
73
flag .Parse ()
61
74
@@ -73,11 +86,16 @@ func main() {
73
86
os .Exit (0 )
74
87
}
75
88
76
- exitCode := 0
77
89
// Setup the CSV output
78
90
r := csv .NewReader (os .Stdin )
79
91
r .Comma = '\t'
80
92
r .Comment = '#'
93
+ r .FieldsPerRecord = fieldsPerRecord
94
+ r .LazyQuotes = lazyQuotes
95
+ r .TrimLeadingSpace = trimLeadingSpaces
96
+ r .ReuseRecord = reuseRecord
97
+
98
+ exitCode := 0
81
99
w := csv .NewWriter (os .Stdout )
82
100
/*
83
101
if delimiter != "" {
@@ -86,10 +104,11 @@ func main() {
86
104
*/
87
105
for {
88
106
row , err := r .Read ()
89
- if err != nil {
107
+ if err == io .EOF {
108
+ break
109
+ } else if err != nil {
90
110
fmt .Fprintln (os .Stderr , err )
91
111
exitCode = 1
92
- break
93
112
} else {
94
113
if err := w .Write (row ); err != nil {
95
114
fmt .Fprintln (os .Stderr , err )
0 commit comments