【问题标题】:Create a new text file after writing several entries in a existing text file在现有文本文件中写入多个条目后创建新文本文件
【发布时间】:2022-11-10 17:53:15
【问题描述】:

我正在尝试在现有 .txt 文件中的一定数量的条目之后创建一个新的 .txt 文件。例如,我想在我的文件中有 50 个条目,然后,我想创建一个新文件,并且这些条目在该新文件中继续存在。假设我不希望我的日志文件被很多行填充,而是有更多的 .txt 文件来划分条目​​。

这是我的示例代码:

procedure TForm1.Button3Click(Sender: TObject);

  function CountRows(Afilename: string): integer;
  var
    f: TextFile;
    i: integer;
  begin
    assignfile(f, afilename);
    reset(f);
    result := 0;
    while not eof(f) do
    begin
      readln(f);
      inc(result);
    end;
    closefile(f);
  end;

var
  f: TextFile;
  fileName: String;
  fs: Tformatsettings;
begin
  fs.shortdateformat := 'DD.MM.YYYY';
  fs.TimeSeparator := ':';
  filename := 'D:\LogLprf\LogLpFr ' + Datetostr(now, fs) + '.txt';
  assignfile(f, filename);
  if FileExists(filename) then
  begin
    if CountRows(filename)>=2 then
    begin
      filename := 'D:\LogLprf\LogLpFr ' + Datetostr(now, fs) +'1.txt';
      assignfile(f, filename);
      rewrite(f);
    end
    else
      append(f);
  end
  else
  begin
    rewrite(f);
  end;

  fs.ShortDateFormat := 'DD.MM.YYYY HH:mm:ss';
  Writeln(f, datetimetostr(now, fs)+'- '+'Some error...');
  closefile(f);
end;

使用上面的代码,我设法创建第一个文件并在第一个文件中达到条目限制时创建第二个文件。但是,第二个文件每次都会重新创建。我知道那是因为我打电话给rewrite(f),但我需要在前一个文件的条目结束后创建一个新的 .txt 文件。我也尝试在CountRows(filename) 之后调用fileexists(filename),但这不是一个好的解决方案,因为我会有很多嵌套的 if 语句,如果我们需要创建大量 .txt 文件,这将无法解决问题。 我也尝试过循环,但这也不能解决问题。 欢迎提出任何建议...谢谢

【问题讨论】:

    标签: delphi


    【解决方案1】:

    我现在没有运行环境来测试您的代码,但我认为您可以尝试类似的方法:

    procedure TForm1.Btn3Click(Sender: TObject);
    var
      FileCont: TStringList;
      FileName, S: String;
      fs: Tformatsettings;
    begin
      FileCont := TStringList.Create;
      try
        fs.shortdateformat := 'DD.MM.YYYY';
        fs.TimeSeparator := ':';
        FileName := 'D:LogLprfLogLpFr ' + Datetostr(Now(), fs) + '.txt';
    
        if FileExists(FileName) then
        begin
          FileCont.LoadFromFile(FileName);
          if FileCont.Count >=2 then
          begin
            Filename := 'D:LogLprfLogLpFr ' + Datetostr(Now(), fs) +  '1.txt';
            FileCont.Clear();
          end;
        end;
    
        fs.ShortDateFormat := 'DD.MM.YYYY HH:mm:ss';
        S := DateTimeToStr(Now(), fs) + '- ' + 'Some error...';
        FileCont.Add(S);
        FileCont.SaveToFile(Filename);
      finally
        FileCont.Free();
      end;
    end;
    

    【讨论】:

      猜你喜欢
      • 2021-10-04
      • 1970-01-01
      • 2023-02-07
      • 2018-01-23
      • 2014-10-23
      • 1970-01-01
      • 2016-03-17
      • 1970-01-01
      • 2021-10-12
      相关资源
      最近更新 更多