|  | // Copyright 2015 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package csv_test | 
|  |  | 
|  | import ( | 
|  | "encoding/csv" | 
|  | "fmt" | 
|  | "io" | 
|  | "log" | 
|  | "os" | 
|  | "strings" | 
|  | ) | 
|  |  | 
|  | func ExampleReader() { | 
|  | in := `first_name,last_name,username | 
|  | "Rob","Pike",rob | 
|  | Ken,Thompson,ken | 
|  | "Robert","Griesemer","gri" | 
|  | ` | 
|  | r := csv.NewReader(strings.NewReader(in)) | 
|  |  | 
|  | for { | 
|  | record, err := r.Read() | 
|  | if err == io.EOF { | 
|  | break | 
|  | } | 
|  | if err != nil { | 
|  | log.Fatal(err) | 
|  | } | 
|  |  | 
|  | fmt.Println(record) | 
|  | } | 
|  | // Output: | 
|  | // [first_name last_name username] | 
|  | // [Rob Pike rob] | 
|  | // [Ken Thompson ken] | 
|  | // [Robert Griesemer gri] | 
|  | } | 
|  |  | 
|  | // This example shows how csv.Reader can be configured to handle other | 
|  | // types of CSV files. | 
|  | func ExampleReader_options() { | 
|  | in := `first_name;last_name;username | 
|  | "Rob";"Pike";rob | 
|  | # lines beginning with a # character are ignored | 
|  | Ken;Thompson;ken | 
|  | "Robert";"Griesemer";"gri" | 
|  | ` | 
|  | r := csv.NewReader(strings.NewReader(in)) | 
|  | r.Comma = ';' | 
|  | r.Comment = '#' | 
|  |  | 
|  | records, err := r.ReadAll() | 
|  | if err != nil { | 
|  | log.Fatal(err) | 
|  | } | 
|  |  | 
|  | fmt.Print(records) | 
|  | // Output: | 
|  | // [[first_name last_name username] [Rob Pike rob] [Ken Thompson ken] [Robert Griesemer gri]] | 
|  | } | 
|  |  | 
|  | func ExampleReader_ReadAll() { | 
|  | in := `first_name,last_name,username | 
|  | "Rob","Pike",rob | 
|  | Ken,Thompson,ken | 
|  | "Robert","Griesemer","gri" | 
|  | ` | 
|  | r := csv.NewReader(strings.NewReader(in)) | 
|  |  | 
|  | records, err := r.ReadAll() | 
|  | if err != nil { | 
|  | log.Fatal(err) | 
|  | } | 
|  |  | 
|  | fmt.Print(records) | 
|  | // Output: | 
|  | // [[first_name last_name username] [Rob Pike rob] [Ken Thompson ken] [Robert Griesemer gri]] | 
|  | } | 
|  |  | 
|  | func ExampleWriter() { | 
|  | records := [][]string{ | 
|  | {"first_name", "last_name", "username"}, | 
|  | {"Rob", "Pike", "rob"}, | 
|  | {"Ken", "Thompson", "ken"}, | 
|  | {"Robert", "Griesemer", "gri"}, | 
|  | } | 
|  |  | 
|  | w := csv.NewWriter(os.Stdout) | 
|  |  | 
|  | for _, record := range records { | 
|  | if err := w.Write(record); err != nil { | 
|  | log.Fatalln("error writing record to csv:", err) | 
|  | } | 
|  | } | 
|  |  | 
|  | // Write any buffered data to the underlying writer (standard output). | 
|  | w.Flush() | 
|  |  | 
|  | if err := w.Error(); err != nil { | 
|  | log.Fatal(err) | 
|  | } | 
|  | // Output: | 
|  | // first_name,last_name,username | 
|  | // Rob,Pike,rob | 
|  | // Ken,Thompson,ken | 
|  | // Robert,Griesemer,gri | 
|  | } | 
|  |  | 
|  | func ExampleWriter_WriteAll() { | 
|  | records := [][]string{ | 
|  | {"first_name", "last_name", "username"}, | 
|  | {"Rob", "Pike", "rob"}, | 
|  | {"Ken", "Thompson", "ken"}, | 
|  | {"Robert", "Griesemer", "gri"}, | 
|  | } | 
|  |  | 
|  | w := csv.NewWriter(os.Stdout) | 
|  | w.WriteAll(records) // calls Flush internally | 
|  |  | 
|  | if err := w.Error(); err != nil { | 
|  | log.Fatalln("error writing csv:", err) | 
|  | } | 
|  | // Output: | 
|  | // first_name,last_name,username | 
|  | // Rob,Pike,rob | 
|  | // Ken,Thompson,ken | 
|  | // Robert,Griesemer,gri | 
|  | } |