diff --git a/src/action/generator.go b/src/action/generator.go index 7bc2d27fd3bbfe642526b651370f58f1507dd2cf..5b631557fc85c1573f4a7d282f21d6fd918a3738 100644 --- a/src/action/generator.go +++ b/src/action/generator.go @@ -30,7 +30,6 @@ func Generate(file string, total int, fields string, out string, table string) { Print(rows) } - func Print(rows [][]string) { width := stringUtils.GetNumbWidth(len(rows)) diff --git a/src/gen/generator.go b/src/gen/generator.go index 79adb287632c352c93bc2749b328b26b08d6675a..6d6e3e212c030494946acd4c2d3d6173ce76c6cf 100644 --- a/src/gen/generator.go +++ b/src/gen/generator.go @@ -27,35 +27,55 @@ func Generate(def *model.Definition, total int, fields string, out string, table continue } + if field.Loop == 0 { + field.Loop = 1 + } + prefix := field.Prefix postfix := field.Postfix - indexOfRow = i % len(fieldMap[field.Name]) - if len(rows) == i { rows = append(rows, make([]string, 0)) } - str := "n/a" - val := fieldMap[field.Name][indexOfRow] - switch val.(type) { - case int64: - str = strconv.FormatInt(val.(int64),10) - case float64: - precision := 0 - if field.Precision > 0 { - precision = field.Precision - } - str = strconv.FormatFloat(val.(float64), 'f', precision, 64) - case byte: - str = string(val.(byte)) - default: + loopStr := "" + for j := 0; j < field.Loop; j++ { + if loopStr != "" { + loopStr = loopStr + field.Loopfix + } + str := GetFieldStr(field, fieldMap, indexOfRow) + loopStr = loopStr + str + + indexOfRow++ + if indexOfRow == len(fieldMap[field.Name]) { // no enough + indexOfRow = 0 + } } - rows[i] = append(rows[i], prefix + str + postfix) + rows[i] = append(rows[i], prefix + loopStr + postfix) } } return rows } +func GetFieldStr(field model.Field, fieldMap map[string][]interface{}, indexOfRow int) string { + str := "n/a" + val := fieldMap[field.Name][indexOfRow] + switch val.(type) { + case int64: + str = strconv.FormatInt(val.(int64), 10) + case float64: + precision := 0 + if field.Precision > 0 { + precision = field.Precision + } + str = strconv.FormatFloat(val.(float64), 'f', precision, 64) + case byte: + str = string(val.(byte)) + default: + } + + return str +} + func GenerateFieldArr(field *model.Field, total int, fieldMap map[string][]interface{}) { datatype := strings.TrimSpace(field.Type) if datatype == "" { datatype = "list" } diff --git a/src/model/definition.go b/src/model/definition.go index e03f505f2e8b5d6763f2b11785b09497e8af489f..13501aa4981e03e6ccdb116351b9660185762d3e 100644 --- a/src/model/definition.go +++ b/src/model/definition.go @@ -16,6 +16,8 @@ type Field struct { Range string `yaml:"range"` Prefix string `yaml:"prefix"` Postfix string `yaml:"postfix"` + Loop int `yaml:"loop"` + Loopfix string `yaml:"loopfix"` Expect string `yaml:"expect"` Fields []Field `yaml:"fields,flow"` diff --git a/xdoc/data.yaml b/xdoc/data.yaml index fa9fa9c8c183afda9938d646637bc604d593a1e0..c3609dbd6202cf990764f98e0fb79bf4a9027246 100644 --- a/xdoc/data.yaml +++ b/xdoc/data.yaml @@ -7,9 +7,11 @@ fields: - name: field1 note: 默认的列表类型,通过逗号隔成若干区段。 type: list - range: 1-3,x-z:R,10.01-19.20:R,101,102 + range: 1-3,x-z:R,10.01-19.20:3,101,102,103 prefix: postfix: + loop: 3 + loopfix: "|" expect: 1,2,3...,10,20,21,22...,25,27,29.30 - name: field2 note: 区间可以指定步长。