|
@@ -2,10 +2,12 @@ package reader
|
|
|
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
+ "fmt"
|
|
|
"io"
|
|
|
"regexp"
|
|
|
|
|
|
"git.wecise.com/wecise/cgimport/schema"
|
|
|
+ "git.wecise.com/wecise/util/logger"
|
|
|
)
|
|
|
|
|
|
type TXTBlockReader struct {
|
|
@@ -22,7 +24,8 @@ func NewTXTBlockReader(filename string, filetype schema.FileType, reader io.Read
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-var regrecord = regexp.MustCompile(`^(?:[\.\/a-zA-Z0-9_]*:)?V:(\{.*)`)
|
|
|
+var regrecordstart = regexp.MustCompile(`^(?:[\.\/a-zA-Z0-9_]*:)?V:(\{.*)`)
|
|
|
+var regrecordend = regexp.MustCompile(`\}\s*$`)
|
|
|
|
|
|
func (br *TXTBlockReader) ReadBlock() (block map[string]any, line string, linecount int, err error) {
|
|
|
eof := false
|
|
@@ -39,20 +42,26 @@ func (br *TXTBlockReader) ReadBlock() (block map[string]any, line string, lineco
|
|
|
}
|
|
|
break
|
|
|
}
|
|
|
- if regrecord.MatchString(br.nextline) {
|
|
|
+ if regrecordend.MatchString(line) {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ if regrecordstart.MatchString(br.nextline) {
|
|
|
break
|
|
|
}
|
|
|
line += br.nextline
|
|
|
}
|
|
|
linecount--
|
|
|
- if !regrecord.MatchString(line) {
|
|
|
+ if !regrecordstart.MatchString(line) || !regrecordend.MatchString(line) {
|
|
|
+ if line != "" {
|
|
|
+ logger.Info(fmt.Sprint("skip non-json line ", br.filename, ":", linecount, " ", line))
|
|
|
+ }
|
|
|
if linecount == 1 {
|
|
|
br.firstline = line
|
|
|
}
|
|
|
line = br.nextline
|
|
|
continue
|
|
|
}
|
|
|
- line = regrecord.ReplaceAllString(line, "$1")
|
|
|
+ line = regrecordstart.ReplaceAllString(line, "$1")
|
|
|
block = map[string]any{}
|
|
|
err = json.Unmarshal([]byte(line), &block)
|
|
|
if err != nil {
|