Delphi XE2 で開発を行っていますがテキストを表示する「TMemo」のコンポーネントがあります。
テキストを設定するには以下の1,2,3の方法があります。行数が多い場合は、ファイルから直接読み込んで表示がする方法が、追加して表示するより圧倒的に早い、という結果になります。
単純に読み込んで表示する場合は、ファイルから直接読み込んで下さい。
ただ、ファイルから読み込んで処理を行った結果を反映させる場合には、処理を行った結果のファイルリストを作成して、このファイルリストをストリームに保存してか、このストリームを一括して読み込むと、ファイルから直接読み込んだのと同じ効果が得られます。
1:文字列を追加して表示(遅い)
StrList1.LoadFromFile('C:\test\123.txt');
Memo1.Lines.BeginUpdate;
for iRow1 := to StrList1.Count-1 do
begin
Memo1.Lines.Add(StrList1.Strings[iRow1]);
end;
Memo1.Lines.EndUpdate;
2:ファイルから直接読み込んで表示(早い)
Memo1.Lines.LoadFromFile('C:\test\123.txt');
3:ストリームから読み込んで表示(処理を行った後にストリームから読み込みで早い)
ただし、絵文字を含んだ場合は、絵文字が正常に表示されません。
var
StrStream1: TMemoryStream;
StrList1: TStringList;
StrList2: TStringList;
begin
StrList1 := TStringList.Create;;
StrList2 := TStringList.Create;;
StrList1.LoadFromFile('C:\test\123.txt');
for iRow1 := 0 to trList1.Count-1 do
begin
StrList2.Lines.Add(...StrList1.Strings[iRow1]を処理した結果... );
end;
StrStream1 := TStringStream.Create(StrList2.Text);
Memo1.Lines.LoadFromStream(StrStream1);
StrStream1.Free;
StrList1.Free;
StrList2.Free;
end;
4:Delphi XE2 のファイル読み込み
文字コードを指定して、ファイルから直接読み込みます。絵文字の表示は可能です。
procedure TFormMain.LoadFile(Sender: TObject);
var
Enc1: TEncoding;
begin
//SJIS
if IntReadEncode1 = ENCODE_SJIS then
begin
Enc1 := TEncoding.GetEncoding(932);
try
Memo1.Lines.LoadFromFile(StrLoadFileName, Enc1);
finally
Enc1.Free;
end;
end
//JIS
else if IntReadEncode1 = ENCODE_JIS then
begin
Enc1 := TEncoding.GetEncoding(50220);
try
Memo1.Lines.LoadFromFile(StrLoadFileName, Enc1);
finally
Enc1.Free;
end;
end
//EUC
else if IntReadEncode1 = ENCODE_EUCJP then
begin
Enc1 := TEncoding.GetEncoding(20932);
try
Memo1.Lines.LoadFromFile(StrLoadFileName, Enc1);
finally
Enc1.Free;
end;
end
//UTF7
else if IntReadEncode1 = ENCODE_UTF7 then
begin
Memo1.Lines.LoadFromFile(StrLoadFileName, TEncoding.UTF7);
end
//UTF8 BOM
else if IntReadEncode1 = ENCODE_UTF8_BOM_ON then
begin
Memo1.Lines.LoadFromFile(StrLoadFileName);
end
//UTF8
else if IntReadEncode1 = ENCODE_UTF8_BOM_OFF then
begin
Memo1.Lines.LoadFromFile(StrLoadFileName, TEncoding.UTF8);
end
//UTF16 BOM BE
else if IntReadEncode1 = ENCODE_UTF16_BOM_ON_BE then
begin
Memo1.Lines.LoadFromFile(StrLoadFileName);
end
//UTF16 BE
else if IntReadEncode1 = ENCODE_UTF16_BOM_OFF_BE then
begin
Memo1.Lines.LoadFromFile(StrLoadFileName, TEncoding.BigEndianUnicode);
end
//UTF16 BOM LE
else if IntReadEncode1 = ENCODE_UTF16_BOM_ON_LE then
begin
Memo1.Lines.LoadFromFile(StrLoadFileName);
end
//UTF16 LE
else if IntReadEncode1 = ENCODE_UTF16_BOM_OFF_LE then
begin
Memo1.Lines.LoadFromFile(StrLoadFileName, TEncoding.Unicode);
end
//ここはない
else
begin
end;
end;