首页 新闻 会员 周边 捐助

求一字符串方面的算法

0
悬赏园豆:50 [已解决问题] 解决于 2015-05-31 15:03

前言:

本菜鸟在某物联网公司上班,经常嘛,就处理一些"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命令个数和起始位置。

========

求高手一个算法,在时间和空间上都能说的过去的开销。谢谢!

鱼竿的传说的主页 鱼竿的传说 | 初学一级 | 园豆:115
提问于:2015-05-29 22:45
< >
分享
最佳答案
0

条件还不够明确

at+gtcmd嵌套的at命令除了at+hrt、at+hrl还有别的字段吗?

$,,,,,$这个是固定的嵌套结束标识吗?

如果嵌套字段和格式能够明确的话,用正则就可以拆分了

最大的问题是:

你这是一个新功能,还是原有功能性能不满意求优化方案?

收获园豆:30
某猿 | 菜鸟二级 |园豆:373 | 2015-05-29 23:52

谢谢,这不是一个新功能,是一个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的命令。当然,$,,,,,$ 这个倒是固定的。我也靠这个试了下,不过是没想出好办法..过程太暴力了。

=========

以上命令都做了一些虚拟,(具体原因都知道)但样子就这个了,多多抱歉,多多感谢!

 

 

鱼竿的传说 | 园豆:115 (初学一级) | 2015-05-30 09:58

@鱼竿的传说:

起(AT+GTCMD)止($,,,,,$)内容确定的话,用正则、拆分或是截取字符串的方式都可以提取出GTCMD相关的完整命令吧?

某猿 | 园豆:373 (菜鸟二级) | 2015-05-30 21:59
其他回答(4)
0

这个要是提供算法你们公司能给百万年薪吧?

收获园豆:5
爱编程的大叔 | 园豆:30844 (高人七级) | 2015-05-29 23:15

见笑了,就小菜一枚

支持(0) 反对(0) 鱼竿的传说 | 园豆:115 (初学一级) | 2015-05-30 10:00
0

这是得拿多少酬劳啊?  

收获园豆:5
请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-05-30 00:53

见笑了,见笑了~

支持(0) 反对(0) 鱼竿的传说 | 园豆:115 (初学一级) | 2015-05-30 10:00
0

第二个例子的第一个“$”,是不是应该和它左边的","互换一下位置

收获园豆:5
Uteki | 园豆:573 (小虾三级) | 2015-05-30 16:48
0

你们的数据构造和数据解析有问题,可以考虑加个分隔符以区分命令的结束,比如;分号什么的

收获园豆:5
hexllo | 园豆:318 (菜鸟二级) | 2015-05-31 13:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册