您的位置:首页 > 编程语言 > Delphi

Delphi 分隔GSMModem接收到的短信字符串

2011-06-20 10:37 405 查看
Delphi 分隔GSMModem接收到的短信字符串

function TForm1.SplitStr(const SourceStr, SplitChar: AnsiString): TStringList;
var
temp:AnsiString;
i:Integer;
cStr:AnsiString;
begin
Result:=TStringList.Create;
//如果是空字符串则返回空列表
if SourceStr='' then exit;
temp:=SourceStr;
i:=pos(SplitChar,SourceStr); //返回位置 从1开始
while i<>0 do
begin
cStr:=Copy(Temp,1,i-1);
if cStr<>'' then
//Copy(Str,StartIdx,CopyLength);返回包括StartIdx的CopyLength的长度字符串
Result.add(CStr);
//Delete(Str,StartIdx,DelLength);删除包括StartIdx的DelLength的长度字符串
Delete(temp,1,i);
i:=pos(SplitChar,temp);
end;
Result.add(temp);//加入最后一条

end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
str:AnsiString;
StrList:TStringList;
SubStr:TStringList;
i,j:Integer;

begin
//
Memo1.Clear;

// GSMModem从飞信接收到的信息如下:

str:='|1#44#1252002613683681364#(02/02)询10086#11-06-12 18:04:45|4#04#1252013683681364#明天会更好:你好呀 ,短信猫。#11-06-12 18:10:24 |6#04#1252013683681364#明天会更好:飞信发给短信猫。#11-06-12 18:12:43';

StrList:=TStringList.Create;
SubStr:=TStringList.Create;

try
StrList.Assign(SplitStr(str,'|'));

for i:=0 to StrList.Count-1 do
begin
Memo1.Lines.Add(StrList.Strings[i]);

SubStr.Assign(SplitStr(StrList.Strings[i],'#'));
for j := 0 to SubStr.Count - 1 do
begin
Memo1.Lines.Add(SubStr.Strings[j]);
end;

end;
finally
freeandnil(StrList);
freeAndNil(SubStr);
end;
end;

//输出结果

1#44#1252002613683681364#(02/02)询10086#11-06-12 18:04:45
1
44
1252002613683681364
(02/02)询10086
11-06-12 18:04:45
4#04#1252013683681364#明天会更好:你好呀 ,短信猫。#11-06-12 18:10:24
4
04
1252013683681364
明天会更好:你好呀 ,短信猫。
11-06-12 18:10:24
6#04#1252013683681364#明天会更好:飞信发给短信猫。#11-06-12 18:12:43
6
04
1252013683681364
明天会更好:飞信发给短信猫。
11-06-12 18:12:43
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: