github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/types/csv/map.go (about) 1 package csv 2 3 import ( 4 "encoding/csv" 5 "io" 6 "strconv" 7 8 "github.com/lmorg/murex/config" 9 "github.com/lmorg/murex/lang/stdio" 10 "github.com/lmorg/murex/lang/types" 11 ) 12 13 func readMap(read stdio.Io, config *config.Config, callback func(*stdio.Map)) error { 14 reader := csv.NewReader(read) 15 16 v, err := config.Get("csv", "separator", types.String) 17 if err != nil { 18 return err 19 } 20 if len(v.(string)) > 0 { 21 reader.Comma = rune(v.(string)[0]) 22 } 23 24 v, err = config.Get("csv", "comment", types.String) 25 if err != nil { 26 return err 27 } 28 if len(v.(string)) > 0 { 29 reader.Comment = rune(v.(string)[0]) 30 } 31 32 for { 33 recs, err := reader.Read() 34 if err == io.EOF { 35 return nil 36 } 37 if err != nil { 38 return err 39 } 40 41 for i := range recs { 42 callback(&stdio.Map{ 43 Key: strconv.Itoa(i), 44 Value: recs[i], 45 DataType: types.String, 46 Last: i == len(recs)-1, 47 }) 48 } 49 } 50 }