提交 37d195d8 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

new features for 1.1

上级 6b4fbabb
......@@ -4,8 +4,15 @@ author: zentao
version: 1.0
fields:
- field: field_use_instance # 引用default.xml里的嵌套字段
length: 16
- field: field_common # 覆盖default.yaml中的定义,使用参数-d demo/default.yaml -c demo/test.yaml执行。
#range: a-z # a,b,c...,不设置默认使用原始配置
prefix: "[" # 复写前缀
postfix: "]" # 复写后缀
\ No newline at end of file
- field: field_with_children
prefix: " [" # 复写前缀
postfix: "] " # 复写后缀
length: 40
- field: field_loop # 引用default.xml里的自循环的字段
prefix: " [" # 复写前缀
postfix: "]" # 特殊字符加引号,否则无法解析
length: 8
package gen
import (
"encoding/json"
fileUtils "github.com/easysoft/zendata/src/utils/file"
"github.com/easysoft/zendata/src/utils/vari"
"strings"
)
const (
)
func Analyse(output, fieldsToExportStr, configFile, defaultFile string) {
fieldsToExport := make([]string, 0)
if fieldsToExportStr != "" {
fieldsToExport = strings.Split(fieldsToExportStr, ",")
}
vari.Def = LoadConfigDef(defaultFile, configFile, &fieldsToExport)
vari.Res = LoadResDef(fieldsToExport)
data := fileUtils.ReadFile(output)
mapArr := LinesToMap(data, fieldsToExport)
jsonObj, _ := json.Marshal(mapArr)
respJson := string(jsonObj)
path := output[:strings.LastIndex(output, ".")] + ".json"
fileUtils.WriteFile(path, respJson)
}
func LinesToMap(str string, fieldsToExport []string) (ret []map[string]string) {
start := 0
if vari.WithHead {
start = 1
}
ret = []map[string]string{}
for index, line := range strings.Split(str, "\n") {
if index < start {
continue
}
rowMap := map[string]string{}
left := line
for j, field := range vari.Def.Fields {
col := left[:field.Length]
rowMap[fieldsToExport[j]] = col
left = left[field.Length:]
}
ret = append(ret, rowMap)
}
return
}
\ No newline at end of file
......@@ -49,12 +49,13 @@ func LoadConfigDef(defaultFile, configFile string, fieldsToExport *[]string) mod
}
}
MergerDefine(&defaultDef, &configDef)
mergerDefine(&defaultDef, &configDef)
orderFields(&defaultDef, *fieldsToExport)
return defaultDef
}
func MergerDefine(defaultDef, configDef *model.DefData) {
func mergerDefine(defaultDef, configDef *model.DefData) {
defaultFieldMap := map[string]*model.DefField{}
configFieldMap := map[string]*model.DefField{}
sortedKeys := make([]string, 0)
......@@ -88,6 +89,20 @@ func MergerDefine(defaultDef, configDef *model.DefData) {
}
}
func orderFields(defaultDef *model.DefData, fieldsToExport []string) {
mp := map[string]model.DefField{}
for _, field := range defaultDef.Fields {
mp[field.Field] = field
}
fields := make([]model.DefField, 0)
for _, fieldName := range fieldsToExport {
fields = append(fields, mp[fieldName])
}
defaultDef.Fields = fields
}
func CreatePathToFieldMap(field *model.DefField, mp map[string]*model.DefField, keys *[]string) {
if field.Path == "" { // root
field.Path = field.Field
......@@ -149,6 +164,9 @@ func CopyField(child model.DefField, parent *model.DefField) {
if child.Precision != 0 {
(*parent).Precision = child.Precision
}
if child.Length != 0 {
(*parent).Length = child.Length
}
}
func ReplaceSpecialChars(bytes []byte) []byte {
......
......@@ -7,6 +7,7 @@ import (
fileUtils "github.com/easysoft/zendata/src/utils/file"
stringUtils "github.com/easysoft/zendata/src/utils/string"
"github.com/easysoft/zendata/src/utils/vari"
"github.com/mattn/go-runewidth"
"strconv"
"strings"
)
......@@ -227,5 +228,9 @@ func GenerateFieldValWithFix(field model.DefField, fieldValue model.FieldValue,
loopStr = prefix + loopStr + postfix
}
if field.Length > runewidth.StringWidth(loopStr) {
loopStr = loopStr + strings.Repeat(" ", field.Length - runewidth.StringWidth(loopStr))
}
return loopStr
}
\ No newline at end of file
......@@ -34,7 +34,7 @@ type DefData struct {
type DefField struct {
FieldBase `yaml:",inline"`
Fields []DefField `yaml:"fields,flow"`
Length int `yaml:"length"`
Path string
}
......@@ -68,7 +68,6 @@ type FieldSimple struct {
Format string `yaml:"format"`
}
type FieldValue struct {
FieldBase `yaml:",inline"`
Field string `yaml:"field"`
......
......@@ -4,6 +4,7 @@ import (
"flag"
"fmt"
"github.com/easysoft/zendata/src/action"
"github.com/easysoft/zendata/src/gen"
"github.com/easysoft/zendata/src/service"
commonUtils "github.com/easysoft/zendata/src/utils/common"
configUtils "github.com/easysoft/zendata/src/utils/config"
......@@ -34,6 +35,7 @@ var (
output string
table string
format = constant.FormatText
analyse string
listRes bool
viewRes string
......@@ -91,6 +93,9 @@ func main() {
flagSet.StringVar(&vari.HeadSep, "H", "", "")
flagSet.StringVar(&vari.HeadSep, "human", "", "")
flagSet.StringVar(&analyse, "a", "", "")
flagSet.StringVar(&analyse, "analyse", "", "")
flagSet.IntVar(&vari.Length, "W", 0, "")
flagSet.IntVar(&vari.Length, "width", 0, "")
flagSet.StringVar(&vari.LeftPad, "L", "", "")
......@@ -134,6 +139,9 @@ func main() {
} else if md5 != "" {
service.AddMd5(md5, salt)
return
} else if analyse != "" {
gen.Analyse(output, fields, analyse, defaultFile)
return
}
if vari.Ip != "" || vari.Port != 0 {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册