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

来源:互联网 发布:淘宝女装摄影技巧 编辑:程序博客网 时间:2024/05/22 16:52

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

 

 

原创粉丝点击