Patch header parting and formatiing

This commit is contained in:
2022-05-27 11:53:29 +03:00
parent 656eda1f73
commit f14860a486
8 changed files with 91 additions and 29 deletions

View File

@@ -1,9 +1,11 @@
package obiformats
import (
log "github.com/sirupsen/logrus"
"math"
"strings"
log "github.com/sirupsen/logrus"
"git.metabarcoding.org/lecasofts/go/obitools/pkg/obiseq"
"github.com/goccy/go-json"
)
@@ -42,6 +44,16 @@ func _parse_json_header_(header string, annotations obiseq.Annotation) string {
stop++
err := json.Unmarshal([]byte(header)[start:stop], &annotations)
for k, v := range annotations {
switch vt := v.(type) {
case float64 :
if vt == math.Floor(vt) {
annotations[k] = int(vt)
}
}
}
if err != nil {
log.Fatalf("annotation parsing error on %s : %v\n", header, err)
}

View File

@@ -3,6 +3,8 @@ package obiformats
import (
"bytes"
"fmt"
"log"
"math"
"regexp"
"strconv"
"strings"
@@ -251,9 +253,20 @@ func ParseOBIFeatures(text string, annotations obiseq.Annotation) string {
} // End of not string
} // End of not numeric
annotations[key] = value
switch vt := value.(type) {
case float64:
if vt == math.Floor(vt) {
annotations[key] = int(vt)
}
default:
annotations[key] = value
}
d = part[stop:]
if stop < len(part) {
d = part[stop:]
} else {
d = []byte{}
}
//m = __obi_header_key_pattern__.FindIndex(d)
m = __match__key__(d)
}
@@ -280,6 +293,16 @@ func FormatFastSeqOBIHeader(sequence *obiseq.BioSequence) string {
switch t := value.(type) {
case string:
text.WriteString(fmt.Sprintf("%s=%s; ", key, t))
case map[string]int,
map[string]interface{}:
tv, err := json.Marshal(t)
if err != nil {
log.Fatalf("Cannot convert %v value", value)
}
tv = bytes.ReplaceAll(tv, []byte(`"`), []byte("'"))
text.WriteString(fmt.Sprintf("%s=", key))
text.Write(tv)
text.WriteString("; ")
default:
text.WriteString(fmt.Sprintf("%s=%v; ", key, value))
}