diff --git a/tcp_server.go b/tcp_server.go index 5647c91..3408989 100644 --- a/tcp_server.go +++ b/tcp_server.go @@ -211,6 +211,37 @@ func parseData(data string) (int, float64, float64, float64, float64, error) { return sensorID, x, y, z, temperature, nil } + // 尝试解析无包装符号的格式: 1602301014-01,1,1,31.1,-6.781,1.542 + plainPattern := regexp.MustCompile(`([^,]+)-(\d+),\d+,(\d+),([-]?\d+\.\d+),([-]?\d+\.\d+),([-]?\d+\.\d+)`) + matches = plainPattern.FindStringSubmatch(data) + + if len(matches) == 7 { + // 无包装符号格式解析 + sensorID, err := strconv.Atoi(matches[3]) // 使用传感器地址编号 + if err != nil { + return 0, 0, 0, 0, 0, fmt.Errorf("解析传感器ID失败: %v", err) + } + + temperature, err := strconv.ParseFloat(strings.TrimSpace(matches[4]), 64) + if err != nil { + return 0, 0, 0, 0, 0, fmt.Errorf("解析温度值失败: %v", err) + } + + x, err := strconv.ParseFloat(strings.TrimSpace(matches[5]), 64) + if err != nil { + return 0, 0, 0, 0, 0, fmt.Errorf("解析X值失败: %v", err) + } + + y, err := strconv.ParseFloat(strings.TrimSpace(matches[6]), 64) + if err != nil { + return 0, 0, 0, 0, 0, fmt.Errorf("解析Y值失败: %v", err) + } + + z := 0.0 // 这种格式没有Z值,设为0 + + return sensorID, x, y, z, temperature, nil + } + // 尝试解析旧格式: 1:1.000, 2.000, 3.000 oldPattern := regexp.MustCompile(`(\d+):([-]?\d+\.\d+),\s*([-]?\d+\.\d+),\s*([-]?\d+\.\d+)`) matches = oldPattern.FindStringSubmatch(data)