DelphiメモNo001の最後の方で文字数や行数が増えると重くなると書きました。
今回は若干処理が速いバージョンをお届けします。
var
crlfPos: Integer;
i,Count: Integer;
sLine: String;
begin
Count:= 0;
for i := 0 to Memo1.Lines.Count - 1 do
begin
sLine:= Memo1.Lines[i];
crlfPos:= Pos(#13#10,sLine);
while crlfPos > 0 do
begin
Delete(sLine,crlfPos,Length(#13#10));
crlfPos:= Pos(#13#10,sLine);
end;
Count:= Count+Length(WideString(sLine));
end;
ShowMessage(IntToStr(Count)+'文字');
end;
今回は行単位で文字数をカウントしている。
Delphiメモその1のやり方はテキスト全体をいちいちカウントしていたので、分量が増えれば増えるほどどんどん遅くなるという欠点がある。
それに対して今回のやり方は、1行ごとに改行文字を削除して文字数をカウントしてから次の行に移っているので、
その1のやり方よりも高速な処理が可能となっている。
試しにRichEditコンポーネントで5250行、文字数120996文字のテキストの文字数カウントを計測したが、
その1のやり方は1531msかかったのに対して、今回のやり方は437msで処理し終えている。