A mellékelt példaprogramban egy Memo-ba töltjük be a vizsgálandó szöveget, majd egy Statusbar segítségével íratjuk ki az eredményt. Létrehozunk egy Count nevű eljárást, mely paraméterként a Memo tartalmát várja. Lássuk, hogyan is épül fel.
Procedure TForm1.Count(str:string);
var
i, Words, Letters, Rows:integer;
BeforeSpace:boolean;
Begin
Létrehoztunk három változót. A Letters-ben a betűk, a Words-ben a szavak, míg a Rows-ban a sorok számát fogjuk tárolni. A vizsgálat elején mindhárom értéket lenullázzuk.
Letters:=0;
Words:=0;
Rows:=0;
Amennyiben a Memo tartalma nem üres, elvégezzük a vizsgálatot.
Ha a Memo nem üres, az azt jelenti, hogy legalább 1 sora van. Ezért a Rows-nak ezt adjuk értékül.
A BeforeSpace nevű logikai változóval a két szó közti elválasztást figyeljük. Ez lehet a szóköz, az Enter, és a soremelés karakterek valamelyike.
BeforeSpace:=False;
for i:=1 to Length(str) do
begin
if BeforeSpace and
(str[i]<>' ') and
(str[i]<>#13) and
(str[i]<>#10) then Inc(Words);
BeforeSpace:=(str[i]=' ') or
(str[i]=#13) or
(str[i]=#10);
Amennyiben a fenti három elválasztó karakter egyikével sem egyezik meg az éppen aktuális karakter, a betűk számát növeljük 1-el.
if (str[i] in [' ',#13,#10]) then
begin
end
else
Inc(Letters);
Amennyiben az Enter vezérlőkarakterre bukkanunk, a sorok számát növeljük meg.
if (str[i] in [#13]) then
Inc(Rows);
end;
end;
Végül a kapott eredményeket a SatusBar-on jelezzük ki.
StatusBar1.Panels[0].Text:='Szavak száma: '+IntToStr(Words);
StatusBar1.Panels[1].Text:='Karakterek száma: '+IntToStr(Letters);
StatusBar1.Panels[2].Text:='Sorok száma: '+IntToStr(Rows);
end;
A függvény meghívását a szöveget betöltő gomb OnClick eseményéhez rendeltük.
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
if OpenDialog1.FileName<>'' then
Count(Memo1.Text);
end;
A kapott eredményeket összehasonlíthatjuk a Word által számított adatokkal, amennyiben abba betöltjük az adott szöveget, majd az Eszközök -> Szavak száma menüpontra kattintunk.