csv

package
v0.0.0-...-e232ce8 Latest Latest
Warning

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

Go to latest
Published: Dec 17, 2025 License: GPL-3.0 Imports: 7 Imported by: 0

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Reader

type Reader struct {
	//inner          *csv.Reader
	CaseSensHeader bool
	// contains filtered or unexported fields
}

Reader struct

func NewFileReader

func NewFileReader(fName string, separator string) (*Reader, error)

func NewReader

func NewReader(source []string, separator string) *Reader

func NewStringReader

func NewStringReader(source string, separator string) *Reader

func (*Reader) AcceptShortLines

func (r *Reader) AcceptShortLines()

if set, the parser will accept input lines with fewer columns than the header (is the last column is empty, some converters will skip it, hence this method could be useful)

func (*Reader) AllowMissingFields

func (r *Reader) AllowMissingFields()

AllowMissingFields allows missing fields in header

func (*Reader) AllowOrderMismatch

func (r *Reader) AllowOrderMismatch()

AllowOrderMismatch allows field order to mismatch between struct and header

func (*Reader) AllowUnknownFields

func (r *Reader) AllowUnknownFields()

AllowUnknownFields allows unknown fields in header

func (*Reader) NonStrict

func (r *Reader) NonStrict()

NonStrict allows unknown fields, missing fields, and field order mismatch

func (*Reader) ReadHeader

func (r *Reader) ReadHeader(v any) error

func (*Reader) ReadLine

func (r *Reader) ReadLine(v any) (bool, error)

ReadLine reads the next line from the input data Returns bool, error - bool is true if a line was read; false if we were at the end of the file

Example (AllowOrderMismatch)
var err error
var source = `origLang	country	orth	exonym	priority	checked	comment
GBR	eng	The Thames	Themsen	4	true	todo
BEL	fre	Bruxelles	B"ryssel"	3	false	`

var separator = "\t"
var reader = NewStringReader(source, separator)
reader.AllowOrderMismatch()
var header entry
err = reader.ReadHeader(&header)
if err != nil {
	log.Printf("Got error from ReadHeader: %v", err)
	return
}
res := []entry{}
for {
	var e entry
	hasNext, err := reader.ReadLine(&e)
	if err != nil {
		log.Printf("Got error from Read: %v", err)
		return
	}
	if !hasNext {
		break
	}
	res = append(res, e)
}
for _, e := range res {
	bts, err := json.Marshal(e)
	if err != nil {
		log.Printf("Got error from json.Marshal: %v", err)
	}
	fmt.Println(string(bts))
}
Output:

{"Country":"eng","OrigLang":"GBR","Orth":"The Thames","Exonym":"Themsen","Priority":4,"Checked":true,"Comment":"todo"}
{"Country":"fre","OrigLang":"BEL","Orth":"Bruxelles","Exonym":"B\"ryssel\"","Priority":3,"Checked":false,"Comment":""}
Example (NonStrict)
var err error
var source = `origLang	country	orth	exonym	priority	template	comment
GBR	eng	The Thames	Themsen	4	tmpl1	todo
BEL	fre	Bruxelles	Bryssel	3	tmpl2	`

var separator = "\t"
var reader = NewStringReader(source, separator)
reader.NonStrict()
var header entry
err = reader.ReadHeader(&header)
if err != nil {
	log.Printf("Got error from ReadHeader: %v", err)
	return
}
res := []entry{}
for {
	var e entry
	hasNext, err := reader.ReadLine(&e)
	if err != nil {
		log.Printf("Got error from Read: %v", err)
		return
	}
	if !hasNext {
		break
	}
	res = append(res, e)
}
for _, e := range res {
	bts, err := json.Marshal(e)
	if err != nil {
		log.Printf("Got error from json.Marshal: %v", err)
	}
	fmt.Println(string(bts))
}
Output:

{"Country":"eng","OrigLang":"GBR","Orth":"The Thames","Exonym":"Themsen","Priority":4,"Checked":false,"Comment":"todo"}
{"Country":"fre","OrigLang":"BEL","Orth":"Bruxelles","Exonym":"Bryssel","Priority":3,"Checked":false,"Comment":""}
Example (Strict)
var err error
var source = `country	origLang	orth	exonym	priority	checked	comment
GBR	eng	The Thames	Themsen	4	true	todo
BEL	fre	Bruxelles	Bryssel"	3	false	`

var separator = "\t"
var reader = NewStringReader(source, separator)
reader.Strict()
var header entry
err = reader.ReadHeader(&header)
if err != nil {
	log.Printf("Got error from ReadHeader: %v", err)
	return
}
res := []entry{}
for {
	var e entry
	hasNext, err := reader.ReadLine(&e)
	if err != nil {
		log.Printf("Got error from Read: %v", err)
		return
	}
	if !hasNext {
		break
	}
	res = append(res, e)
}
for _, e := range res {
	bts, err := json.Marshal(e)
	if err != nil {
		log.Printf("Got error from json.Marshal: %v", err)
	}
	fmt.Println(string(bts))
}
Output:

{"Country":"GBR","OrigLang":"eng","Orth":"The Thames","Exonym":"Themsen","Priority":4,"Checked":true,"Comment":"todo"}
{"Country":"BEL","OrigLang":"fre","Orth":"Bruxelles","Exonym":"Bryssel\"","Priority":3,"Checked":false,"Comment":""}
Example (Strict_Tags)
var err error
var source = `country	origLang	orth	exonym	Priority	checked	translator comment
GBR	eng	The Thames	Themsen	4	true	todo
BEL	fre	Bruxelles	Brysseles	3	false	`

var separator = "\t"
var reader = NewStringReader(source, separator)
reader.Strict()
reader.CaseSensHeader = true
var header entryWithTagsCaseSens
err = reader.ReadHeader(&header)
if err != nil {
	log.Printf("Got error from ReadHeader: %v", err)
	return
}
res := []entryWithTagsCaseSens{}
for {
	var e entryWithTagsCaseSens
	hasNext, err := reader.ReadLine(&e)
	if err != nil {
		log.Printf("Got error from Read: %v", err)
		return
	}
	if !hasNext {
		break
	}
	res = append(res, e)
}
for _, e := range res {
	bts, err := json.Marshal(e)
	if err != nil {
		log.Printf("Got error from json.Marshal: %v", err)
	}
	fmt.Println(string(bts))
}
Output:

{"Country":"GBR","OrigLang":"eng","Orth":"The Thames","Exonym":"Themsen","Priority":4,"Checked":true,"Comment":"todo"}
{"Country":"BEL","OrigLang":"fre","Orth":"Bruxelles","Exonym":"Brysseles","Priority":3,"Checked":false,"Comment":""}

func (*Reader) RequiredFields

func (r *Reader) RequiredFields(fields ...string)

if set, the reader accepts headers missing any fields except for these

func (*Reader) Strict

func (r *Reader) Strict()

Strict disallows unknown fields, missing fields, and field order mismatch

func (*Reader) Unmarshal

func (r *Reader) Unmarshal(line []string, v any) error

Jump to

Keyboard shortcuts

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