package reader import ( "encoding/json" "io" "regexp" ) type TXTBlockReader struct { *LineReader nextline string } func NewTXTBlockReader(filename string, reader io.Reader) *TXTBlockReader { return &TXTBlockReader{ LineReader: NewLineReader(filename, reader), } } var regrecord = regexp.MustCompile(`^(?:[\.\/a-zA-Z0-9_]*:)?V:(\{.*)`) func (br *TXTBlockReader) ReadBlock() (block map[string]any, 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) { line = br.nextline continue } line = regrecord.ReplaceAllString(line, "$1") block = map[string]any{} err = json.Unmarshal([]byte(line), &block) if err != nil { return } return } }