aboutsummaryrefslogtreecommitdiffhomepage
path: root/content/en/functions/data/GetCSV.md
blob: e02c1588c31cedd89324349edf1615f7b1ab6b3c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
---
title: data.GetCSV
linkTitle: getCSV
description: Returns an array of arrays from a local or remote CSV file, or an error if the file does not exist.
categories: [functions]
keywords: []
menu:
  docs:
    parent: functions
function:
  aliases: [getCSV]
  returnType: '[]string'
  signatures: [data.GetCSV SEPARATOR PATHPART...]
relatedFunctions:
  - data.GetCSV
  - data.GetJSON
toc: true
---

Given the following directory structure:

```text
my-project/
└── other-files/
    └── pets.csv
```

Access the data with either of the following:

```go-html-template
{{ $data := getCSV "," "other-files/pets.csv" }}
{{ $data := getCSV "," "other-files/" "pets.csv" }}
```

Access remote data with either of the following:

```go-html-template
{{ $data := getCSV "," "https://example.org/pets.csv" }}
{{ $data := getCSV "," "https://example.org/" "pets.csv" }}
```

The resulting data structure is an array of arrays:

```json
[
  ["name","type","breed","age"],
  ["Spot","dog","Collie","3"],
  ["Felix","cat","Malicious","7"]
]
```

## Global resource alternative

Consider using `resources.Get` with [`transform.Unmarshal`] when accessing a global resource.

```text
my-project/
└── assets/
    └── data/
        └── pets.csv
```

```go-html-template
{{ $data := "" }}
{{ $p := "data/pets.csv" }}
{{ with resources.Get $p }}
  {{ $opts := dict "delimiter" "," }}
  {{ $data = . | transform.Unmarshal $opts }}
{{ else }}
  {{ errorf "Unable to get resource %q" $p }}
{{ end }}
```

## Page resource alternative

Consider using `.Resources.Get` with [`transform.Unmarshal`] when accessing a page resource.

```text
my-project/
└── content/
    └── posts/
        └── my-pets/
            ├── index.md
            └── pets.csv
```

```go-html-template
{{ $data := "" }}
{{ $p := "pets.csv" }}
{{ with .Resources.Get $p }}
  {{ $opts := dict "delimiter" "," }}
  {{ $data = . | transform.Unmarshal $opts }}
{{ else }}
  {{ errorf "Unable to get resource %q" $p }}
{{ end }}
```

## Remote resource alternative

Consider using `resources.GetRemote` with [`transform.Unmarshal`] for improved error handling when accessing a remote resource.

```go-html-template
{{ $data := "" }}
{{ $u := "https://example.org/pets.csv" }}
{{ with resources.GetRemote $u }}
  {{ with .Err }}
    {{ errorf "%s" . }}
  {{ else }}
    {{ $opts := dict "delimiter" "," }}
    {{ $data = . | transform.Unmarshal $opts }}
  {{ end }}
{{ else }}
  {{ errorf "Unable to get remote resource %q" $u }}
{{ end }}
```

[`transform.Unmarshal`]: /functions/transform/unmarshal