mirror of
https://codeberg.org/scip/tablizer.git
synced 2025-12-17 20:41:03 +01:00
38 lines
917 B
Go
38 lines
917 B
Go
package msgp
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func Clue2Field(name string, clue string, zid int64) string {
|
|
if zid >= 0 {
|
|
return fmt.Sprintf("%s_zid%02d_%s", name, zid, clue)
|
|
}
|
|
// handle the missing zid, and don't write -1 as the zid.
|
|
return fmt.Sprintf("%s__%s", name, clue)
|
|
}
|
|
|
|
func Field2Clue(fieldname string) (name string, clue string, zid int64, err error) {
|
|
parts := strings.Split(fieldname, "_")
|
|
n := len(parts)
|
|
if n < 3 {
|
|
err = fmt.Errorf("too few underscore (expect at least two) in fieldname '%s'", fieldname)
|
|
return
|
|
}
|
|
clue = parts[n-1]
|
|
if strings.HasPrefix(parts[n-2], "zid") {
|
|
tmp, err2 := strconv.Atoi(parts[n-2][3:])
|
|
if err2 == nil {
|
|
zid = int64(tmp)
|
|
} else {
|
|
err = fmt.Errorf("problem parsing out _zid field in fieldname '%s': '%v'", fieldname, err2)
|
|
return
|
|
}
|
|
}
|
|
used := len(parts[n-1]) + len(parts[n-2]) + 2
|
|
name = fieldname[:len(fieldname)-used]
|
|
return
|
|
}
|