【问题标题】:Delphi replace a lineDelphi 替换一行
【发布时间】:2013-05-24 08:13:52
【问题描述】:

我有一个 .txt 文件,我想用新的一行替换一行。步骤如下:

  1. 读入 .txt 文件
  2. 将源保存到 TStringList
  3. 修改特定行中的一些数据
  4. 将新数据保存回原始文件。

我该怎么做?

【问题讨论】:

    标签: delphi


    【解决方案1】:

    像这样:

    var
      Strings: TStringList;
    ....
    Strings := TStringList.Create;
    try
      Strings.LoadFromFile(FileName);
      Strings[LineIndex] := NewValue;
      Strings.SaveToFile(FileName);
    finally
      Strings.Free;
    end;
    

    【讨论】:

      【解决方案2】:

      使用较新的 Delphi,您可以在一次调用 TFile.ReadAllLines() 中将文件内容作为字符串数组获取。

      program TestModifyLine;  {$APPTYPE CONSOLE}
      uses Types,IoUtils;
      
      procedure ModifyLine(fn:string;Index:integer;NewText:String);
      var lines:TStringDynArray;
      begin
        lines := TFile.ReadAllLines(fn);
        lines[Index] := NewText;
        TFile.WriteAllLines(fn,lines);
      end;
      
      begin
        ModifyLine('test.txt',12,'hello');
      end.
      

      【讨论】:

        【解决方案3】:

        如果您不想一次加载整个源文件浪费内存,可以使用TStreamReaderTStreamWriter一次读取/写入一行文件,读取后修改所需的行在写之前。

        Var
          Reader: TStreamReader;
          Writer: TStreamWriter:
          Line: String;
          LineNum: Integer;
        Begin
          Reader := TStreamReader.Create(...);
          Writer := TStreamWriter.Create(...);
          While not Reader.EndOfStream do
          Begin
            Line := Reader.ReadLine;
            Inc(LineNum);
            If LineNum = ... Then
            Begin
              ...
            End;
            Writer.WriteLine(Line);
          End;
          Writer.Free;
          Reader.Free;
        End;
        

        【讨论】:

        • 这将很难满足这个要求:将新数据保存回原始文件
        • 没那么难。首先保存到临时文件,然后删除原始文件,然后将临时文件重命名为原始文件名。需要额外的 2 行代码,并且无论如何它更安全,因为除非首先保存完全成功,否则不会覆盖原始文件,因此如果出现问题,文件不会损坏。如果发生错误,可以删除临时文件,保留原始文件。
        • 不用告诉我。显然我知道这一点。该信息应出现在答案中。
        • 太好了,我会试试的。谢谢
        猜你喜欢
        • 1970-01-01
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-31
        • 2023-04-07
        • 2011-06-08
        • 2014-03-28
        相关资源
        最近更新 更多