xml report
This commit is contained in:
@@ -34,6 +34,11 @@ var extractCmd = &cobra.Command{
|
|||||||
for i, d := range dats {
|
for i, d := range dats {
|
||||||
e.SeprateAuxAndImgData(d, i)
|
e.SeprateAuxAndImgData(d, i)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := e.Report(); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
e.Cleanup()
|
e.Cleanup()
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ var parseCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
e := extract.NewExtractor(¶ms)
|
e := extract.NewExtractor(¶ms)
|
||||||
// p.ParseAuxPlatformWithHead("demo/ref/辅助数据.dat")
|
// 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")
|
"demo/temp/1.xlsx")
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -12,15 +12,15 @@ var (
|
|||||||
ReferenceTime2000 = 946728000
|
ReferenceTime2000 = 946728000
|
||||||
)
|
)
|
||||||
|
|
||||||
func (e Extractor) ExtractAux(auxfile, xlsxfile string) error {
|
func (e *Extractor) ExtractAux(auxfile, xlsxfile string) ([]*AuxFrameHead, []*AuxFocalBox, []*AuxPlatform, error) {
|
||||||
os.Remove(xlsxfile)
|
os.Remove(xlsxfile)
|
||||||
if err := createAuxXlsx(xlsxfile); err != nil {
|
if err := createAuxXlsx(xlsxfile); err != nil {
|
||||||
return err
|
return nil, nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
f, err := excelize.OpenFile(xlsxfile)
|
f, err := excelize.OpenFile(xlsxfile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
@@ -28,9 +28,13 @@ func (e Extractor) ExtractAux(auxfile, xlsxfile string) error {
|
|||||||
data, err := os.ReadFile(auxfile)
|
data, err := os.ReadFile(auxfile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("read aux data from", auxfile, "error:", err.Error())
|
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
|
row := 2
|
||||||
col := 1
|
col := 1
|
||||||
for i := 0; i < len(data); i += 24 + 128 + 512 {
|
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
|
var head AuxFrameHead
|
||||||
head.Decode(data[i : i+24])
|
head.Decode(data[i : i+24])
|
||||||
l0, _ := head.SaveXlsx(f, col, row)
|
l0, _ := head.SaveXlsx(f, col, row)
|
||||||
|
afh = append(afh, &head)
|
||||||
|
|
||||||
var box AuxFocalBox
|
var box AuxFocalBox
|
||||||
box.Decode(data[i+24 : i+24+128])
|
box.Decode(data[i+24 : i+24+128])
|
||||||
l1, _ := box.SaveXlsx(f, col+l0, row)
|
l1, _ := box.SaveXlsx(f, col+l0, row)
|
||||||
|
afb = append(afb, &box)
|
||||||
|
|
||||||
var plat AuxPlatform
|
var plat AuxPlatform
|
||||||
plat.Decode(data[i+24+128 : i+24+128+512])
|
plat.Decode(data[i+24+128 : i+24+128+512])
|
||||||
plat.SaveXlsx(f, col+l0+l1, row)
|
plat.SaveXlsx(f, col+l0+l1, row)
|
||||||
|
aps = append(aps, &plat)
|
||||||
|
|
||||||
row++
|
row++
|
||||||
}
|
}
|
||||||
|
|
||||||
return f.Save()
|
err = f.Save()
|
||||||
|
return afh, afb, aps, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,15 @@ package extract
|
|||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Extractor struct {
|
type Extractor struct {
|
||||||
params *Params
|
params *Params
|
||||||
Clean bool
|
Clean bool
|
||||||
|
|
||||||
|
mutex sync.RWMutex
|
||||||
|
report *Report
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewExtractor(params *Params) *Extractor {
|
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 {
|
if err := os.MkdirAll(filepath.Base(params.LogFile), 0755); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
return &Extractor{params: params, Clean: true}
|
return &Extractor{params: params, Clean: true, report: &Report{SegmentDirRoot: params.OutputPath}}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Extractor) Cleanup() error {
|
func (e *Extractor) Cleanup() error {
|
||||||
|
|||||||
46
extract/report.go
Normal file
46
extract/report.go
Normal 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
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"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])
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user