前言:
本菜鸟在某物联网公司上班,经常嘛,就处理一些"AT"命令,所谓"AT"命令,都是有统一前缀的,比如 "AT+GTxxxxx,xxx,xxx,xxx$"。当然,解析的话,也自有一套框架。
=====================分割线==============================
不过今天遇到一个稍微棘手的问题,就是通过短信方式,一起发送多条这样的命令。这本身倒也没关系,把多条命令找出来就行了---, 但,形如下面这种的:
===================================================
1, AT+GTHRM=xxxx,xxx,xxx$AT+GTCMD=xxx,AT+HRK=xxx,xxx,$,,,,,$AT+GTOMK=gx,xxx,xxx$
2, AT+GTCMD=xxx,AT+HRT=gxxx,xxx,$AT+HRL=xxx,xxx$,,,,,$AT+GTOMK=xxx,xxx$
在上面第一个字符串中,有AT+GTHRM AT+GTCMD AT+GTOMK,而AT+HRK为AT+GTCMD的一个字段而已。==>也就是说,第一个字符串中,我们认为有三个AT命令,而不是5个。
在第二个字符串中,有AT+GTCMD AT+GTOMK,而AT+HRT AT+HRL是AT+GTCMD的字段而已。==>也就是第二个字符串中我们认为有2个AT命令,而非5个AT命令。
=======================提示============================
a,在AT命令中内嵌AT命令作为字段的,只有AT+GTCMD 这个命令会出现这个事情;
b, AT+GTCMD 中hold AT命令的个数未定,只是规定了最长的AT字符数不超过200字节。
c,所有的AT命令都以 "$"结尾
d,无序
=========================================================
要求==跳过AT+GTCMD中子命令的干扰(就是CMD中的AT命令,只是作为CMD的一个字段看待,只是它的样子也是AT命令),找出一个字符串中的AT命令个数和起始位置。
========
求高手一个算法,在时间和空间上都能说的过去的开销。谢谢!
条件还不够明确
at+gtcmd嵌套的at命令除了at+hrt、at+hrl还有别的字段吗?
$,,,,,$这个是固定的嵌套结束标识吗?
如果嵌套字段和格式能够明确的话,用正则就可以拆分了
最大的问题是:
你这是一个新功能,还是原有功能性能不满意求优化方案?
谢谢,这不是一个新功能,是一个bug:在手机短信下发的时候,无法正确识别AT+GTCMD命令中的子命令。前一个人找字符串中的AT命令是,一个字符一个字符向后一位偏移的,所以就出问题了。
--------------------
格式,可能我说的不是很明白:
一个"AT"命令: 是以 "AT+"开头的,并以"$"结尾,中间各个字段采用","分隔。
就比如这个样子: AT+GTTAP=china,3,,,1,,,,,FFFF$
而我们短信下发呢,客户希望是一条短信包含N条这样的AT命令:
AT+GTTAP=china,3,,,1,,,,,FFFF$AT+GTTAP=china,3,,,1,,,,,FFFF$AT+GTTAP=china,3,,,1,,,,,FFFF$
大概就是这样的。
---
同时,我们有一个命令,它是携带其他"AT"命令的,也就是该命令的字段,就是其他AT命令串,就形成了:
AT+GTCMD=xxx,AT+GTTAP=china,3,,,1,,,,,FFFF$AT+GTTAP=china,3,,,1,,,,,FFFF$,,,,,$
这个命令可携带的AT命令数不知道,只是规定了它其中携带AT命令字符串的最大长度为200,在短信中出现的位置也不确定,可能是靠前,也可能是靠后,也可能是中间,或者是这条短信中并没有这条AT+GTCMD的命令。当然,$,,,,,$ 这个倒是固定的。我也靠这个试了下,不过是没想出好办法..过程太暴力了。
=========
以上命令都做了一些虚拟,(具体原因都知道)但样子就这个了,多多抱歉,多多感谢!
@鱼竿的传说:
起(AT+GTCMD)止($,,,,,$)内容确定的话,用正则、拆分或是截取字符串的方式都可以提取出GTCMD相关的完整命令吧?
这个要是提供算法你们公司能给百万年薪吧?
见笑了,就小菜一枚
这是得拿多少酬劳啊?
见笑了,见笑了~
第二个例子的第一个“$”,是不是应该和它左边的","互换一下位置
你们的数据构造和数据解析有问题,可以考虑加个分隔符以区分命令的结束,比如;分号什么的