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 } }