1// Copyright 2015 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package csv_test
6
7import (
8	"encoding/csv"
9	"fmt"
10	"io"
11	"log"
12	"os"
13	"strings"
14)
15
16func ExampleReader() {
17	in := `first_name,last_name,username
18"Rob","Pike",rob
19Ken,Thompson,ken
20"Robert","Griesemer","gri"
21`
22	r := csv.NewReader(strings.NewReader(in))
23
24	for {
25		record, err := r.Read()
26		if err == io.EOF {
27			break
28		}
29		if err != nil {
30			log.Fatal(err)
31		}
32
33		fmt.Println(record)
34	}
35	// Output:
36	// [first_name last_name username]
37	// [Rob Pike rob]
38	// [Ken Thompson ken]
39	// [Robert Griesemer gri]
40}
41
42// This example shows how csv.Reader can be configured to handle other
43// types of CSV files.
44func ExampleReader_options() {
45	in := `first_name;last_name;username
46"Rob";"Pike";rob
47# lines beginning with a # character are ignored
48Ken;Thompson;ken
49"Robert";"Griesemer";"gri"
50`
51	r := csv.NewReader(strings.NewReader(in))
52	r.Comma = ';'
53	r.Comment = '#'
54
55	records, err := r.ReadAll()
56	if err != nil {
57		log.Fatal(err)
58	}
59
60	fmt.Print(records)
61	// Output:
62	// [[first_name last_name username] [Rob Pike rob] [Ken Thompson ken] [Robert Griesemer gri]]
63}
64
65func ExampleReader_ReadAll() {
66	in := `first_name,last_name,username
67"Rob","Pike",rob
68Ken,Thompson,ken
69"Robert","Griesemer","gri"
70`
71	r := csv.NewReader(strings.NewReader(in))
72
73	records, err := r.ReadAll()
74	if err != nil {
75		log.Fatal(err)
76	}
77
78	fmt.Print(records)
79	// Output:
80	// [[first_name last_name username] [Rob Pike rob] [Ken Thompson ken] [Robert Griesemer gri]]
81}
82
83func ExampleWriter() {
84	records := [][]string{
85		{"first_name", "last_name", "username"},
86		{"Rob", "Pike", "rob"},
87		{"Ken", "Thompson", "ken"},
88		{"Robert", "Griesemer", "gri"},
89	}
90
91	w := csv.NewWriter(os.Stdout)
92
93	for _, record := range records {
94		if err := w.Write(record); err != nil {
95			log.Fatalln("error writing record to csv:", err)
96		}
97	}
98
99	// Write any buffered data to the underlying writer (standard output).
100	w.Flush()
101
102	if err := w.Error(); err != nil {
103		log.Fatal(err)
104	}
105	// Output:
106	// first_name,last_name,username
107	// Rob,Pike,rob
108	// Ken,Thompson,ken
109	// Robert,Griesemer,gri
110}
111
112func ExampleWriter_WriteAll() {
113	records := [][]string{
114		{"first_name", "last_name", "username"},
115		{"Rob", "Pike", "rob"},
116		{"Ken", "Thompson", "ken"},
117		{"Robert", "Griesemer", "gri"},
118	}
119
120	w := csv.NewWriter(os.Stdout)
121	w.WriteAll(records) // calls Flush internally
122
123	if err := w.Error(); err != nil {
124		log.Fatalln("error writing csv:", err)
125	}
126	// Output:
127	// first_name,last_name,username
128	// Rob,Pike,rob
129	// Ken,Thompson,ken
130	// Robert,Griesemer,gri
131}
132