取字符串 ( 积分: 50 )

  • 主题发起人 主题发起人 mawei0913_green
  • 开始时间 开始时间
M

mawei0913_green

Unregistered / Unconfirmed
GUEST, unregistred user!
现在我有这样一个字符串,它是从发送方接收到一些指令(手机指令),比如:
AT
OK
AT+CPIN?
+CPIN: READY
AT+CMGF=0
OK
AT+CNMI=2,2,0,1,1
OK
AT+CPMS="SM"
+CPMS: 0,30,0,30
OK
AT+CMGL=4
OK
AT+CMGD=1,4 AT+CPMS="SM"
ERROR
AT+CMGL=4
ERROR
AT+CMGD=1,4
ERROR
AT+CMGD=1
ERROR
AT+CMGD=2
ERROR
AT+CMGD=3
ERROR
。。。

AT+CMGD=69
ERROR
AT+CMGD=70
ERROR
AT+CMGS=33 00B10
> 00D91683163269077F7000801124F60597D002053D14EF64EBA003A00390039
+CMGS: 254
OK

+CDS: 25
0006FE0B913163269077F7705052315405237050523154152300
AT+CMGL=0
OK
AT+CMGD=0
ERROR
AT+CMGL=0
OK
AT+CMGD=1
OK
AT+CMGL=0
OK
菜鸟想实现如下功能 :把0006FE0B913163269077F7705052315405237050523154152300从中取出来,并将取出来的字符串两两对换位置,请各位大侠帮忙,谢谢!
 
怎么没人回答呀,请各位大侠多捧捧场呀,给菜鸟一些建议呵代码呀!谢谢各位了!
 
0006FE的意思是,此sim卡号从启用到在,你当前发送的短信总数量;91为国际代码(不变);3163269077F7前后交换位置后为手机号码;70505231540523前后交换位置后为信息到达短信中心的时间;7050523154152300为信息发送到接收方的时间
它就是一个字符串,我想把它取出来,好像没什么规律

请各位高人帮忙呀,怎么这世界上没人知道吗?
 
我想问下,0006FE0B913163269077F7705052315405237050523154152300 这个字符串的长度是固定的吗?还有里面相应的受机号码,时间之类的长度也固定吗?
前后交换位置 是什么意思,,说的具体点
 
0006FE0B913163269077F7705052315405237050523154152300是固定的,不变的,我就是想取得这个字符串,至于前后交换位置是取得这个字符串之后做的,可以先不用考虑。
 
这些字符串是接收到什么地方的?
假设接收到一个memo控件内,如果是一条一条收到到的,那么每收到一条判断一下,如果是一起收到很多条,那么用循环判断。
假设 ss:=收到的字符串;
if pos('0006FE0B91',ss):= 1 then
ss就是你要的内容
 
TO: ufo!
这条信息是我一条一条收到的,0006FE0B的意思是,此sim卡号从启用到在,你当前发送的短信总数量,这条信息是变化的,每收到一条该值是变化的,它是一个16进制,91是国际代码,它是固定不变的
请各位高人给予指教或详细代码说明
 
如果前面这几位固定不变,那就按我写的方法就可以找出来了。后面的变化无所谓
 
TO:ufo!
现在关键是0006FE0B是变化的,每当发送一条短信时,它是变化了
也有高人这样提示我,您帮我看看,
[red]你发的这个整个数据, 是多个at指令的结果, 你发送完at+cmgs 去读串口就可以了, 判断读回的结果, 如果是+CMGS 的串就继续读, 读到CDS后再读一个到换行的串[/red]
实际上他说是很对的,我就是不知道怎么实现用代码
 
+CDS: 25
是你发送的吗,如果是你发送的,那你自己发送后等待数据就是了啊。
等到数据后,可以看一下数据长度,如果长度异常,抛弃或者报错就是了。
 
原理:这是发送方发送给接收方的内容,等接收方接到短信时,短信中心向发送方提示一个报告,和移动的短信回执是一样的,请各位高人指教说明,谢谢!
 
怎么没高人回答呀?请各位高人帮帮忙忙,谢谢,提点意见和具体的实现代码,谢谢
 
不明白你的具体情况。
其实字符串处理没这么复杂的,给你个思路:
1。根据特征码查找字符串,比如某个窜的某几个位置有固定内容的。
2。根据前后文找,比如前面一条或者后面一条是固定内容的。
3。根据字符串的长度找,如果长度固定的。
4。根据验证码找,比如有些字符串有验证码的,那么读取串,对比验证码。
5。方法还有很多,但要结合实际情况灵活运用。
 
procedure TForm1.MSComm1Comm(Sender: TObject);
var
buf:string;
begin

if mscomm1.CommEvent =comEvreceive then
begin
mscomm1.InputMode :=cominputmodetext;
buf:=buf+mscomm1.Input;
sleep(1000);
memo1.Text:=memo1.Text+buf;
end;
end;

procedure TForm1.memo1Change(Sender: TObject);
var
i:integer;
str:string;
begin
if (pos('+CMGS',memo1.Text)>0) and (pos('',memo1.Text)>0) then
begin
str:=copy(memo1.Text,pos('',memo1.Text),pos('
',memo1.Text)-pos('
',memo1.Text));
memo1.Clear;
end;
end;
 
多谢ufo!, bobby_ym这两位高人,谢谢!
 
再此多谢ufo!, bobby_ym这两位高人,我先测试一下,有机会再麻烦两位,谢!
 
后退
顶部