From 0aafb68fcd9253bc43ccd4b290b3de6e1210cba7 Mon Sep 17 00:00:00 2001 From: fengyarnom Date: Tue, 24 Jun 2025 19:34:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=80=E4=BA=9B=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tcp_server.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) 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)