csv

package module
v1.20.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 21, 2020 License: MIT Imports: 2 Imported by: 1

README

csv GoDoc Go Report Card

Go CSV reader like Python's DictReader.

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type FieldReader

type FieldReader struct {
	// Comma is the field delimiter.
	// It is set to comma (',') by NewReader.
	Comma rune
	// Comment, if not 0, is the comment character. Lines beginning with the
	// Comment character without preceding whitespace are ignored.
	// With leading whitespace the Comment character becomes part of the
	// field, even if TrimLeadingSpace is true.
	Comment rune
	// If LazyQuotes is true, a quote may appear in an unquoted field and a
	// non-doubled quote may appear in a quoted field.
	LazyQuotes bool
	// If TrimLeadingSpace is true, leading white space in a field is ignored.
	// This is done even if the field delimiter, Comma, is white space.
	TrimLeadingSpace bool
	// FieldNames are the names for the fields on each row. If FieldNames is
	// left nil, it will be  set to the first row read.
	FieldNames []string
	// contains filtered or unexported fields
}

FieldReader is a wrapper around encoding/csv.Reader that allows reference to columns in a CSV source by field names. Its usage is like bufio.Scanner.

Example
package main

import (
	"fmt"
	"log"
	"strings"

	"github.com/carlmjohnson/csv"
)

func main() {
	in := `first_name,last_name,username
"Rob","Pike",rob
Ken,Thompson,ken
"Robert","Griesemer","gri"
`
	r := csv.NewFieldReader(strings.NewReader(in))

	for r.Scan() {
		fmt.Println(r.Field("username"))
	}

	if err := r.Err(); err != nil {
		log.Fatal(err)
	}

}
Output:

rob
ken
gri
Example (Options)

This example shows how csv.FieldReader can be configured to handle other types of CSV files.

package main

import (
	"fmt"
	"log"
	"strings"

	"github.com/carlmjohnson/csv"
)

func main() {
	in := `first_name;last_name;username
"Rob";"Pike";rob
# lines beginning with a # character are ignored
Ken;Thompson;ken
"Robert";"Griesemer";"gri"
`
	r := csv.NewFieldReader(strings.NewReader(in))
	r.Comma = ';'
	r.Comment = '#'

	for r.Scan() {
		fmt.Println(r.Field("username"))
	}

	if err := r.Err(); err != nil {
		log.Fatal(err)
	}

}
Output:

rob
ken
gri

func NewFieldReader

func NewFieldReader(r io.Reader) *FieldReader

NewFieldReader returns a new FieldReader that reads from r.

func (*FieldReader) Err

func (f *FieldReader) Err() error

Err returns any errors encountered by the FieldReader, except io.EOF, which is not considered an error in normal operation.

func (*FieldReader) Field

func (f *FieldReader) Field(fieldname string) string

Field returns the value in the currently loaded row of the column corresponding to fieldname.

func (*FieldReader) Fields

func (f *FieldReader) Fields() map[string]string

Fields returns a map from fieldnames to values for the current row.

func (*FieldReader) ReadAll

func (f *FieldReader) ReadAll() ([]map[string]string, error)

ReadAll consumes the underlying io.Reader and returns a slice of maps for each row.

func (*FieldReader) Scan

func (f *FieldReader) Scan() bool

Scan loads the next row into the FieldReader. It returns false upon encountering an error in the underlying io.Reader.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL