1. delphi的字符截取函数LeftStr, MidStr, RightStr拆分字符串

这几个函数都包含在StrUtils中,所以需要uses StrUtils; 
假设字符串是 Dstr := ’Delphi is the BEST’, 那么 
LeftStr(Dstr, 5) := ’Delph’ 
MidStr(Dstr, 6, 7) := ’i is th’ 
RightStr(Dstr, 6) := ’e BEST’ 

~~~~~~~~~~~~~~~~~~~~~~~~~ 
function RightStr 
    (Const Str: String; Size: Word): String; 
begin 
  if Size > Length(Str) then Size := Length(Str) ; 
  RightStr := Copy(Str, Length(Str)-Size+1, Size) 
end; 
function MidStr 
    (Const Str: String; From, Size: Word): String; 
begin 
  MidStr := Copy(Str, From, Size) 
end; 
function LeftStr 
    (Const Str: String; Size: Word): String; 
begin 
  LeftStr := Copy(Str, 1, Size) 
end; 

这几个函数经常结合Pos, Length, Copy使用


拆分字符串的函数 
 
delphi中没有提供此类函数,从大富翁找了一个
function split(src,dec : string):TStringList;
var
  i : integer;
  str : string;
begin
  result := TStringList.Create;
  repeat
    i := pos(dec,src);
    str := copy(src,1,i-1);
    if (str='') and (i>0) then
    begin
      delete(src,1,length(dec));
      continue;
    end;
    if i>0 then
    begin
      result.Add(str);
      delete(src,1,i+length(dec)-1);
    end;
  until i<=0;
  if src<>'' then
    result.Add(src);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ss : TStringList;
  str,dec : string;
begin
  str := '1111||2222||||3333|||4444||';
  dec := '||';
  ss := split(str,dec);
  memo1.Lines.AddStrings(ss);
  ss.Free;
end;

 

2.Delphi字符串分割函数

function TForm1.SplitString(Source,Deli:string):TStringList;//拆分字符串函数
var
EndOfCurrentString:byte;
StringList:TStringList;
begin
    StringList:=TStringList.Create;
    while Pos(Deli,Source)>0 do         //当存在拆分符号时
    begin
      EndOfCurrentString:=Pos(Deli,Source);         //取分隔符的位置
      StringList.add(Copy(Source,1,EndOfCurrentString-1));    //添加项目
      Source:=Copy(Source,EndOfCurrentString+length(Deli),length(Source)-EndOfCurrentString); //减去已添加项和分隔符
    end;
    StringList.Add(source);   //如果不存在分隔符时,直接作为项目添加
    Result:=StringList;       //设置返回类型
end;

用法如下:

procedure TForm1.Button2Click(Sender: TObject);
var
s:Tstringlist;
i:integer;
str:string;
begin
    listbox2.Items.Clear;
    s:=Tstringlist.Create;
    str:=Edit1.Text;
try
   s.Assign(Form1.SplitString(str,'^'));
   for i:=0 to s.Count-1 do
     listbox2.Items.Add(s.Strings[i]);
finally
   freeandnil(s);
end;

另Delphi中自带一个分割字符串函数ExtractStrings

function ExtractStrings(Separators: TSysCharSet; WhiteSpace: TSysCharSet; Content: PAnsiChar; Strings: TStrings): Integer;

[参数注释]:
Separators 参数指定一组分割符,所有的子串都是用它们分割的。但是成对的引号内的分割符会被忽略(参看下面的例子)。
WhiteSpace 参数指定每个子串开头被忽略的字符s。
Content 参数就是被分割的“源”串了。
Strings 参数用于接收分割后的各个子串。它的原有内容不会被清空。别忘了Create哦。
另外,EctractStrings不会把(忽略WhiteSpaces后的)空串加入到Strings中。

[Example]

比如
ABC|...   DEF|#### GHI|"不会被分开|# www.farproc.com"
要得到

ABC
DEF
GHI
不会被分开|# www.farproc.com

四个子串可以用下面的代码:

uses
   Classes;
var
   ASource: PChar;
   AStr: String;
   ACount: Integer;
   AStrings: TStringList;
begin
   ASource := 'ABC|...   DEF|#### GHI|"
不会被分开|# www.farproc.com"';
   AStrings := TStringList.Create;
   try
     ACount := ExtractStrings(['|'], [' ', '#', '.'], ASource, AStrings);
     {do any further processing}
     /for AStr in AStrings do
     //   Writeln(AStr);
   finally
     AStrings.Free;
   end;

   Readln;
end.

====================

procedure TForm1.Button1Click(Sender:TObject);    //方法1
var
s:TStringList;
i:integer;
begin
s := TStringList.Create;
s.Text := StringReplace('this is a phone', ' ', #13#10, [rfReplaceAll]);
for i := 0 to s.Count - 1 do
begin
    Memo1.Lines.Add(s.Strings[i]);
end;
end;

procedure TForm1.Button2Click(Sender:TObject);   //方法2
var
s:TStringList;
i:Integer;
begin
S := TStringList.Create;
S.Delimiter := ' ';
S.DelimitedText := 'this is a phone';
for i := 0 to S.Count - 1 do      //此处不能有Begin~end;否则出错
    Memo2.Lines.Add(s.Strings[i]);
    S.Free;
end;

procedure TForm1.Button3Click(Sender: TObject); ////方法3
begin
ExtractStrings([' '],[],'this is a phone',Memo3.Lines );
end;

 

posted on 2009-12-23 16:42  桃源月色  阅读(3760)  评论(0编辑  收藏  举报