func (x *Json_generator) Generate() { if false == tool.Exist(&x.M_json_dir) { tool.EchoErr("错误: <%s>路径不存在", x.M_json_dir) return } x.save_as_json() }
func (x *Xml_generator) Generate() { if false == tool.Exist(&x.M_xml_dir) { tool.EchoErr("错误: <%s>路径不存在", x.M_xml_dir) return } x.save_as_xml() }
func (c *Cpp_generator) Generate() { if false == tool.Exist(&c.M_to_dir) { tool.EchoErr("参数错误: 找不到指定的生成源文件的路径<%s>,请确认路径是否存在!", c.M_to_dir) return } if false == tool.Exist(&c.M_h_templet_path) { tool.EchoErr("参数错误: 找不到.h模板头文件<%s>", c.M_h_templet_path) return } if false == tool.Exist(&c.M_cpp_templet_path) { tool.EchoErr("参数错误: 找不到cpp模板源文件<%s>", c.M_cpp_templet_path) return } var filename string = tool.Strip_ext(tool.Strip_dir(c.M_cfgbase.Filename)) var h_file string = c.M_to_dir + "\\" + filename + ".h" var cpp_file string = c.M_to_dir + "\\" + filename + ".cpp" // 开始生成 // 1. c++的h头文件 if !c.gen_h_file(&h_file) { tool.EchoErr("生成h头文件<%s>失败", h_file) return } tool.EchoOk("生成h头文件<%s>成功", h_file) // 2. c++的cpp头文件 if !c.gen_cpp_file(&cpp_file) { tool.EchoErr("生成cpp源文件<%s>失败", cpp_file) return } tool.EchoOk("生成cpp源文件<%s>成功", cpp_file) }
// 解析出excel中的各个工作表,将解析结果存入结构体 func parse_excel(excel *string, cfgbase *Cfgbase_t, errmsgs *tool.Errvec_t, parse_option Enum_parse_option) bool { var parse_clock tool.Clock parse_clock.Start_tick() if false == tool.Exist(excel) { *errmsgs = append(*errmsgs, *excel+"文件不存在!") return false } // 1. 载入excel文件 xlFile, err := xlsx.OpenFile(*excel) if err != nil { *errmsgs = append(*errmsgs, tool.GetErrMsg("错误:解析<%s>文件失败,请确保该文件存在且未被打开!", *excel)) return false } var succ bool = true // 2. 依次解析各个工作表 for _, sheet := range xlFile.Sheets { var cfg Cfg_t // 2.1 解析出工作表的内容,并将结果存放到cfg中 var ok bool = parse_sheet(sheet, &cfg, errmsgs, parse_option) if false == ok { succ = false continue } var conflict_by_prop *Cfg_t = cfgbase.find_by_en_name(&cfg.En_name) if nil != conflict_by_prop { *errmsgs = append(*errmsgs, tool.GetErrMsg("错误:定义了两个同样地文件<%s>", cfg.Cn_name)) *errmsgs = append(*errmsgs, tool.GetErrMsg(" <%s = %s>", conflict_by_prop.Cn_name, conflict_by_prop.En_name)) *errmsgs = append(*errmsgs, tool.GetErrMsg(" <%s = %s>", cfg.Cn_name, cfg.En_name)) succ = false continue } cfgbase.Cfgs = append(cfgbase.Cfgs, cfg) } // 将第一个工作表名作为文件名(比如,excel中有2个工作表item、hero,则将item作为文件名) if len(cfgbase.Cfgs) > 0 { cfgbase.Filename = cfgbase.Cfgs[0].En_name } tool.EchoWarn("执行完毕, 共耗时<%f>秒", parse_clock.End_tick()) return succ }
// 解析excel文件 func ParseExcel(excel *string, parse_option Enum_parse_option, cfgbase *Cfgbase_t) bool { if false == tool.Exist(excel) { tool.EchoErr("错误: 找不到excel文件<%s>", *excel) return false } var errvec tool.Errvec_t if false == parse_excel(excel, cfgbase, &errvec, parse_option) { // tool.EchoErr("错误:解析<%s>文件失败,请确保该文件存在且未被打开", *excel) tool.Echo_errvec(&errvec) return false } return true }