csvparse

package module
v0.3.1 Latest Latest
Warning

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

Go to latest
Published: Aug 11, 2024 License: MIT Imports: 3 Imported by: 0

README

csvparse

A Go library inspired by Python's csv package to parse CSV files beyond simple record slices.

Docs

Docs can be found here.

Documentation

Index

Examples

Constants

This section is empty.

Variables

View Source
var (
	ErrHeaderCountDoesNotMatchRowCount  = errors.New("header and row count must be identical")
	ErrRowCountIsSmallerThanTargetCount = errors.New("no more targets can be given than the available columns")
)

Functions

This section is empty.

Types

type DictReader

type DictReader struct {
	// contains filtered or unexported fields
}

DictReader allows reading from csv.Reader for CSV files that have a header row. It will map each row to a map[string]string using the headings as the map keys.

func NewDictReader

func NewDictReader(r *csv.Reader) *DictReader

func (*DictReader) Headers added in v0.2.0

func (r *DictReader) Headers() ([]string, error)

Headers returns the header row.

Example
package main

import (
	"encoding/csv"
	"fmt"
	"strings"

	csvreader "github.com/Dan6erbond/csvparse"
)

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

	dr := csvreader.NewDictReader(r)

	headers, _ := dr.Headers()

	fmt.Println(headers)

}
Output:

[first_name last_name username]

func (*DictReader) Read

func (r *DictReader) Read() (map[string]string, error)

Read returns the next line from the *csv.Reader as a map. Just like csv.Reader.Read() it will return an io.EOF if no more lines are found.

Example
package main

import (
	"encoding/csv"
	"fmt"
	"strings"

	csvreader "github.com/Dan6erbond/csvparse"
)

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

	dr := csvreader.NewDictReader(r)

	row, _ := dr.Read()

	fmt.Println(row["first_name"])

}
Output:

Rob

func (*DictReader) ReadAll

func (r *DictReader) ReadAll() ([]map[string]string, error)

Read returns the next line from the *csv.Reader as a slice of maps.

Example
package main

import (
	"encoding/csv"
	"fmt"
	"strings"

	csvreader "github.com/Dan6erbond/csvparse"
)

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

	dr := csvreader.NewDictReader(r)

	records, _ := dr.ReadAll()

	fmt.Println(records[2]["first_name"])

}
Output:

Robert

type ScanReader added in v0.3.0

type ScanReader struct {
	// contains filtered or unexported fields
}

func NewScanReader added in v0.3.0

func NewScanReader(reader *csv.Reader, opts ...ScanReaderOption) *ScanReader

func (*ScanReader) Scan added in v0.3.0

func (sr *ScanReader) Scan(tgts ...*string) error
Example
package main

import (
	"encoding/csv"
	"fmt"
	"strings"

	"github.com/Dan6erbond/csvparse"
)

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

	sr := csvparse.NewScanReader(r, csvparse.WithHeaderRow)

	var (
		fn string
		ln string
		un string
	)

	sr.Scan(&fn, &ln, &un)

	fmt.Println(fn, ln, un)

}
Output:

Rob Pike rob

type ScanReaderOption added in v0.3.0

type ScanReaderOption = func(sr *ScanReader)
var (
	WithHeaderRow ScanReaderOption = func(sr *ScanReader) {
		sr.headerRow = true
	}
)

Jump to

Keyboard shortcuts

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