123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- package test
- import (
- "bufio"
- "fmt"
- "io"
- "os"
- "regexp"
- "strings"
- "testing"
- )
- func TestIO(t *testing.T) {
- //file, err := os.OpenFile("b.txt", os.O_RDONLY, 0)
- file, err := os.OpenFile("b.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0)
- if err != nil {
- panic(err)
- }
- defer file.Close()
- contentBytes, err := io.ReadAll(file)
- fmt.Println(string(contentBytes))
- }
- func TestPrint1(t *testing.T) {
- // 打开文件[1,3](@ref)
- file, err := os.Open("C:\\Users\\mlxengingin\\GolandProjects\\cicv_data_closed_loop0326\\aarch64\\pjibot_clean\\master\\package\\config\\清洁机器人话题列表.txt")
- if err != nil {
- fmt.Printf("Error opening file: %v\n", err)
- return
- }
- defer file.Close()
- // 创建扫描器逐行读取[1,3,8](@ref)
- scanner := bufio.NewScanner(file)
- lineNumber := 1
- // 处理每一行内容
- for scanner.Scan() {
- line := scanner.Text()
- // 格式化输出为 TopicN = "行内容"[1,8](@ref)
- fmt.Printf("\tTopic%-3d = \"%s\"\n", lineNumber, line)
- lineNumber++
- }
- // 检查扫描错误[1,3](@ref)
- if err := scanner.Err(); err != nil {
- fmt.Printf("Error reading file: %v\n", err)
- }
- }
- func TestPrint2(t *testing.T) {
- // 使用固定宽度左对齐格式控制规则编号排版[6,7](@ref)
- const (
- ruleWidth = 10 // 规则编号部分占10字符宽度
- totalRules = 284 // 总生成规则数
- ruleNameFmt = "Rule%d"
- )
- // 通过for循环生成指定数量的规则行[3,4](@ref)
- for i := 1; i <= totalRules; i++ {
- // 使用Sprintf构建规则前缀[6](@ref)
- rulePrefix := fmt.Sprintf(ruleNameFmt, i)
- // 采用%-*s实现动态宽度对齐,确保后续内容垂直对齐[7](@ref)
- fmt.Printf("%-*s []func(data *sensor_msgs.Imu) string\n", ruleWidth, rulePrefix)
- }
- }
- func TestPrint3(t *testing.T) {
- // 文件路径配置(根据实际位置修改)
- const filePath = "C:\\Users\\mlxengingin\\GolandProjects\\cicv_data_closed_loop0326\\aarch64\\pjibot_clean\\master\\package\\config\\机器人话题和数据类型对应关系.txt"
- // 使用高效方式读取文件(网页1、网页3推荐方法)
- file, err := os.Open(filePath)
- if err != nil {
- fmt.Printf("文件打开失败: %v\n", err)
- return
- }
- defer file.Close()
- // 初始化规则生成器
- var rules []string
- ruleCounter := 1
- // 逐行处理文件内容(网页2、网页4推荐方法)
- scanner := bufio.NewScanner(file)
- for scanner.Scan() {
- line := strings.TrimSpace(scanner.Text())
- if line == "" {
- continue // 跳过空行
- }
- // 分割字段(网页7推荐方法)
- fields := strings.Fields(line)
- if len(fields) < 2 {
- continue // 跳过格式错误行
- }
- // 转换消息类型格式(网页8字符串处理)
- msgType := strings.Replace(fields[1], "/", ".", -1)
- // 生成规则定义(网页6格式化最佳实践)
- rule := fmt.Sprintf("Rule%-2d []func(data *%s) string", ruleCounter, msgType)
- rules = append(rules, rule)
- ruleCounter++
- }
- // 错误检查(网页3建议)
- if err := scanner.Err(); err != nil {
- fmt.Printf("文件读取错误: %v\n", err)
- return
- }
- // 格式化输出结果(网页5、网页8的字符串构建建议)
- fmt.Println("生成规则结构体:")
- fmt.Println("type Rules struct {")
- for _, rule := range rules {
- fmt.Printf("\t%s\n", rule)
- }
- fmt.Println("}")
- }
- func TestPrint4(t *testing.T) {
- rules := parseRules("C:\\Users\\mlxengingin\\GolandProjects\\cicv_data_closed_loop0326\\aarch64\\pjibot_clean\\master\\package\\config\\rules.txt")
- generateCode(rules)
- }
- // 定义规则解析结构体
- type RuleMeta struct {
- RuleName string
- MessageType string
- }
- func parseRules(filename string) []RuleMeta {
- file, _ := os.Open(filename)
- defer file.Close()
- scanner := bufio.NewScanner(file)
- var rules []RuleMeta
- pattern := regexp.MustCompile(`(\w+)\s+$$$$func$data\s+\*([\w\.]+)$`)
- for scanner.Scan() {
- line := strings.TrimSpace(scanner.Text())
- if matches := pattern.FindStringSubmatch(line); len(matches) == 3 {
- rules = append(rules, RuleMeta{
- RuleName: matches[1],
- MessageType: matches[2],
- })
- }
- }
- return rules
- }
- func generateCode(rules []RuleMeta) {
- var builder strings.Builder
- builder.WriteString("switch topic2 {\n")
- for i, rule := range rules {
- // 生成条件分支
- builder.WriteString(fmt.Sprintf("\tcase Topic%d: // %d\n", i+1, i+1))
- builder.WriteString(fmt.Sprintf("\t\tif f, ok1 := rule.(func(*%s) string); ok1 {\n", rule.MessageType))
- builder.WriteString(fmt.Sprintf("\t\t\t%s = append(%s, f)\n", rule.RuleName, rule.RuleName))
- builder.WriteString("\t\t\tgoto JudgeDone\n")
- builder.WriteString("\t\t}\n")
- builder.WriteString("\t\tlog(triggerLocalPath)\n")
- builder.WriteString("\t\tcontinue\n\n")
- }
- builder.WriteString("\tdefault:\n\t\t// 默认处理逻辑\n")
- builder.WriteString("}")
- fmt.Println(builder.String())
- }
|