|
|
|
@ -16,190 +16,242 @@ import (
|
|
|
|
|
const _ = true
|
|
|
|
|
|
|
|
|
|
type Config struct {
|
|
|
|
|
FileName string `yaml:"file"`
|
|
|
|
|
FileName string `yaml:"inputFile"`
|
|
|
|
|
JsonFile string `yaml:"outputFile"`
|
|
|
|
|
SheetName string `yaml:"sheet"`
|
|
|
|
|
StartRow int `yaml:"start"`
|
|
|
|
|
StartRow int `yaml:"startRow"`
|
|
|
|
|
Columns map[string]string `yaml:"columns"`
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:20:1
|
|
|
|
|
|
|
|
|
|
var VERSION = "0.0.1"
|
|
|
|
|
//line tsa.xgo:22:1
|
|
|
|
|
// Чтение конфига
|
|
|
|
|
func readConfig() Config {
|
|
|
|
|
//line tsa.xgo:22:1
|
|
|
|
|
//line tsa.xgo:24:1
|
|
|
|
|
f := func() (_xgo_ret *os.File) {
|
|
|
|
|
//line tsa.xgo:22:1
|
|
|
|
|
//line tsa.xgo:24:1
|
|
|
|
|
var _xgo_err error
|
|
|
|
|
//line tsa.xgo:22:1
|
|
|
|
|
//line tsa.xgo:24:1
|
|
|
|
|
_xgo_ret, _xgo_err = os.Open("tsa.yaml")
|
|
|
|
|
//line tsa.xgo:22:1
|
|
|
|
|
//line tsa.xgo:24:1
|
|
|
|
|
if _xgo_err != nil {
|
|
|
|
|
//line tsa.xgo:22:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "os.Open(\"tsa.yaml\")", "tsa.xgo", 22, "main.readConfig")
|
|
|
|
|
//line tsa.xgo:22:1
|
|
|
|
|
//line tsa.xgo:24:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "os.Open(\"tsa.yaml\")", "tsa.xgo", 24, "main.readConfig")
|
|
|
|
|
//line tsa.xgo:24:1
|
|
|
|
|
panic(_xgo_err)
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:22:1
|
|
|
|
|
//line tsa.xgo:24:1
|
|
|
|
|
return
|
|
|
|
|
}()
|
|
|
|
|
//line tsa.xgo:23:1
|
|
|
|
|
defer f.Close()
|
|
|
|
|
//line tsa.xgo:25:1
|
|
|
|
|
defer f.Close()
|
|
|
|
|
//line tsa.xgo:27:1
|
|
|
|
|
cfg := Config{}
|
|
|
|
|
//line tsa.xgo:26:1
|
|
|
|
|
//line tsa.xgo:28:1
|
|
|
|
|
decoder := yaml.NewDecoder(f)
|
|
|
|
|
//line tsa.xgo:27:1
|
|
|
|
|
//line tsa.xgo:29:1
|
|
|
|
|
func() {
|
|
|
|
|
//line tsa.xgo:27:1
|
|
|
|
|
//line tsa.xgo:29:1
|
|
|
|
|
var _xgo_err error
|
|
|
|
|
//line tsa.xgo:27:1
|
|
|
|
|
//line tsa.xgo:29:1
|
|
|
|
|
_xgo_err = decoder.Decode(&cfg)
|
|
|
|
|
//line tsa.xgo:27:1
|
|
|
|
|
//line tsa.xgo:29:1
|
|
|
|
|
if _xgo_err != nil {
|
|
|
|
|
//line tsa.xgo:27:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "decoder.Decode(&cfg)", "tsa.xgo", 27, "main.readConfig")
|
|
|
|
|
//line tsa.xgo:27:1
|
|
|
|
|
//line tsa.xgo:29:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "decoder.Decode(&cfg)", "tsa.xgo", 29, "main.readConfig")
|
|
|
|
|
//line tsa.xgo:29:1
|
|
|
|
|
panic(_xgo_err)
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:27:1
|
|
|
|
|
//line tsa.xgo:29:1
|
|
|
|
|
return
|
|
|
|
|
}()
|
|
|
|
|
//line tsa.xgo:28:1
|
|
|
|
|
//line tsa.xgo:30:1
|
|
|
|
|
return cfg
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:31:1
|
|
|
|
|
//line tsa.xgo:33:1
|
|
|
|
|
// Получаем все строки листа
|
|
|
|
|
func readExcel(filename string, sheetname string) [][]string {
|
|
|
|
|
//line tsa.xgo:33:1
|
|
|
|
|
//line tsa.xgo:35:1
|
|
|
|
|
f := func() (_xgo_ret *excelize.File) {
|
|
|
|
|
//line tsa.xgo:33:1
|
|
|
|
|
//line tsa.xgo:35:1
|
|
|
|
|
var _xgo_err error
|
|
|
|
|
//line tsa.xgo:33:1
|
|
|
|
|
//line tsa.xgo:35:1
|
|
|
|
|
_xgo_ret, _xgo_err = excelize.OpenFile(filename)
|
|
|
|
|
//line tsa.xgo:33:1
|
|
|
|
|
//line tsa.xgo:35:1
|
|
|
|
|
if _xgo_err != nil {
|
|
|
|
|
//line tsa.xgo:33:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "excelize.OpenFile(filename)", "tsa.xgo", 33, "main.readExcel")
|
|
|
|
|
//line tsa.xgo:33:1
|
|
|
|
|
//line tsa.xgo:35:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "excelize.OpenFile(filename)", "tsa.xgo", 35, "main.readExcel")
|
|
|
|
|
//line tsa.xgo:35:1
|
|
|
|
|
panic(_xgo_err)
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:33:1
|
|
|
|
|
//line tsa.xgo:35:1
|
|
|
|
|
return
|
|
|
|
|
}()
|
|
|
|
|
//line tsa.xgo:34:1
|
|
|
|
|
defer f.Close()
|
|
|
|
|
//line tsa.xgo:36:1
|
|
|
|
|
defer f.Close()
|
|
|
|
|
//line tsa.xgo:38:1
|
|
|
|
|
rows := func() (_xgo_ret [][]string) {
|
|
|
|
|
//line tsa.xgo:36:1
|
|
|
|
|
//line tsa.xgo:38:1
|
|
|
|
|
var _xgo_err error
|
|
|
|
|
//line tsa.xgo:36:1
|
|
|
|
|
//line tsa.xgo:38:1
|
|
|
|
|
_xgo_ret, _xgo_err = f.GetRows(sheetname)
|
|
|
|
|
//line tsa.xgo:36:1
|
|
|
|
|
//line tsa.xgo:38:1
|
|
|
|
|
if _xgo_err != nil {
|
|
|
|
|
//line tsa.xgo:36:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "f.GetRows(sheetname)", "tsa.xgo", 36, "main.readExcel")
|
|
|
|
|
//line tsa.xgo:36:1
|
|
|
|
|
//line tsa.xgo:38:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "f.GetRows(sheetname)", "tsa.xgo", 38, "main.readExcel")
|
|
|
|
|
//line tsa.xgo:38:1
|
|
|
|
|
panic(_xgo_err)
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:36:1
|
|
|
|
|
//line tsa.xgo:38:1
|
|
|
|
|
return
|
|
|
|
|
}()
|
|
|
|
|
//line tsa.xgo:37:1
|
|
|
|
|
//line tsa.xgo:39:1
|
|
|
|
|
return rows
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:40:1
|
|
|
|
|
//line tsa.xgo:42:1
|
|
|
|
|
func getColumnName(cols map[string]string, col int) string {
|
|
|
|
|
//line tsa.xgo:41:1
|
|
|
|
|
//line tsa.xgo:43:1
|
|
|
|
|
if col < 1 || col > 21 {
|
|
|
|
|
//line tsa.xgo:42:1
|
|
|
|
|
//line tsa.xgo:44:1
|
|
|
|
|
fmt.Println(stringutil.Concat(`Столбец: `, strconv.Itoa(col), ` вне диапазона столбцов`))
|
|
|
|
|
//line tsa.xgo:43:1
|
|
|
|
|
//line tsa.xgo:45:1
|
|
|
|
|
os.Exit(0)
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:46:1
|
|
|
|
|
//line tsa.xgo:48:1
|
|
|
|
|
type ColsMap struct {
|
|
|
|
|
num int
|
|
|
|
|
str string
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:50:1
|
|
|
|
|
//line tsa.xgo:52:1
|
|
|
|
|
colsmap := []string{" ", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U"}
|
|
|
|
|
//line tsa.xgo:54:1
|
|
|
|
|
//line tsa.xgo:56:1
|
|
|
|
|
return cols[colsmap[col]]
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:57:1
|
|
|
|
|
//line tsa.xgo:59:1
|
|
|
|
|
func convert2int(s string) int64 {
|
|
|
|
|
//line tsa.xgo:58:1
|
|
|
|
|
//line tsa.xgo:60:1
|
|
|
|
|
f := func() (_xgo_ret float64) {
|
|
|
|
|
//line tsa.xgo:58:1
|
|
|
|
|
//line tsa.xgo:60:1
|
|
|
|
|
var _xgo_err error
|
|
|
|
|
//line tsa.xgo:58:1
|
|
|
|
|
//line tsa.xgo:60:1
|
|
|
|
|
_xgo_ret, _xgo_err = strconv.ParseFloat(s, 64)
|
|
|
|
|
//line tsa.xgo:58:1
|
|
|
|
|
//line tsa.xgo:60:1
|
|
|
|
|
if _xgo_err != nil {
|
|
|
|
|
//line tsa.xgo:58:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "strconv.ParseFloat(s, 64)", "tsa.xgo", 58, "main.convert2int")
|
|
|
|
|
//line tsa.xgo:58:1
|
|
|
|
|
//line tsa.xgo:60:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "strconv.ParseFloat(s, 64)", "tsa.xgo", 60, "main.convert2int")
|
|
|
|
|
//line tsa.xgo:60:1
|
|
|
|
|
panic(_xgo_err)
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:58:1
|
|
|
|
|
//line tsa.xgo:60:1
|
|
|
|
|
return
|
|
|
|
|
}()
|
|
|
|
|
//line tsa.xgo:59:1
|
|
|
|
|
//line tsa.xgo:61:1
|
|
|
|
|
n := int64(f)
|
|
|
|
|
//line tsa.xgo:60:1
|
|
|
|
|
//line tsa.xgo:62:1
|
|
|
|
|
return n
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:63
|
|
|
|
|
//line tsa.xgo:65:1
|
|
|
|
|
// выводит результат на экран
|
|
|
|
|
func json2screen(dbValues []map[string]string) {
|
|
|
|
|
//line tsa.xgo:70:1
|
|
|
|
|
pretty := func() (_xgo_ret []byte) {
|
|
|
|
|
//line tsa.xgo:70:1
|
|
|
|
|
var _xgo_err error
|
|
|
|
|
//line tsa.xgo:70:1
|
|
|
|
|
_xgo_ret, _xgo_err = json.MarshalIndent(dbValues, "", " ")
|
|
|
|
|
//line tsa.xgo:70:1
|
|
|
|
|
if _xgo_err != nil {
|
|
|
|
|
//line tsa.xgo:70:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "json.MarshalIndent(dbValues, \"\", \" \")", "tsa.xgo", 70, "main.json2screen")
|
|
|
|
|
//line tsa.xgo:70:1
|
|
|
|
|
panic(_xgo_err)
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:70:1
|
|
|
|
|
return
|
|
|
|
|
}()
|
|
|
|
|
//line tsa.xgo:72:1
|
|
|
|
|
fmt.Println(string(pretty))
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:75:1
|
|
|
|
|
func json2file(dbValues []map[string]string, outfile string) {
|
|
|
|
|
//line tsa.xgo:76:1
|
|
|
|
|
f := func() (_xgo_ret *os.File) {
|
|
|
|
|
//line tsa.xgo:76:1
|
|
|
|
|
var _xgo_err error
|
|
|
|
|
//line tsa.xgo:76:1
|
|
|
|
|
_xgo_ret, _xgo_err = os.OpenFile(outfile, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0o644)
|
|
|
|
|
//line tsa.xgo:76:1
|
|
|
|
|
if _xgo_err != nil {
|
|
|
|
|
//line tsa.xgo:76:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "os.OpenFile(outfile, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0o644)", "tsa.xgo", 76, "main.json2file")
|
|
|
|
|
//line tsa.xgo:76:1
|
|
|
|
|
panic(_xgo_err)
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:76:1
|
|
|
|
|
return
|
|
|
|
|
}()
|
|
|
|
|
//line tsa.xgo:77:1
|
|
|
|
|
defer f.Close()
|
|
|
|
|
//line tsa.xgo:79:1
|
|
|
|
|
enc := json.NewEncoder(f)
|
|
|
|
|
//line tsa.xgo:80:1
|
|
|
|
|
enc.SetIndent("", " ")
|
|
|
|
|
//line tsa.xgo:83:1
|
|
|
|
|
func() {
|
|
|
|
|
//line tsa.xgo:83:1
|
|
|
|
|
var _xgo_err error
|
|
|
|
|
//line tsa.xgo:83:1
|
|
|
|
|
_xgo_err = enc.Encode(dbValues)
|
|
|
|
|
//line tsa.xgo:83:1
|
|
|
|
|
if _xgo_err != nil {
|
|
|
|
|
//line tsa.xgo:83:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "enc.Encode(dbValues)", "tsa.xgo", 83, "main.json2file")
|
|
|
|
|
//line tsa.xgo:83:1
|
|
|
|
|
panic(_xgo_err)
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:83:1
|
|
|
|
|
return
|
|
|
|
|
}()
|
|
|
|
|
//line tsa.xgo:84:1
|
|
|
|
|
fmt.Println(stringutil.Concat(`Файл `, outfile, ` сформирован`))
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:87
|
|
|
|
|
// ====================== основная программа ====================
|
|
|
|
|
func main() {
|
|
|
|
|
//line tsa.xgo:64:1
|
|
|
|
|
//line tsa.xgo:88:1
|
|
|
|
|
cfg := readConfig()
|
|
|
|
|
//line tsa.xgo:65:1
|
|
|
|
|
//line tsa.xgo:89:1
|
|
|
|
|
rows := readExcel(cfg.FileName, cfg.SheetName)
|
|
|
|
|
//line tsa.xgo:66:1
|
|
|
|
|
fmt.Println(stringutil.Concat("Всего ", strconv.Itoa(len(rows)), " строк"))
|
|
|
|
|
//line tsa.xgo:68:1
|
|
|
|
|
//line tsa.xgo:90:1
|
|
|
|
|
fmt.Println(stringutil.Concat("Программа конвертации excel -> json. Версия ", VERSION))
|
|
|
|
|
//line tsa.xgo:91:1
|
|
|
|
|
fmt.Println(stringutil.Concat("Файл ", cfg.FileName, " содержит записей: ", strconv.Itoa(len(rows))))
|
|
|
|
|
//line tsa.xgo:93:1
|
|
|
|
|
var dbValues = []map[string]string{}
|
|
|
|
|
for
|
|
|
|
|
//line tsa.xgo:69:1
|
|
|
|
|
_, row := range rows[cfg.StartRow-1 : 2] {
|
|
|
|
|
//line tsa.xgo:70:1
|
|
|
|
|
//line tsa.xgo:94:1
|
|
|
|
|
_, row := range rows[cfg.StartRow-1:] {
|
|
|
|
|
//line tsa.xgo:95:1
|
|
|
|
|
rowValues := make(map[string]string)
|
|
|
|
|
for
|
|
|
|
|
//line tsa.xgo:71:1
|
|
|
|
|
//line tsa.xgo:96:1
|
|
|
|
|
col, val := range row {
|
|
|
|
|
//line tsa.xgo:72:1
|
|
|
|
|
//line tsa.xgo:97:1
|
|
|
|
|
colname := getColumnName(cfg.Columns, col+1)
|
|
|
|
|
//line tsa.xgo:75:1
|
|
|
|
|
//line tsa.xgo:100:1
|
|
|
|
|
if colname == "caseId" || colname == "policyNumber" {
|
|
|
|
|
//line tsa.xgo:76:1
|
|
|
|
|
//line tsa.xgo:101:1
|
|
|
|
|
val = fmt.Sprintf("%d", convert2int(val))
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:80:1
|
|
|
|
|
//line tsa.xgo:105:1
|
|
|
|
|
if colname != "" {
|
|
|
|
|
//line tsa.xgo:81:1
|
|
|
|
|
//line tsa.xgo:106:1
|
|
|
|
|
rowValues[colname] = val
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:83:1
|
|
|
|
|
fmt.Println(stringutil.Concat(strconv.Itoa(col), ` [`, colname, `]: `, val))
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:86:1
|
|
|
|
|
//line tsa.xgo:111:1
|
|
|
|
|
dbValues = append(dbValues, rowValues)
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:90:1
|
|
|
|
|
b := func() (_xgo_ret []byte) {
|
|
|
|
|
//line tsa.xgo:90:1
|
|
|
|
|
var _xgo_err error
|
|
|
|
|
//line tsa.xgo:90:1
|
|
|
|
|
_xgo_ret, _xgo_err = json.Marshal(dbValues)
|
|
|
|
|
//line tsa.xgo:90:1
|
|
|
|
|
if _xgo_err != nil {
|
|
|
|
|
//line tsa.xgo:90:1
|
|
|
|
|
_xgo_err = errors.NewFrame(_xgo_err, "json.Marshal(dbValues)", "tsa.xgo", 90, "main.main")
|
|
|
|
|
//line tsa.xgo:90:1
|
|
|
|
|
panic(_xgo_err)
|
|
|
|
|
}
|
|
|
|
|
//line tsa.xgo:90:1
|
|
|
|
|
return
|
|
|
|
|
}()
|
|
|
|
|
//line tsa.xgo:94:1
|
|
|
|
|
fmt.Println(string(b))
|
|
|
|
|
//line tsa.xgo:116:1
|
|
|
|
|
json2file(dbValues, cfg.JsonFile)
|
|
|
|
|
}
|
|
|
|
|