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  }