Delphiメモ

No012:高速な複数行文字数カウント

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で処理し終えている。

トップに戻る

関連ページ