var
  sL:TStrings;
  i:integer;
begin
  sL:=TStringList.Create ;
  try
    sL.LoadFromFile('D:\ABC.txt');
    for i:=0to sl.Count-1 do
    begin
      if pos('文字',sL[i])>0 then
      begin
        sL.Delete(i+1);
        sL.Delete(i);
然后savetofile...........
可我一删除就会报错,
请教我得怎么作?
我的意思就是想删除指定行,
和指定行的上一,二,三行,或下面的一二三行,谁能帮我?

解决方案 »

  1.   

    因为你每删一行,Count就会减1,i就有可能超出原来Count的值
    试一下这样
      i:=0;n:=sl.Count-1;
        while i<n do
          begin
             if pos('文字',sL[i])>0 then
                 begin
                   sl.Delete(i);
                   n:=n-1;//每删一行n就减1
                 end else
               i:=i+1;
          end;
      

  2.   

    //for...downto
    var
      sL:TStrings;
      i:integer;
    begin
      sL:=TStringList.Create ;
      try
        sL.LoadFromFile('D:\ABC.txt');
        for i:=sl.Count-1 downto 0 do
        begin
          if pos('文字',sL[i])>0 then
          begin
            sL.Delete(i);