@@ -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
3841var (
@@ -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
146165func 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