在Delphi中,将两个文本文件加载到一个TMemo组件中的最佳方法是什么?

4

假设我有两个文本文件(.txt),并且我有一个带有一个TMemo组件的表单。最好的方法是什么,可以快速地将这两个文本文件加载到同一个Memo中?

3个回答

9
使用 TStringList 加载每个文件,然后使用 AddStrings 方法将内容传输到备忘录中。
var
  Tmp: TStringList;
...
Memo1.Lines.BeginUpdate;
try
  Memo1.Lines.Clear;
  Tmp := TStringList.Create;
  try
    Tmp.LoadFromFile(FileName1);
    Memo1.Lines.AddStrings(Tmp);

    Tmp.LoadFromFile(FileName2);
    Memo1.Lines.AddStrings(Tmp);
  finally
    Tmp.Free;
  end;
finally
  Memo1.Lines.EndUpdate;
end;

实际上,这可以轻松地被泛化为一个潜在有用的方法,如下所示:
procedure AppendMultipleTextFiles(Dest: TStrings; const FileNames: array of string);
var
  FileName: string;
  Tmp: TStringList;
begin
  Dest.BeginUpdate;
  try
    Tmp := TStringList.Create;
    try
      for FileName in FileNames do
      begin
        Tmp.LoadFromFile(FileName);
        Dest.AddStrings(Tmp);
      end;
    finally
      Tmp.Free;
    end;
  finally
    Dest.EndUpdate;
  end;
end;

你可以这样使用这个方法:
Memo1.Lines.Clear;
AppendMultipleTextFiles(Memo1.Lines, [FileName1, FileName2]);

1
类似这样的内容:
sl := TstringList.Create;
try
  sl.LoadFromFile('1.TXT');
  memo1.Lines.Add(sl.Text);

  sl.Clear;
  sl.LoadFromFile('2.TXT');
  memo1.Lines.Add(s2.Text);


finally
  sl.Free
end;

3
{btsdaf} - David Heffernan
1
{btsdaf} - David Heffernan
1
{btsdaf} - kobik
{btsdaf} - David Heffernan
1
{btsdaf} - kobik
显示剩余2条评论

1

不使用任何TStringList:

uses System.IOUtils;

Memo1.Text := TFile.ReadAllText('1.txt') + #13#10 + TFile.ReadAllText('2.txt');

当您将带有换行符的字符串分配给TStrings.Text时,该字符串将自动拆分为多个字符串,可以通过以下控制台程序证明:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Classes,
  System.IOUtils;

var StringList: TStringList;
    s: string;
begin
  try
    StringList := TStringList.Create;
    StringList.Text := TFile.ReadAllText('1.txt');
    for s in StringList do
      begin
        Writeln(s);
        Writeln('-----');
      end;
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

更多来自docwiki

当设置文本时,值将被解析为子字符串,每当遇到回车符或换行符时就会分隔。(两者不需要成对出现)。

这种方法提高了可读性,但消耗了大量内存。


我看到了与@Ago回答中相同的问题,但我认为这是最简短的方法:一行代码的解决方案 :) - zawuza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接