123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package reader
- import (
- "fmt"
- "io"
- "strings"
- "git.wecise.com/wecise/util/merrs"
- )
- type CSVBlockReader struct {
- *LineReader
- csvkeys []string
- }
- func NewCSVBlockReader(filename string, reader io.Reader) *CSVBlockReader {
- return &CSVBlockReader{
- LineReader: NewLineReader(filename, reader),
- }
- }
- func (br *CSVBlockReader) ReadBlock() (block map[string]any, linecount int, err error) {
- var line string
- eof := false
- for {
- line, linecount, eof, err = br.ReadLine()
- if err != nil {
- return
- }
- if linecount == 1 {
- br.csvkeys = strings.Split(line, "^")
- line, linecount, eof, err = br.ReadLine()
- if err != nil {
- return
- }
- }
- if line == "" {
- if eof {
- return
- }
- continue
- }
- values := strings.Split(line, "^")
- if len(values) != len(br.csvkeys) {
- err = merrs.NewError(fmt.Sprint(br.filename, " format error, values count not match keys count, line ", br.linecount))
- return
- }
- block = map[string]any{}
- for i, k := range br.csvkeys {
- block[k] = values[i]
- }
- return
- }
- }
|