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