package reader import ( "encoding/json" "io" "regexp" "git.wecise.com/wecise/cgimport/schema" ) type TXTBlockReader struct { *LineReader filetype schema.FileType firstline string nextline string } func NewTXTBlockReader(filename string, filetype schema.FileType, reader io.Reader) *TXTBlockReader { return &TXTBlockReader{ LineReader: NewLineReader(filename, reader), filetype: filetype, } } var regrecord = regexp.MustCompile(`^(?:[\.\/a-zA-Z0-9_]*:)?V:(\{.*)`) func (br *TXTBlockReader) ReadBlock() (block map[string]any, line string, linecount int, err error) { eof := false line = br.nextline for { for { br.nextline, linecount, eof, err = br.ReadLine() if err != nil { return } if br.nextline == "" && eof { if line == "" { return } break } if regrecord.MatchString(br.nextline) { break } line += br.nextline } linecount-- if !regrecord.MatchString(line) { if linecount == 1 { br.firstline = line } line = br.nextline continue } line = regrecord.ReplaceAllString(line, "$1") block = map[string]any{} err = json.Unmarshal([]byte(line), &block) if err != nil { return } return } }