テキストファイル書き込み用クラス

これまでC# で作成してきた「SourceToHTML」を、Delphi に焼きなおしてみます。

TextWriter.pas


//*******************************************************************************************************
// テキストファイル 書き込み用クラス
//*******************************************************************************************************
unit TextWriter;

interface
uses
Classes;

type
TTextWriter = class
private
textWriter: TStringList;
fileName: string;
writeBuffer: WideString;
IsOpen: Boolean;

procedure putLine();

public
constructor Create(fileName:string);
destructor Destroy; override;
procedure Close();
procedure putChar(c:WideChar);
procedure putString(s:WideString);
end;

const
NEWLINE:WideChar = #13;

implementation
//----------------------------------------------------------------------------------------------------
// 初期化
//----------------------------------------------------------------------------------------------------
constructor TTextWriter.Create(fileName:string);
begin
self.fileName := fileName;
writeBuffer := '';
IsOpen := false;
end;
//----------------------------------------------------------------------------------------------------
// 終了
//----------------------------------------------------------------------------------------------------
destructor TTextWriter.Destroy();
begin
Close();
inherited;
end;
procedure TTextWriter.Close();
begin
//OPENしてたら
if (IsOpen) then
begin
//書き込み用バッファに何か残っていたら
if (writeBuffer <> '') then
begin
//書き込み用バッファの内容を書き込み、バッファをクリアする
putLine();
end;

//CLOSEする
textWriter.SaveToFile(fileName);
textWriter.Free;
IsOpen := false;
end;
end;
//----------------------------------------------------------------------------------------------------
// 出力ファイルに文字列を書く
//----------------------------------------------------------------------------------------------------
procedure TTextWriter.putString(s:WideString);
var
i:Integer;
begin
for i := 1 to Length(s) do
begin
putChar(s[i]);
end;
end;
//----------------------------------------------------------------------------------------------------
// 出力ファイルに1文字ずつ書く
//----------------------------------------------------------------------------------------------------
procedure TTextWriter.putChar(c:WideChar);
begin
//まだOPENしてなかったら
if (not IsOpen) then
begin
//OPENする
textWriter := TStringList.Create();
IsOpen := true;
end;

//改行コードが渡されたら
if (c = NEWLINE) then
begin
//書き込み用バッファの内容を書き込み、バッファをクリアする
putLine();
end
else
begin
//書き込み用バッファに1文字追加する
writeBuffer := writeBuffer + c;
end;
end;
//----------------------------------------------------------------------------------------------------
// 書き込み用バッファの内容を書き込み、バッファをクリアする
//----------------------------------------------------------------------------------------------------
procedure TTextWriter.putLine();
begin
textWriter.Append(writeBuffer);
writeBuffer := '';
end;

end.