Unmarshal with CSV as input has some options you can set:
-comma
-: The delmiter used, default is `,`
+delimiter
+: The delimiter used, default is `,`
comment
: The comment character ued in the CSV. If set, lines beginning with the comment character without preceding whitespace are ignored.:
b.WithTemplates("home.html", `
{{ $toml := "slogan = \"Hugo Rocks!\"" | resources.FromString "slogan.toml" | transform.Unmarshal }}
{{ $csv1 := "\"Hugo Rocks\",\"Hugo is Fast!\"" | resources.FromString "slogans.csv" | transform.Unmarshal }}
-{{ $csv2 := "a;b;c" | transform.Unmarshal (dict "comma" ";") }}
+{{ $csv2 := "a;b;c" | transform.Unmarshal (dict "delimiter" ";") }}
Slogan: {{ $toml.slogan }}
CSV1: {{ $csv1 }} {{ len (index $csv1 0) }}
-CSV2: {{ $csv2 }}
-
+CSV2: {{ $csv2 }}
`)
}, func(b *sitesBuilder) {
b.AssertFileContent("public/index.html",
// Decoder provides some configuration options for the decoders.
type Decoder struct {
- // Comma is the field delimiter used in the CSV decoder. It defaults to ','.
- Comma rune
+ // Delimiter is the field delimiter used in the CSV decoder. It defaults to ','.
+ Delimiter rune
// Comment, if not 0, is the comment character ued in the CSV decoder. Lines beginning with the
// Comment character without preceding whitespace are ignored.
// Default is a Decoder in its default configuration.
var Default = Decoder{
- Comma: ',',
+ Delimiter: ',',
}
// UnmarshalToMap will unmarshall data in format f into a new map. This is
func (d Decoder) unmarshalCSV(data []byte, v interface{}) error {
r := csv.NewReader(bytes.NewReader(data))
- r.Comma = d.Comma
+ r.Comma = d.Delimiter
r.Comment = d.Comment
records, err := r.ReadAll()
// in the given string.
// It return an empty string if no format could be detected.
func (d Decoder) FormatFromContentString(data string) Format {
- csvIdx := strings.IndexRune(data, d.Comma)
+ csvIdx := strings.IndexRune(data, d.Delimiter)
jsonIdx := strings.Index(data, "{")
yamlIdx := strings.Index(data, ":")
tomlIdx := strings.Index(data, "=")
// mapstructure does not support string to rune conversion, so do that manually.
// See https://github.com/mitchellh/mapstructure/issues/151
for k, v := range m {
- if strings.EqualFold(k, "Comma") {
+ if strings.EqualFold(k, "Delimiter") {
r, err := stringToRune(v)
if err != nil {
return opts, err
}
- opts.Comma = r
+ opts.Delimiter = r
delete(m, k)
} else if strings.EqualFold(k, "Comment") {
assert.Equal(5, len(first))
assert.Equal("Ford", first[1])
}},
- {testContentResource{key: "r1", content: `a;b;c`, mime: media.CSVType}, map[string]interface{}{"comma": ";"}, func(r [][]string) {
+ {testContentResource{key: "r1", content: `a;b;c`, mime: media.CSVType}, map[string]interface{}{"delimiter": ";"}, func(r [][]string) {
assert.Equal(r, [][]string{[]string{"a", "b", "c"}})
}},
assert.Equal(r, [][]string{[]string{"a", "b", "c"}})
}},
- {"a;b;c", map[string]interface{}{"comma": ";"}, func(r [][]string) {
+ {"a;b;c", map[string]interface{}{"delimiter": ";"}, func(r [][]string) {
assert.Equal(r, [][]string{[]string{"a", "b", "c"}})
}},
{testContentResource{key: "r1", content: `
% This is a comment
-a;b;c`, mime: media.CSVType}, map[string]interface{}{"CommA": ";", "Comment": "%"}, func(r [][]string) {
+a;b;c`, mime: media.CSVType}, map[string]interface{}{"DElimiter": ";", "Comment": "%"}, func(r [][]string) {
assert.Equal(r, [][]string{[]string{"a", "b", "c"}})
}},