var StrLst: TStringList; S: string; begin S := ';aaa;bb;ee;aa;ee;bb;bb;dddd'; WriteLn(S); StrLst := TStringList.Create; try StrLst.Duplicates := dupIgnore; StrLst.Sorted := True; StrLst.Delimiter := ';'; StrLst.DelimitedText := S; S := StrLst.DelimitedText; WriteLn(S); finally FreeAndNil(StrLst); end; end;
procedure TForm1.Button4Click(Sender: TObject); var a,b:Integer;sl:TStringList; begin sl:=TStringList.Create; sl.Delimiter:=';'; sl.DelimitedText:=';aaa;bb;ee;aa;ee;bb;bb;dddd'; for a:=sl.Count-1 downto 0+1 do begin for b:=a-1 downto 0 do begin if sl[a]=sl[b] then begin sl.Delete(a); Break; end; end; end; for a:=sl.Count-1 downto 0 do if sl[0]='' then sl.Delete(0); ShowMessage(sl.DelimitedText); sl.Free; end; 本来想给你写一个,无奈水平有限啊 最后请教了网友,才有上面的代码,完全满足你的要求,顺序不变
function DeleteDuplicate(S: String): String; var A: TStringList; i: Integer; begin Result := ''; A := TStringList.Create; try A.Delimiter := ';'; A.DelimitedText := S; i := 0; while i < A.Count do begin if (A.Strings[i] = '') or (A.IndexOf(A.Strings[i]) <> i) then A.Delete(i) else inc (i); end; Result := A.DelimitedText; finally A.Free; end; end;//调用的例子: procedure TForm1.FormCreate(Sender: TObject); begin ShowMessage (DeleteDuplicate(';aaa;bb;ee;aa;ee;bb;bb;dddd')); end;
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
s:=';aaa;bb;ee;aa;ee;bb;bb;dddd';
delete(s,1,1);
delete(s,14,9);
showmessage(s);
end;按一楼的要求写的
取得首个分隔的字符串与余下的进行比较(2)将内容写入一个TstringList,再对stringList进行操作,最后再组合stringList中的内容成字符串
var
StrLst: TStringList;
S: string;
begin
S := ';aaa;bb;ee;aa;ee;bb;bb;dddd';
WriteLn(S);
StrLst := TStringList.Create;
try
StrLst.Duplicates := dupIgnore;
StrLst.Sorted := True;
StrLst.Delimiter := ';';
StrLst.DelimitedText := S;
S := StrLst.DelimitedText;
WriteLn(S);
finally
FreeAndNil(StrLst);
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var a,b:Integer;sl:TStringList;
begin
sl:=TStringList.Create;
sl.Delimiter:=';';
sl.DelimitedText:=';aaa;bb;ee;aa;ee;bb;bb;dddd';
for a:=sl.Count-1 downto 0+1 do
begin
for b:=a-1 downto 0 do
begin
if sl[a]=sl[b] then
begin
sl.Delete(a);
Break;
end;
end;
end;
for a:=sl.Count-1 downto 0 do
if sl[0]='' then sl.Delete(0);
ShowMessage(sl.DelimitedText);
sl.Free;
end; 本来想给你写一个,无奈水平有限啊
最后请教了网友,才有上面的代码,完全满足你的要求,顺序不变
function DeleteDuplicate(S: String): String;
var
A: TStringList;
i: Integer;
begin
Result := '';
A := TStringList.Create;
try
A.Delimiter := ';';
A.DelimitedText := S;
i := 0;
while i < A.Count do
begin
if (A.Strings[i] = '') or (A.IndexOf(A.Strings[i]) <> i) then
A.Delete(i)
else
inc (i);
end;
Result := A.DelimitedText;
finally
A.Free;
end;
end;//调用的例子:
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage (DeleteDuplicate(';aaa;bb;ee;aa;ee;bb;bb;dddd'));
end;
赋值为:dupIgnore
过滤重复项,在保存