Для Delphi 10.1 (Берлин) или новее лучшее решение описано в ответе Уве.
Для более старых версий Delphi я нашел решение, создав дочерний класс TStringList
и переопределяя виртуальную функцию TStrings.GetTextStr
, но я буду рад узнать, есть ли лучшее решение или кто-то нашел что-то не так в моем решении
Интерфейс:
uses
Classes;
type
TMyStringList = class(TStringList)
private
FIncludeLastLineBreakInText : Boolean;
protected
function GetTextStr: string; override;
public
constructor Create(AIncludeLastLineBreakInText : Boolean = False); overload;
property IncludeLastLineBreakInText : Boolean read FIncludeLastLineBreakInText write FIncludeLastLineBreakInText;
end;
Реализация:
uses
StrUtils;
constructor TMyStringList.Create(AIncludeLastLineBreakInText : Boolean = False);
begin
inherited Create;
FIncludeLastLineBreakInText := AIncludeLastLineBreakInText;
end;
function TMyStringList.GetTextStr: string;
begin
Result := inherited;
if(not IncludeLastLineBreakInText) and EndsStr(LineBreak, Result)
then SetLength(Result, Length(Result) - Length(LineBreak));
end;
Пример:
procedure TForm1.Button1Click(Sender: TObject);
var
Lines : TStrings;
begin
Lines := TMyStringList.Create();
try
Lines.LoadFromFile('.\input.txt');
Lines.SaveToFile('.\output.txt');
finally
Lines.Free;
end;
end;