diff --git a/planner/pce/cs/xlsx.go b/planner/pce/cs/xlsx.go index b81c6a5..b407d41 100644 --- a/planner/pce/cs/xlsx.go +++ b/planner/pce/cs/xlsx.go @@ -104,12 +104,16 @@ func (slf *Xlsx) GetData() [][]pce.DataInfo { } } - for i, field := range slf.GetFields() { - var isIndex = i-1 < slf.GetIndexCount() + for i, field := range fields { + var isIndex = i < slf.GetIndexCount() var value string if valueCell := slf.get(field.Index, y); valueCell != nil { value = valueCell.String() + if isIndex && len(strings.TrimSpace(value)) == 0 { + stop = true + break + } } else if isIndex { stop = true break @@ -118,12 +122,10 @@ func (slf *Xlsx) GetData() [][]pce.DataInfo { if valueCell == nil { break } - if len(fields) > i-1 { - line = append(line, pce.DataInfo{ - DataField: field, - Value: value, - }) - } + line = append(line, pce.DataInfo{ + DataField: field, + Value: value, + }) } if len(line) > 0 { data = append(data, line) diff --git a/planner/pce/tmpls/golang.go b/planner/pce/tmpls/golang.go index f7afb2b..6d0f400 100644 --- a/planner/pce/tmpls/golang.go +++ b/planner/pce/tmpls/golang.go @@ -27,6 +27,7 @@ func (slf *Golang) Render(templates ...*pce.TmplStruct) (string, error) { import ( jsonIter "github.com/json-iterator/go" "github.com/kercylan98/minotaur/utils/log" + "github.com/kercylan98/minotaur/utils/hash" "sync" ) @@ -192,13 +193,22 @@ func (slf *Golang) Render(templates ...*pce.TmplStruct) (string, error) { // GetConfigs 获取所有配置 func GetConfigs() map[Sign]any { - return configs + mutex.Lock() + defer mutex.Unlock() + return hash.Copy(configs) } // GetConfigSigns 获取所有配置的标识 func GetConfigSigns() []Sign { return signs } + + // Sync 同步操作配置 + func Sync(handle func(configs map[Sign]any)) { + mutex.Lock() + defer mutex.Unlock() + handle(hash.Copy(configs)) + } `, slf) } diff --git a/utils/str/str.go b/utils/str/str.go index 33e8d7b..9dc2fa2 100644 --- a/utils/str/str.go +++ b/utils/str/str.go @@ -19,11 +19,11 @@ var ( // FirstUpper 首字母大写 func FirstUpper(str string) string { var upperStr string - vv := []rune(str) // 后文有介绍 + vv := []rune(str) for i := 0; i < len(vv); i++ { if i == 0 { - if vv[i] >= 97 && vv[i] <= 122 { // 后文有介绍 - vv[i] -= 32 // string的码表相差32位 + if vv[i] >= 97 && vv[i] <= 122 { + vv[i] -= 32 upperStr += string(vv[i]) } else { return str @@ -34,3 +34,151 @@ func FirstUpper(str string) string { } return upperStr } + +// FirstLower 首字母小写 +func FirstLower(str string) string { + var lowerStr string + vv := []rune(str) + for i := 0; i < len(vv); i++ { + if i == 0 { + if vv[i] >= 65 && vv[i] <= 90 { + vv[i] += 32 + lowerStr += string(vv[i]) + } else { + return str + } + } else { + lowerStr += string(vv[i]) + } + } + return lowerStr +} + +// FirstUpperBytes 首字母大写 +func FirstUpperBytes(str []byte) []byte { + var upperStr []byte + vv := []rune(string(str)) + for i := 0; i < len(vv); i++ { + if i == 0 { + if vv[i] >= 97 && vv[i] <= 122 { + vv[i] -= 32 + upperStr = append(upperStr, string(vv[i])...) + } else { + return str + } + } else { + upperStr = append(upperStr, string(vv[i])...) + } + } + return upperStr +} + +// FirstLowerBytes 首字母小写 +func FirstLowerBytes(str []byte) []byte { + var lowerStr []byte + vv := []rune(string(str)) + for i := 0; i < len(vv); i++ { + if i == 0 { + if vv[i] >= 65 && vv[i] <= 90 { + vv[i] += 32 + lowerStr = append(lowerStr, string(vv[i])...) + } else { + return str + } + } else { + lowerStr = append(lowerStr, string(vv[i])...) + } + } + return lowerStr +} + +// IsEmpty 判断字符串是否为空 +func IsEmpty(str string) bool { + return len(str) == 0 +} + +// IsEmptyBytes 判断字符串是否为空 +func IsEmptyBytes(str []byte) bool { + return len(str) == 0 +} + +// IsNotEmpty 判断字符串是否不为空 +func IsNotEmpty(str string) bool { + return !IsEmpty(str) +} + +// IsNotEmptyBytes 判断字符串是否不为空 +func IsNotEmptyBytes(str []byte) bool { + return !IsEmptyBytes(str) +} + +// SnakeString 蛇形字符串 +func SnakeString(str string) string { + var snakeStr string + vv := []rune(str) + for i := 0; i < len(vv); i++ { + if vv[i] >= 65 && vv[i] <= 90 { + vv[i] += 32 + snakeStr += "_" + string(vv[i]) + } else { + snakeStr += string(vv[i]) + } + } + return snakeStr +} + +// SnakeStringBytes 蛇形字符串 +func SnakeStringBytes(str []byte) []byte { + var snakeStr []byte + vv := []rune(string(str)) + for i := 0; i < len(vv); i++ { + if vv[i] >= 65 && vv[i] <= 90 { + vv[i] += 32 + snakeStr = append(snakeStr, '_') + snakeStr = append(snakeStr, string(vv[i])...) + } else { + snakeStr = append(snakeStr, string(vv[i])...) + } + } + return snakeStr +} + +// CamelString 驼峰字符串 +func CamelString(str string) string { + var camelStr string + vv := []rune(str) + for i := 0; i < len(vv); i++ { + if vv[i] == '_' { + i++ + if vv[i] >= 97 && vv[i] <= 122 { + vv[i] -= 32 + camelStr += string(vv[i]) + } else { + return str + } + } else { + camelStr += string(vv[i]) + } + } + return camelStr +} + +// CamelStringBytes 驼峰字符串 +func CamelStringBytes(str []byte) []byte { + var camelStr []byte + vv := []rune(string(str)) + for i := 0; i < len(vv); i++ { + if vv[i] == '_' { + i++ + if vv[i] >= 97 && vv[i] <= 122 { + vv[i] -= 32 + camelStr = append(camelStr, string(vv[i])...) + } else { + return str + } + } else { + camelStr = append(camelStr, string(vv[i])...) + } + } + return camelStr +}