MEMO里有N行
判断每1行里的最后3个字符串是不是EXE,是就不管他,在判断下1行,如果最后3个字不是EXE就删除,
全部处理完后在判断每行的第2个字符是不是:号如果是就继续下1行,如果不是就删除

解决方案 »

  1.   

    var
      i:Integer;
    begin
      for i:=Memo1.Lines.Count -1 downto 0  do
      begin
        if not SameText(rightstr(Memo1.Lines[i],3),'EXE')then
           Memo1.Lines.Delete(i);
      end;
      for i:=Memo1.Lines.Count -1 downto 0  do
      begin
        if not SameText(leftstr(Memo1.Lines[i],2),':')then
           Memo1.Lines.Delete(i);
      end;
    end;
      

  2.   

    uses
    StrUtils;var
      i:Integer;
    begin
      for i:=Memo1.Lines.Count -1 downto 0  do
      begin
        if (not SameText(rightstr(Memo1.Lines[i],3),'EXE'))
          or(not SameText(leftstr(Memo1.Lines[i],2),':')) then
           Memo1.Lines.Delete(i);
      end;
    end;
      

  3.   

    var
      i:integer;
    begin
      for i:=mmo1.Lines.Count-1 downto 0 do
      begin
        if (UpperCase(RightStr(mmo1.Lines[i],3))<>'EXE') or (mmo1.Lines[i][2]<>':') then
          mmo1.Lines.Delete(i);
      end;
    end;
      

  4.   

    MEMO里有N行 
    判断每1行里的最后3个字符是不是EXE,是就不管他,在判断下1行,如果最后3个字不是EXE就删除着1行, 
    全部处理完后在判断每行的第2个字符是不是:号如果是就继续下1行,如果不是就删除着1行
    楼上的我测试了你的代码,怎么MEMO的内容全部删了呀,我要的是保留每行后3个字和每行前第2个字是:的内容
      

  5.   

    var 
      i:integer; 
    begin 
      for i:=mmo1.Lines.Count-1 downto 0 do 
      begin 
        if (UpperCase(RightStr(mmo1.Lines[i],3)) <>'EXE') or (mmo1.Lines[i][2] <>':') then 
          mmo1.Lines.Delete(i); 
      end; 
    end; 
    是可以的
    你出现的全部删除掉可能是红色那里的分号,输入法为中文输入的分号
      

  6.   

    楼主,你试了不好用的可能是:你的MEMO里exe是小写的,所以都删除了。
      

  7.   

    我的意思是比如
    MEMO内容
    c:\1.exe
    c:\z\x\x\c
    \2.exe
    c:\2.exe
    c:\3.exe
    就把
    c:\z\x\x\c
    \2.exe
    删除
    保留
    c:\1.exe
    c:\2.exe
    c:\3.exe
    我试了都不行呀都是全部删除了
      

  8.   

    就这么几句代码,就是干你说的事,肯定没问题全部删除了肯定其它地方有什么问题,你检查了':'是中文还是英文的了吗?
    或者你的Memo的内容里有空格?
      

  9.   

    uses StrUtils;procedure TForm1.Button1Click(Sender: TObject);
    var
      i:Integer;
    begin
      for i:=Memo1.Lines.Count -1 downto 0  do
      begin
        if (AnsiEndsText('.exe',memo1.Lines.Strings[i])=false)
         or (memo1.Lines.Strings[i][2]<>':') then
              Memo1.Lines.Delete(i);
      end;end;
      

  10.   

    我看了这个问题,觉得1楼的代码if not SameText(leftstr(Memo1.Lines[i],2),':')then 这句后面的冒号是中文状态下的,肯定不行。但后面几楼的代码都不错啊,为什么楼主还不结贴?我11楼的代码没错,楼主却说不行,于是我就在QQ上问楼主要了MEMO里面的内容,对内容进行处理,发现原来楼主MEMO里面每一行都有多余的空格,所以导致后三位取到的总是空格而并非“EXE”三个字符,所以我用Trim,于是问题解决了。全部代码如下:procedure TForm1.Button1Click(Sender: TObject);
    var
      i:Integer;
    begin
      for i:=Memo1.Lines.Count -1 downto 0  do
      begin
        if (AnsiEndsText('.exe',trim(memo1.Lines[i]))=false)
         or (memo1.Lines.Strings[i][2]<>':')
        then
              Memo1.Lines.Delete(i);
      end;end;
    希望各位朋友引以为诫,空格害死人。