有一文件如下:
N2 M31
N4 G5
N6 C8
...........
N124 ......
现欲做一程序将文件读入,将其中N2 N4 N6...等删除,并将"M31 G5 C8" 用"M7"替换掉.
怎样才能实现???
请高手赐教!!!(最好能有程序~~~)不胜感激~~~~~~~~~!!!!!!!!!

解决方案 »

  1.   

    按楼主的要求:
    ========================
    有一文件如下:
    N2 M31
    N4 G5
    N6 C8
    ...........
    N124 ......
    现欲做一程序将文件读入,将其中N2 N4 N6...等删除,并将"M31 G5 C8" 用"M7"替换掉.
    怎样才能实现???
    请高手赐教!!!(最好能有程序~~~)不胜感激~~~~~~~~~!!!!!!!!!
    ===================================
    替换完成后,只剩下
    M7
    M7
    M7
    .
    .
    .M7
      

  2.   

    呵呵,楼主是说“现欲做一程序将文件读入,将其中N2 N4 N6...等删除,并将"M31 G5 C8" 用"M7"替换掉.”而不是“M31 G5 C8等”
      

  3.   

    var
      sl: TStringList;
      i: integer;
    begin
      sl := TStringList.Create();
      try
        sl.LoadFromFile('file.txt');
        for i := 0 to sl.Count - 1 do
        begin
          sl.Strings[i] := Copy(sl.Strings[i], Pos(' ', sl.Strings[i], MaxInt);
          if sl.Strings[i] = 'M31' or sl.Strings[i] = 'G5' or sl.Strings[i] = 'C8' then
            sl.Strings[i] := 'M7';
        end;
        sl.SaveToFile('file2.txt');
      finally
        sl.Free();
      end;
    end;
      

  4.   

    上面的代码编译通不过,使用下面的代码:
    var
      sl: TStringList;
      i: integer;
    begin
      sl := TStringList.Create();
      try
        sl.LoadFromFile('file.txt');
        for i := 0 to sl.Count - 1 do
        begin
          sl.Strings[i] := Copy(sl.Strings[i], Pos(' ', sl.Strings[i]), MaxInt);
          if (sl.Strings[i] = 'M31') or (sl.Strings[i] = 'G5') or (sl.Strings[i] = 'C8') then
            sl.Strings[i] := 'M7';
        end;
        sl.SaveToFile('file2.txt');
      finally
        sl.Free();
      end;
    end;
      

  5.   

    cuilj(一云忆水)的方法很好的~~
      

  6.   

    呵呵~~~~~~~还是 yrb兄了解`````
    cuilj(一云忆水)兄理解错误了,我的文件中并不都是"M31 G5 C8"
    只是将"M31 G5 C8"替换,其他的并不替换.
      

  7.   

    yrb兄:
        你的代码好象不能实现替换呀?我用的是D7.另外我想多个文件一起处理,怎样才能实现批处理???还请高手指点~~~~~~~~
      

  8.   

    Copy(sl.Strings[i], Pos(' ', sl.Strings[i]), MaxInt)
    改成
    Copy(sl.Strings[i], Pos(' ', sl.Strings[i])+1, MaxInt)
    应该就可以了
      

  9.   

    我疏忽了,wjowner(Jerry.W)的建议是正确的。
    可以使用线程啊,在线程里执行上面的代码,这样就可以同时处理多个文件了。
      

  10.   

    替换是正确了,可是我要的是"M31 G5 C8"三行替换成一行"M7",而不是三行"M7".if (sl.Strings[i] = 'M31') or (sl.Strings[i] = 'G5') or (sl.Strings[i] = 'C8') then
            sl.Strings[i] := 'M7';这句话我怎么改也不行啊?请高人继续指点一二.问题解决今晚就结帖~~~~~~~~~~~~~
      

  11.   

    var
      sl: TStringList;
      i: integer;
    begin
      sl := TStringList.Create();
      try
        sl.LoadFromFile('file.txt');
        for i := 0 to sl.Count - 1 do
          sl.Strings[i] := Copy(sl.Strings[i], Pos(' ', sl.Strings[i])+1, MaxInt);
        for i := 0 to sl.Count - 1 do
        begin
          if (i+2)>(sl.Count-1) then break;
          if sl.Strings[i] = 'M31' and sl.Strings[i+1] = 'G5' and sl.Strings[i+2] = 'C8' then
          begin 
            sl.Strings[i] := 'M7';
            sl.Strings[i+1].Delete;
            sl.Strings[i+2].Delete;
          end;        
        end;
        sl.SaveToFile('file2.txt');
      finally
        sl.Free();
      end;
    end
      

  12.   

    sl.Strings[i+1].Delete;
            sl.Strings[i+2].Delete;
    ??????????????????好象有问题吧~~~~~~~~~~~~~~~~~~~~~
      

  13.   

    ok了,问题解决了,正确应该是下面的:
    var
      sl: TStringList;
      i: integer;
    begin
      sl := TStringList.Create();
      try
        sl.LoadFromFile('file.txt');
        for i := 0 to sl.Count - 1 do
          sl.Strings[i] := Copy(sl.Strings[i], Pos(' ', sl.Strings[i])+1, MaxInt);
        for i := 0 to sl.Count - 1 do
        begin
          if (i+2)>(sl.Count-1) then break;
          if (sl.Strings[i] = 'M31') and (sl.Strings[i+1] = 'G5') and (sl.Strings[i+2] = 'C8') then
          begin
            sl.Strings[i] := 'M7';
            sl.Delete(i+1);
            sl.Delete(i+1);
          end;
        end;
        sl.SaveToFile('file2.txt');
      finally
        sl.Free();
      end;
    end;多谢各位的帮忙,这个问题到此为止,结帖了~~~~~~~~~~~~~~~~~~~~~~~~~~~~`^_^