xml report

This commit is contained in:
nuknal
2024-05-22 11:31:08 +08:00
parent 0634b0106e
commit eb6e0bc95a
6 changed files with 93 additions and 8 deletions

View File

@@ -34,6 +34,11 @@ var extractCmd = &cobra.Command{
for i, d := range dats {
e.SeprateAuxAndImgData(d, i)
}
if err := e.Report(); err != nil {
panic(err)
}
e.Cleanup()
return

View File

@@ -21,7 +21,7 @@ var parseCmd = &cobra.Command{
}
e := extract.NewExtractor(&params)
// p.ParseAuxPlatformWithHead("demo/ref/辅助数据.dat")
err := e.ExtractAux("demo/output/051622/SJY01_PMS_20240516_101236_051622_096.AUX",
_, _, _, err := e.ExtractAux("demo/output/051622/SJY01_PMS_20240516_101236_051622_096.AUX",
"demo/temp/1.xlsx")
if err != nil {

View File

@@ -12,15 +12,15 @@ var (
ReferenceTime2000 = 946728000
)
func (e Extractor) ExtractAux(auxfile, xlsxfile string) error {
func (e *Extractor) ExtractAux(auxfile, xlsxfile string) ([]*AuxFrameHead, []*AuxFocalBox, []*AuxPlatform, error) {
os.Remove(xlsxfile)
if err := createAuxXlsx(xlsxfile); err != nil {
return err
return nil, nil, nil, err
}
f, err := excelize.OpenFile(xlsxfile)
if err != nil {
return err
return nil, nil, nil, err
}
defer f.Close()
@@ -28,9 +28,13 @@ func (e Extractor) ExtractAux(auxfile, xlsxfile string) error {
data, err := os.ReadFile(auxfile)
if err != nil {
log.Println("read aux data from", auxfile, "error:", err.Error())
return err
return nil, nil, nil, err
}
var afh []*AuxFrameHead
var afb []*AuxFocalBox
var aps []*AuxPlatform
row := 2
col := 1
for i := 0; i < len(data); i += 24 + 128 + 512 {
@@ -40,17 +44,21 @@ func (e Extractor) ExtractAux(auxfile, xlsxfile string) error {
var head AuxFrameHead
head.Decode(data[i : i+24])
l0, _ := head.SaveXlsx(f, col, row)
afh = append(afh, &head)
var box AuxFocalBox
box.Decode(data[i+24 : i+24+128])
l1, _ := box.SaveXlsx(f, col+l0, row)
afb = append(afb, &box)
var plat AuxPlatform
plat.Decode(data[i+24+128 : i+24+128+512])
plat.SaveXlsx(f, col+l0+l1, row)
aps = append(aps, &plat)
row++
}
return f.Save()
err = f.Save()
return afh, afb, aps, err
}

View File

@@ -3,11 +3,15 @@ package extract
import (
"os"
"path/filepath"
"sync"
)
type Extractor struct {
params *Params
Clean bool
mutex sync.RWMutex
report *Report
}
func NewExtractor(params *Params) *Extractor {
@@ -20,7 +24,7 @@ func NewExtractor(params *Params) *Extractor {
if err := os.MkdirAll(filepath.Base(params.LogFile), 0755); err != nil {
panic(err)
}
return &Extractor{params: params, Clean: true}
return &Extractor{params: params, Clean: true, report: &Report{SegmentDirRoot: params.OutputPath}}
}
func (e *Extractor) Cleanup() error {

46
extract/report.go Normal file
View File

@@ -0,0 +1,46 @@
package extract
import (
"encoding/xml"
"os"
"path/filepath"
)
type Report struct {
XMLName xml.Name `xml:"report"`
SegmentDirRoot string `xml:"segmentDirRoot"`
Segments []Segment `xml:"segments>segment"`
}
type XMLTime struct {
TimeZone string `xml:"timeZone,attr"`
Value string `xml:",chardata"`
}
type Segment struct {
Id string `xml:"segmentId"`
Aux string `xml:"aux"`
Pan string `xml:"pan"`
Mss string `xml:"mss"`
StartTime XMLTime `xml:"startTime"`
EndTime XMLTime `xml:"endTime"`
Meta string `xml:"meta"`
}
func (e *Extractor) Report() error {
os.MkdirAll(filepath.Dir(e.params.Report), 0755)
f, err := os.Create(e.params.Report)
if err != nil {
return err
}
defer f.Close()
data, err := xml.MarshalIndent(e.report, " ", " ")
if err != nil {
return err
}
_, err = f.Write(data)
return err
}

View File

@@ -6,6 +6,7 @@ import (
"fmt"
"math"
"os"
"path/filepath"
"strings"
"time"
@@ -198,7 +199,28 @@ func (e *Extractor) SeprateAuxAndImgData(dataFile string, segmentIndex int) erro
lw.ws[AUX].w.Write(platAux[i*512 : (i+1)*512])
}
e.ExtractAux(lw.ws[AUX].name, lw.ws[AUX].name+".xlsx")
_, _, aps, err := e.ExtractAux(lw.ws[AUX].name, lw.ws[AUX].name+".xlsx")
if err != nil {
return err
}
e.mutex.Lock()
defer e.mutex.Unlock()
seg := Segment{
Pan: lw.ws[PAN_RAW].name,
Mss: lw.ws[MSS_RAW].name,
Aux: lw.ws[AUX].name,
Id: strings.Split(filepath.Base(lw.ws[AUX].name), ".")[0],
StartTime: XMLTime{
TimeZone: "UTC",
Value: time.Unix(int64(aps[0].UTCTimeSec)+int64(ReferenceTime2000), int64(aps[0].Microsecond)*1000).UTC().Format(time.RFC3339),
},
EndTime: XMLTime{
TimeZone: "UTC",
Value: time.Unix(int64(aps[len(aps)-1].UTCTimeSec)+int64(ReferenceTime2000), int64(aps[len(aps)-1].Microsecond)*1000).UTC().Format(time.RFC3339),
},
}
e.report.Segments = append(e.report.Segments, seg)
return nil
}