aboutsummaryrefslogtreecommitdiff
path: root/src/encoding/csv
diff options
context:
space:
mode:
authorDamien Neil <dneil@google.com>2015-06-03 16:04:01 -0700
committerDamien Neil <dneil@google.com>2015-06-12 18:21:12 +0000
commitab89378cb73003058d1f9707535610af468752fc (patch)
treef4b16f64f9b5efad486656e719f44dc9402a7c27 /src/encoding/csv
parent4105265c66b860244b9f17ae495f8cc27fcd5344 (diff)
downloadgo-ab89378cb73003058d1f9707535610af468752fc.tar.gz
go-ab89378cb73003058d1f9707535610af468752fc.zip
encoding/csv: skip blank lines when FieldsPerRecord >= 0
Fixes #11050. Change-Id: Ie5d16960a1f829af947d82a63fe414924cd02ff6 Reviewed-on: https://go-review.googlesource.com/10666 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/encoding/csv')
-rw-r--r--src/encoding/csv/reader.go11
-rw-r--r--src/encoding/csv/reader_test.go9
2 files changed, 14 insertions, 6 deletions
diff --git a/src/encoding/csv/reader.go b/src/encoding/csv/reader.go
index ca81a41242..37bf80ceae 100644
--- a/src/encoding/csv/reader.go
+++ b/src/encoding/csv/reader.go
@@ -228,16 +228,15 @@ func (r *Reader) parseRecord() (fields []string, err error) {
}
r.r.UnreadRune()
- // If FieldsPerRecord is greater then 0 we can assume the final
- // length of fields to be equal to FieldsPerRecord.
- if r.FieldsPerRecord > 0 {
- fields = make([]string, 0, r.FieldsPerRecord)
- }
-
// At this point we have at least one field.
for {
haveField, delim, err := r.parseField()
if haveField {
+ // If FieldsPerRecord is greater then 0 we can assume the final
+ // length of fields to be equal to FieldsPerRecord.
+ if r.FieldsPerRecord > 0 && fields == nil {
+ fields = make([]string, 0, r.FieldsPerRecord)
+ }
fields = append(fields, r.field.String())
}
if delim == '\n' || err == io.EOF {
diff --git a/src/encoding/csv/reader_test.go b/src/encoding/csv/reader_test.go
index b3c4f3bf18..be1002d034 100644
--- a/src/encoding/csv/reader_test.go
+++ b/src/encoding/csv/reader_test.go
@@ -87,6 +87,15 @@ field"`,
},
},
{
+ Name: "BlankLineFieldCount",
+ Input: "a,b,c\n\nd,e,f\n\n",
+ UseFieldsPerRecord: true,
+ Output: [][]string{
+ {"a", "b", "c"},
+ {"d", "e", "f"},
+ },
+ },
+ {
Name: "TrimSpace",
Input: " a, b, c\n",
TrimLeadingSpace: true,