delphi在特定点将文本插入到文本文件中

时间:2011-04-19 08:50:03

标签: delphi edit text-files

我想编辑一个文本文件。如果我读了一个特殊的行(让我们说// - 开始在这里编辑文本 - //)然后在这行后我想插入几行,但我不想覆盖现有的行。用delphi可以吗?谢谢!

示例文字:

这个

是一个文件

中包含文字

// - 开始在此处插入文字 - //

之间没有任何内容 编辑后

示例文字:

是一个文件

中包含文字

// - 开始在此处插入文字 - //

现在有一些东西

之间

之间没有任何内容

2 个答案:

答案 0 :(得分:7)

var
  SL: TStringList;
  InsTextPos: Integer;
begin
  SL := TStringList.Create;
  try
    SL.LoadFromFile('c:\test.txt');
    InsTextPos := SL.IndexOf('//--begin inserting text here--//');
    if InsTextPos >= 0 then
    begin
      SL.Insert(InsTextPos+1, 'Inserting Line 2');
      SL.Insert(InsTextPos+1, 'Inserting Line 1');
      SL.SaveToFile('c:\test.txt');
    end;
  finally
    SL.Free;
  end;
end;

答案 1 :(得分:3)

有几种方法可以做到这一点。

最简单的版本:

var 
  sl : TStringList;
  I : Integer;
begin
  sl := TStringList.Create;
  sl.LoadFromFile();
  // No you have an array of strings in memory one for each line
  for I := 0 to SL.Count -1 do
  begin
     sl.strings[I]; 
   end;
  sl.SaveToFile();
end;

您还可以使用其他文件IO命令,例如: 阅读文本文件:

  var
   t : TextFile;
  begin
    AssignFile(t,'FileName.txt');
    Reset(T);
    while not eof(t);
    begin
      Readln(T,LineOfText);
    end;
    CloseFile(T);
  end;

写出你想要的东西..

  var
   t : TextFile;
  begin
    AssignFile(t,'FileName.txt');
    Rewrite(T);
    Writeln(T,LineOfText);
    Writeln(T,LineOfText);
    Writeln(T,LineOfText);
    CloseFile(T);
  end;

应该注意的是,实际上上述两种方法实际上只是重写了文件的全部内容。

TFileStream类允许您操作文件的实际字节。通常,您需要阅读,直到找到预期的文本。然后预读并缓存文件的其余部分,同时写出文件的新结尾。