如在某目录里存在下列Pro/Engineer图档
body_bottom.prt.1
body_bottom.prt.2
body_bottom.prt.5
body_bottom.prt.11
body_bottom.prt.15
body_bottom.prt.20
body_bottom.prt.21
body_bottom.prt.22
body_bottom.prt.23
body_bottom.prt.24
body_bottom.prt.30
body_master.prt.1
body_master.prt.2
body_master.prt.3
body_master.prt.4
body_master.prt.5
body_master.prt.6
body_master.prt.7
body_master.prt.8
body_subassem.asm.1
body_subassem.asm.2
body_subassem.asm.3
body_subassem.asm.4
body_subassem.asm.5
body_subassem.asm.6
body_subassem.asm.50
body_top.prt.1
body_top.prt.2
body_top.prt.3
body_top.prt.4
body_top.prt.5
body_top_frame.prt.1
cover_bottom.prt.1
cover_bottom_frame.prt.1
cover_subassem.asm.1
cover_top.prt.1
key_frame.prt.1
l668-lable.prt.1
prt0001.prt.1
prt0002.prt.1
side_key.prt.1
side_key.prt.2
side_key.prt.3
side_key.prt.4
side_key.prt.5
side_key_assem.asm.1
side_key_assem.asm.2
side_key_assem.asm.3
side_rubber_key.prt.1
side_rubber_key.prt.2
side_rubber_key.prt.3
tcl-l668_main_assem.asm.1
tcl-l668_main_assem.asm.2
tcl-l668_main_assem.asm.3
提示:所有文件后缀中的数字是该类文件的版本文件,
      同一文件名中后缀数字最大的是最新版本.
想要的功能是: 
      要很快的将低版本文件过滤掉,即同文件名中只保留最大后缀名的文件!
           

解决方案 »

  1.   

    没什么高效的方法,遍历一遍吧procedure TForm1.Button1Click(Sender: TObject);  function IsSameName(const S1, S2: string): Boolean;
      var
        iPos, iPos2: Integer;
      begin
        Result := False;
        iPos := PosEx('.', S1);
        if Copy(S1, 1, iPos) <> Copy(S2, 1, iPos) then Exit;
        iPos2 := PosEx('.', S1, iPos + 1);
        if Copy(S1, 1, iPos2) <> Copy(S2, 1, iPos2) then Exit;
        Result := True;
      end;  function IsBigger(const S1, S2: string): Boolean;
      var
        iPos, iPos2: Integer;
      begin
        iPos := PosEx('.', S1);
        iPos2 := PosEx('.', S1, iPos + 1);
        Result := StrToInt(Copy(S1, iPos2 + 1, MaxInt)) > StrToInt(Copy(S2, iPos2 + 1, MaxInt));
      end;var
      I: Integer;
      g_SL, g_Res: TStringList;
    begin
      g_Res := TStringList.Create;
      g_SL := TStringList.Create;
    //////////
      g_SL.Add('body_bottom.prt.1');
      g_SL.Add('body_bottom.prt.2');
      g_SL.Add('body_bottom.prt.5');
      g_SL.Add('body_bottom.prt.11');
      g_SL.Add('body_bottom.prt.15');
      g_SL.Add('body_bottom.prt.20');
      g_SL.Add('body_bottom.prt.21');
      g_SL.Add('body_bottom.prt.22');
      g_SL.Add('body_bottom.prt.23');
      g_SL.Add('body_bottom.prt.24');
      g_SL.Add('body_bottom.prt.30');
      g_SL.Add('body_master.prt.1');
      g_SL.Add('body_master.prt.2');
      g_SL.Add('body_master.prt.3');
      g_SL.Add('body_master.prt.4');
      g_SL.Add('body_master.prt.5');
      g_SL.Add('body_master.prt.6');
      g_SL.Add('body_master.prt.7');
      g_SL.Add('body_master.prt.8');
      g_SL.Add('body_subassem.asm.1');
      g_SL.Add('body_subassem.asm.2');
      g_SL.Add('body_subassem.asm.3');
      g_SL.Add('body_subassem.asm.4');
      g_SL.Add('body_subassem.asm.5');
      g_SL.Add('body_subassem.asm.6');
      g_SL.Add('body_subassem.asm.50');
      g_SL.Add('body_top.prt.1');
      g_SL.Add('body_top.prt.2');
      g_SL.Add('body_top.prt.3');
      g_SL.Add('body_top.prt.4');
      g_SL.Add('body_top.prt.5');
      g_SL.Add('body_top_frame.prt.1');
      g_SL.Add('cover_bottom.prt.1');
      g_SL.Add('cover_bottom_frame.prt.1');
      g_SL.Add('cover_subassem.asm.1');
      g_SL.Add('cover_top.prt.1');
      g_SL.Add('key_frame.prt.1');
      g_SL.Add('l668-lable.prt.1');
      g_SL.Add('prt0001.prt.1');
      g_SL.Add('prt0002.prt.1');
      g_SL.Add('side_key.prt.1');
      g_SL.Add('side_key.prt.2');
      g_SL.Add('side_key.prt.3');
      g_SL.Add('side_key.prt.4');
      g_SL.Add('side_key.prt.5');
      g_SL.Add('side_key_assem.asm.1');
      g_SL.Add('side_key_assem.asm.2');
      g_SL.Add('side_key_assem.asm.3');
      g_SL.Add('side_rubber_key.prt.1');
      g_SL.Add('side_rubber_key.prt.2');
      g_SL.Add('side_rubber_key.prt.3');
      g_SL.Add('tcl-l668_main_assem.asm.1');
      g_SL.Add('tcl-l668_main_assem.asm.2');
      g_SL.Add('tcl-l668_main_assem.asm.3');
    //////////
      g_SL.Sort;
      g_Res.Add(g_SL[0]);
      for I := 1 to g_SL.Count - 1 do
      begin
        if IsSameName(g_Res[g_Res.Count - 1], g_SL[I]) then
        begin
          if IsBigger(g_SL[I], g_Res[g_Res.Count -1]) then
          begin
            g_Res[g_Res.Count -1] := g_SL[I];
          end;
        end else
        begin
          g_Res.Add(g_SL[I]);
        end;
      end;
      ShowMessage(g_Res.Text);
      g_SL.Free;
      g_Res.Free;
    end;
      

  2.   

    postren
    谢谢你的帮助,这正是我想得到的结果!!!