我有一个文本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个请大侠们帮忙看看代码要怎么写。,谢谢!

解决方案 »

  1.   

    用这个函数 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;
      

  2.   

    如此调用var
      sLi: TStringList;
    begin
      sLi := TStringList.Create;
      try
        sLi.LoadFromFile('c:\111.txt');
        RemoveDuplicates(sLi);
        sLi.SaveToFile('c:\111.txt');
      finally
        sLi.Free;
      end;
    end;
      

  3.   

    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;
    方法不是很好,没有任何优化,仅仅达到目的而已。仅供参考。