首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

求教TStringList删除重复项的有关问题

2013-07-04 
求教TStringList删除重复项的问题。我有一个文本1.txt,里面内容例如下:11223322441155...N个我想删除里面的

求教TStringList删除重复项的问题。
我有一个文本1.txt,里面内容例如下:
11
22
33
22
44
11
55
...
N个

我想删除里面的重复项,并且不保留。
处理后的想要结果是这样:
33
44
55
...
N个

但是用以下代码处理并不是这样子,它保留了一个重复。
  pList := TStringList.Create;
  pList.sorted := True;
  pList.Duplicates := dupIgnore;
  pList.LoadFromFile('1.txt');
  pList.SaveToFile('2.txt');
  pList.Free;
结果为:
11
22
33
44
55
...
N个

请大侠们帮忙看看代码要怎么写。,谢谢!
[解决办法]
用这个函数


 procedure RemoveDuplicates(const stringList : TStringList) ;
 var
   buffer: TStringList;
   cnt: Integer;
 begin
   stringList.Sort;
   buffer := TStringList.Create;
   try
     buffer.Sorted := True;
     buffer.Duplicates := dupIgnore;
     buffer.BeginUpdate;
     for cnt := 0 to stringList.Count - 1 do
       buffer.Add(stringList[cnt]) ;
     buffer.EndUpdate;
     stringList.Assign(buffer) ;
   finally
     FreeandNil(buffer) ;
   end;
 end;

[解决办法]


procedure GetUniqueStringList;
var
  CurrentString: string;
  LastString: string;
  Count: Integer;
  Index: Integer;
  SourceList: TStringList;
  UniqueList: TStringList;
begin
  Count := 1;
  LastString := '';
  SourceList := TStringList.Create;
  UniqueList :=  TStringList.Create;
  try
    SourceList.LoadFromFile('1.txt');
    SourceList.Sorted := True;
    for Index :=0 to Pred(SourceList.Count) do
    begin
      CurrentString := SourceList[Index];
      if CurrentString = LastString then
        Count := Count + 1
      else
      begin
        if LastString <> '' then
        begin
          if Count = 1 then
            UniqueList.Add(LastString)
          else
            Count := 1;


        end;
      end;
      LastString := CurrentString;
    end;
    if Count = 1 then UniqueList.Add(LastString);
    UniqueList.SaveToFile('2.txt');
  finally
    SourceList.Free;
    UniqueList.Free;
  end;
end;


方法不是很好,没有任何优化,仅仅达到目的而已。仅供参考。

热点排行