procedure StrToStrings(S, Sep: string; const List: TStrings); var I, L: Integer; Left: AnsiString; begin Assert(List <> nil); List.Clear; L := Length(Sep); I := Pos(Sep, S); while (I > 0) do begin Left := LeftStr(S, I - 1); List.Add(Left); Delete(S, 1, I + L - 1); I := Pos(Sep, S); end; if S <> '' then List.Add(S); end;
procedure TForm1.Button1Click(Sender: TObject); var s: string; i: integer; StrList: TStringList; tempi: integer; begin Strlist:=TStringList.Create; StrList:=TStringList.Create; S := 个'ab,cd,efg,h,ijk'; tempi:=0; for i:=0 to Length(s) -1 do if not (S[i] in ['a'..'z' ,'A'..'Z']) then begin StrList.Add(Copy(s,tempi,i-tempi)); tempi:=i; end; ShowMessage(StrList.Text);end;
//****************************************************************// // 函数:已Border字符为标准提取字符串 // // 范围:字符串中有特殊的字符进行分界 // // 描述:SourStr 比较字符;Border 分界字符; // // Index 分割后的字符串的顺序号(int) // //****************************************************************//function SubStr(SourStr: string; Border: Char; Index: integer): string;var TempStr : string; I : integer; begin TempStr := SourStr; if Pos(Border,SourStr)=0 then begin if Length(SourStr) > 0 then Result := SourStr else Result := ''; end else begin try for I := 1 to Index - 1 do begin if Pos(Border,TempStr) = 0 then begin Result := ''; Exit; end; Delete(TempStr,1,Pos(Border,TempStr)); TempStr := Trim(TempStr); end; except result := ''; Exit; end; if Pos(Border,TempStr)=0 then Result := TempStr else Result := Copy(TempStr,1,Pos(Border,TempStr) - 1); end; end;//****************************************************************// // 函数:判断输入(英文)字符判断有几个相同的字符 // // 范围:字符串中必须有空格来断开 // // 描述:inputstr 比较字符;sourStr 原字符; // // Repeatcount 几个相同的字符(int) // // 例子:Engfindepeat(‘meng xian bao ’,'meng xian ' ,2 ) // // 返回 false; // // 说明:'meng xian bao'中有‘meng xian ’ 的字符已经达到了// // 2 个返回false,否则返回true. // //****************************************************************// function Engfindepeat(inputStr, sourStr: String; repeatcount: Integer): Boolean; var Sstr,Dstr : String; i,j : Integer; ItemString1,ItemString2:TStringList; sign:Integer; begin result:=true ; ItemString1:=TStringList.Create; try ItemString1.Clear; if Pos(' ',SourStr) > 0 then begin i := 1; while (SubStr(SourStr,' ',i) <> '') do begin Itemstring1.Add(SubStr(SourStr,' ',i)); i := i+1; end; end else Itemstring1.Add(SourStr); //-------------- ItemString2:=TStringList.Create; try ItemString2.Clear; if Pos(' ',inputStr) > 0 then begin i := 1; while (SubStr(inputStr,' ',i) <> '') do begin Itemstring2.Add(SubStr(inputStr,' ',i)); i := i+1; end; end else Itemstring2.Add(Sstr); sign:=0; for j:=0 to ItemString2.Count-1 do begin if ItemString1.IndexOf(ItemString2.Strings[j])<> -1 then begin sign:=Sign+1; end; end; if Sign>=repeatcount then begin result:=false; end; finally FreeAndNil(ItemString2); end; finally FreeAndNil(itemString1); end;end; //****************************************************************// // 函数:把一个中文字符串分成几个字符的组合储存在StringList中 // // 范围:可以判断中文与英文混合,返回Stringlist需要在外面声明才 // // 可以调用 // // 描述:inputstr 目标字符;BoxInt几个为一组; // // ItemList 返回的TStringList // // 例子:findeString(‘怎样编程实现发电子邮件’, 4, // // ItemList:TstringList); // //****************************************************************// procedure findeString(inputStr: String; BoxInt: integer; ItemList:TstringList); var input:WideString; i:Integer; m,n:Integer; begin input:=inputStr; m:=0; for i:=1 to (length(input)-Boxint) do begin if i<=length(input)-Boxint then begin if m=0 then ItemList.Add(copy(input,1,Boxint)) else begin ItemList.Add(copy(input,i,Boxint)); end; m:=m+1; end; end; end; //****************************************************************// // 函数:判断两个中文字符串连续几个字符串相同的 // // 范围:可以判断中文与英文混合,返回Stringlist需要在外面声明才 // // 可以调用 // // 描述:inputStr 目标字符;sourStr原有字符BoxInt几个为一组; // // // repeatcount 重复几次报错 . // // 例子:Chafinepeat('怎样编程实现发电子邮件', // // '怎样编程实现发电子邮件', // // 2,1); // inputStr和sourStr没有两个或两个以上的重复的连续字符返回true.反之为false // // //****************************************************************// function Chafindepeat(inputStr, sourStr: String; BoxInt,repeatcount: Integer): Boolean; var ItemList1,ItemList2 :TStringList; sign,i:Integer; begin result:=true; ItemList1:=TStringList.Create; try findeString(inputStr, BoxInt, ItemList1); ItemList2:=TStringList.Create; try findeString(SourStr,BoxInt,ItemList2 ); //---------------- sign:=0; for i:=0 to ItemList2.Count-1 do begin if Itemlist1.IndexOf(ItemList2.Strings[i])<> -1 then begin sign:=Sign+1; end; end; if Sign>=repeatcount then begin result:=false; end; //---------------- finally FreeAndNil(ItemList2); end; finally FreeAndNil(ItemList1); end;end;
function SplitString(const source,ch:string):tstringlist; var temp:string; i:integer; begin result:=tstringlist.Create; temp:=source; i:=pos(ch,source); while i<>0 do begin result.Add(copy(temp,0,i-1)); delete(temp,1,i); i:=pos(ch,temp); end; result.Add(temp); end; 调用: s:=splitstring('afsdfsdaaa|bbfdsfsdb|ccc','|'); for i:=0 to s.Count-1 do b:=b+s.Strings[i]+#13; showmessage(b); s.free;
const List: TStrings);
var
I, L: Integer;
Left: AnsiString;
begin
Assert(List <> nil);
List.Clear;
L := Length(Sep);
I := Pos(Sep, S);
while (I > 0) do
begin
Left := LeftStr(S, I - 1);
List.Add(Left);
Delete(S, 1, I + L - 1);
I := Pos(Sep, S);
end;
if S <> '' then
List.Add(S);
end;
TStringList对象有个CommaText属性,你只要把你的String赋给它就可以从TStringList中读取了。
var
s: string;
i: integer;
StrList: TStringList;
tempi: integer;
begin
Strlist:=TStringList.Create;
StrList:=TStringList.Create;
S := 个'ab,cd,efg,h,ijk';
tempi:=0; for i:=0 to Length(s) -1 do
if not (S[i] in ['a'..'z' ,'A'..'Z']) then
begin
StrList.Add(Copy(s,tempi,i-tempi));
tempi:=i;
end; ShowMessage(StrList.Text);end;
// 函数:已Border字符为标准提取字符串 //
// 范围:字符串中有特殊的字符进行分界 //
// 描述:SourStr 比较字符;Border 分界字符; //
// Index 分割后的字符串的顺序号(int) //
//****************************************************************//function SubStr(SourStr: string; Border: Char;
Index: integer): string;var
TempStr : string;
I : integer;
begin
TempStr := SourStr; if Pos(Border,SourStr)=0 then
begin
if Length(SourStr) > 0 then Result := SourStr
else Result := '';
end
else
begin
try
for I := 1 to Index - 1 do
begin
if Pos(Border,TempStr) = 0 then
begin
Result := '';
Exit;
end;
Delete(TempStr,1,Pos(Border,TempStr));
TempStr := Trim(TempStr);
end;
except
result := '';
Exit;
end;
if Pos(Border,TempStr)=0 then
Result := TempStr
else
Result := Copy(TempStr,1,Pos(Border,TempStr) - 1);
end;
end;//****************************************************************//
// 函数:判断输入(英文)字符判断有几个相同的字符 //
// 范围:字符串中必须有空格来断开 //
// 描述:inputstr 比较字符;sourStr 原字符; //
// Repeatcount 几个相同的字符(int) //
// 例子:Engfindepeat(‘meng xian bao ’,'meng xian ' ,2 ) //
// 返回 false; //
// 说明:'meng xian bao'中有‘meng xian ’ 的字符已经达到了//
// 2 个返回false,否则返回true. //
//****************************************************************//
function Engfindepeat(inputStr, sourStr: String;
repeatcount: Integer): Boolean;
var
Sstr,Dstr : String;
i,j : Integer;
ItemString1,ItemString2:TStringList;
sign:Integer;
begin
result:=true ;
ItemString1:=TStringList.Create;
try
ItemString1.Clear;
if Pos(' ',SourStr) > 0 then
begin
i := 1;
while (SubStr(SourStr,' ',i) <> '') do
begin
Itemstring1.Add(SubStr(SourStr,' ',i));
i := i+1;
end;
end
else
Itemstring1.Add(SourStr);
//--------------
ItemString2:=TStringList.Create;
try
ItemString2.Clear;
if Pos(' ',inputStr) > 0 then
begin
i := 1;
while (SubStr(inputStr,' ',i) <> '') do
begin
Itemstring2.Add(SubStr(inputStr,' ',i));
i := i+1;
end;
end
else
Itemstring2.Add(Sstr); sign:=0;
for j:=0 to ItemString2.Count-1 do
begin
if ItemString1.IndexOf(ItemString2.Strings[j])<> -1 then
begin
sign:=Sign+1;
end;
end;
if Sign>=repeatcount then
begin
result:=false;
end; finally
FreeAndNil(ItemString2);
end; finally
FreeAndNil(itemString1);
end;end;
//****************************************************************//
// 函数:把一个中文字符串分成几个字符的组合储存在StringList中 //
// 范围:可以判断中文与英文混合,返回Stringlist需要在外面声明才 //
// 可以调用 //
// 描述:inputstr 目标字符;BoxInt几个为一组; //
// ItemList 返回的TStringList //
// 例子:findeString(‘怎样编程实现发电子邮件’, 4, //
// ItemList:TstringList); //
//****************************************************************//
procedure findeString(inputStr: String; BoxInt: integer; ItemList:TstringList);
var
input:WideString;
i:Integer;
m,n:Integer;
begin
input:=inputStr;
m:=0;
for i:=1 to (length(input)-Boxint) do
begin
if i<=length(input)-Boxint then
begin
if m=0 then ItemList.Add(copy(input,1,Boxint))
else
begin
ItemList.Add(copy(input,i,Boxint));
end;
m:=m+1;
end;
end;
end;
//****************************************************************//
// 函数:判断两个中文字符串连续几个字符串相同的 //
// 范围:可以判断中文与英文混合,返回Stringlist需要在外面声明才 //
// 可以调用 //
// 描述:inputStr 目标字符;sourStr原有字符BoxInt几个为一组; // //
// repeatcount 重复几次报错 . //
// 例子:Chafinepeat('怎样编程实现发电子邮件', //
// '怎样编程实现发电子邮件', //
// 2,1);
// inputStr和sourStr没有两个或两个以上的重复的连续字符返回true.反之为false // //
//****************************************************************//
function Chafindepeat(inputStr, sourStr: String;
BoxInt,repeatcount: Integer): Boolean;
var
ItemList1,ItemList2 :TStringList;
sign,i:Integer;
begin
result:=true;
ItemList1:=TStringList.Create;
try
findeString(inputStr, BoxInt, ItemList1);
ItemList2:=TStringList.Create;
try
findeString(SourStr,BoxInt,ItemList2 );
//----------------
sign:=0;
for i:=0 to ItemList2.Count-1 do
begin
if Itemlist1.IndexOf(ItemList2.Strings[i])<> -1 then
begin
sign:=Sign+1;
end;
end; if Sign>=repeatcount then
begin
result:=false;
end;
//----------------
finally
FreeAndNil(ItemList2);
end;
finally
FreeAndNil(ItemList1);
end;end;
var
temp:string;
i:integer;
begin
result:=tstringlist.Create;
temp:=source;
i:=pos(ch,source);
while i<>0 do
begin
result.Add(copy(temp,0,i-1));
delete(temp,1,i);
i:=pos(ch,temp);
end;
result.Add(temp);
end;
调用:
s:=splitstring('afsdfsdaaa|bbfdsfsdb|ccc','|');
for i:=0 to s.Count-1 do
b:=b+s.Strings[i]+#13;
showmessage(b);
s.free;