From 85494832cd90e9e283638bee8e14185aef384672 Mon Sep 17 00:00:00 2001 From: Aleksandr Zelenin Date: Sat, 4 Jun 2022 22:38:40 +0300 Subject: [PATCH] ParseMeta --- datasheet/parser.go | 49 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/datasheet/parser.go b/datasheet/parser.go index 2f823cf..036c867 100644 --- a/datasheet/parser.go +++ b/datasheet/parser.go @@ -13,7 +13,6 @@ func Parse(dataSheetFile *DataSheetFile) (*DataSheet, error) { if err != nil { return nil, err } - defer file.Close() meta, err := parseMeta(file) @@ -29,6 +28,44 @@ func Parse(dataSheetFile *DataSheetFile) (*DataSheet, error) { return dataSheet, nil } +type Meta struct { + UniqueId string + DataType string +} + +func ParseMeta(dataSheetFile *DataSheetFile) (*Meta, error) { + file, err := os.Open(dataSheetFile.GetPath()) + if err != nil { + return nil, err + } + defer file.Close() + + meta, err := parseMeta(file) + if err != nil { + return nil, err + } + + _, err = readNullTerminatedString(file) + if err != nil { + return nil, err + } + + uniqueId, err := readNullTerminatedStringByOffset(file, meta.bodyOffset+meta.uniqueIdOffset) + if err != nil { + return nil, err + } + + dataType, err := readNullTerminatedStringByOffset(file, meta.bodyOffset+meta.dataTypeOffset) + if err != nil { + return nil, err + } + + return &Meta{ + UniqueId: uniqueId, + DataType: dataType, + }, nil +} + func parseMeta(r *os.File) (*meta, error) { var headerSize int32 @@ -244,7 +281,6 @@ func parseMeta(r *os.File) (*meta, error) { } func parseBody(r *os.File, meta *meta) (*DataSheet, error) { - // OUTPUT _, err := readNullTerminatedString(r) if err != nil { return nil, err @@ -380,6 +416,15 @@ type DataSheet struct { Rows [][]string } +func (dataSheet *DataSheet) GetColumnIndexes() map[string]int { + indexes := make(map[string]int, len(dataSheet.Columns)) + for i, column := range dataSheet.Columns { + indexes[column.Name] = i + } + + return indexes +} + type ColumnType int32 const (