Documentation
¶
Index ¶
- type Reader
- func (r *Reader) AcceptShortLines()
- func (r *Reader) AllowMissingFields()
- func (r *Reader) AllowOrderMismatch()
- func (r *Reader) AllowUnknownFields()
- func (r *Reader) NonStrict()
- func (r *Reader) ReadHeader(v any) error
- func (r *Reader) ReadLine(v any) (bool, error)
- func (r *Reader) RequiredFields(fields ...string)
- func (r *Reader) Strict()
- func (r *Reader) Unmarshal(line []string, v any) error
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 NewStringReader ¶
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 (*Reader) ReadLine ¶
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 ¶
if set, the reader accepts headers missing any fields except for these