diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f6e124f..1c098b45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### 12.69.0 +* `[csv]` Added method `WithComma` to CSV reader * `[spinner]` Added symbols customization * `[spinner]` Change default skip symbol to check mark * `[spinner]` Change default skip symbol color to dark grey diff --git a/csv/csv.go b/csv/csv.go index 46966f07..6e77a5b8 100644 --- a/csv/csv.go +++ b/csv/csv.go @@ -79,8 +79,20 @@ func (r *Reader) ReadTo(dst []string) error { return nil } +// WithComma sets comma (fields delimiter) for CSV reader +func (r *Reader) WithComma(comma rune) *Reader { + if r == nil { + return nil + } + + r.Comma = comma + + return r +} + // ////////////////////////////////////////////////////////////////////////////////// // +// parseAndFill parses line func parseAndFill(src string, dst []string, sep string) { l := len(dst) @@ -116,6 +128,7 @@ func parseAndFill(src string, dst []string, sep string) { } } +// clean cleans destination slice func clean(dst []string, since, to int) { for i := since; i < to; i++ { dst[i] = "" diff --git a/csv/csv_test.go b/csv/csv_test.go index bc0ecd58..3f22a9ef 100644 --- a/csv/csv_test.go +++ b/csv/csv_test.go @@ -56,9 +56,7 @@ func (s *CSVSuite) TestRead(c *C) { defer fd.Close() - reader := NewReader(fd) - reader.Comma = ',' - + reader := NewReader(fd).WithComma(',') count := 0 for { @@ -146,6 +144,7 @@ func (s *CSVSuite) TestNil(c *C) { c.Assert(err, DeepEquals, ErrNilReader) c.Assert(r.ReadTo(b), DeepEquals, ErrNilReader) + c.Assert(r.WithComma('X'), IsNil) } // ////////////////////////////////////////////////////////////////////////////////// // diff --git a/csv/examples_test.go b/csv/examples_test.go index 66a03870..88a28f83 100644 --- a/csv/examples_test.go +++ b/csv/examples_test.go @@ -64,3 +64,26 @@ func ExampleReader_ReadTo() { fmt.Printf("%#v\n", data) } } + +func ExampleReader_WithComma() { + fd, err := os.Open("file.csv") + + if err != nil { + fmt.Println(err.Error()) + return + } + + defer fd.Close() + + reader := NewReader(fd).WithComma(',') + + for { + data, err := reader.Read() + + if err == io.EOF { + break + } + + fmt.Printf("%#v\n", data) + } +}