Skip to content

Commit 98bf6b0

Browse files
committed
experimentally added -uuid and -skip-header-row options to csvcols
1 parent bc4570c commit 98bf6b0

File tree

1 file changed

+26
-7
lines changed

1 file changed

+26
-7
lines changed

cmds/csvcols/csvcols.go

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,12 @@ import (
3030
"strconv"
3131
"strings"
3232

33-
// My packages
33+
// Caltech Library packages
3434
"github.com/caltechlibrary/cli"
3535
"github.com/caltechlibrary/datatools"
36+
37+
// 3rd Party packages
38+
"github.com/google/uuid"
3639
)
3740

3841
var (
@@ -80,10 +83,23 @@ Filter a 10 columns CSV file for columns 1,4,6 from input file
8083
// App Options
8184
delimiter string
8285
filterColumns bool
86+
prefixUUID bool
87+
skipHeaderRow bool
8388
)
8489

85-
func selectedColumns(record []string, columnNos []int) []string {
90+
func selectedColumns(rowNo int, record []string, columnNos []int, prefixUUID bool, skipHeaderRow bool) []string {
91+
var id string
92+
8693
result := []string{}
94+
if prefixUUID == true {
95+
if rowNo == 0 {
96+
id = "uuid"
97+
98+
} else {
99+
id = uuid.New().String()
100+
}
101+
result = append(result, id)
102+
}
87103
l := len(record)
88104
for _, col := range columnNos {
89105
if col >= 0 && col < l {
@@ -96,20 +112,21 @@ func selectedColumns(record []string, columnNos []int) []string {
96112
return result
97113
}
98114

99-
func CSVColumns(in *os.File, out *os.File, columnNos []int) {
115+
func CSVColumns(in *os.File, out *os.File, columnNos []int, prefixUUID bool, skipHeaderRow bool) {
116+
var err error
117+
100118
r := csv.NewReader(in)
101119
w := csv.NewWriter(out)
102-
for {
120+
for i := 0; err != io.EOF; i++ {
103121
rec, err := r.Read()
104122
if err == io.EOF {
105123
break
106124
}
107125
if err != nil {
108126
fmt.Fprintf(os.Stderr, "%s, %s\n", inputFName, err)
109127
fmt.Fprintf(os.Stderr, "%T %+v\n", rec, rec)
110-
//os.Exit(1)
111128
}
112-
row := selectedColumns(rec, columnNos)
129+
row := selectedColumns(i, rec, columnNos, prefixUUID, skipHeaderRow)
113130
if err := w.Write(row); err != nil {
114131
fmt.Fprintf(os.Stderr, "Error writing record to csv: %s\n", err)
115132
fmt.Fprintf(os.Stderr, "Row %T %+v\n", row, row)
@@ -141,6 +158,8 @@ func init() {
141158
flag.StringVar(&delimiter, "delimiter", "", "set delimiter for conversion")
142159
flag.BoolVar(&filterColumns, "col", false, "filter CSV input for columns requested")
143160
flag.BoolVar(&filterColumns, "filter-columns", false, "filter CSV input for columns requested")
161+
flag.BoolVar(&prefixUUID, "uuid", false, "add a prefix row with generated UUID cell")
162+
flag.BoolVar(&skipHeaderRow, "skip-header-row", true, "skip the header row")
144163
}
145164

146165
func main() {
@@ -198,7 +217,7 @@ func main() {
198217
}
199218
columnNos = append(columnNos, i)
200219
}
201-
CSVColumns(in, out, columnNos)
220+
CSVColumns(in, out, columnNos, prefixUUID, skipHeaderRow)
202221
os.Exit(0)
203222
}
204223

0 commit comments

Comments
 (0)