public
{ Public declarations }
end;
type
PRec = ^TRec;
TRec = record
str: string;
col: LongWord;
end;
type
zap = record
slovo : string;
chast : Longword;
end;
var
Form1: TForm1;
mas_slov: array of zap;
O: string;
implementation
{$R *.dfm}
function TrimEx( s: string ): string;
begin
Result := s;
Result := StringReplace( Result, ',', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '.', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '!', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '?', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '-', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, ';', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, ':', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '=', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '*', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '(', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, ')', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '/', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '_', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '"', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '+', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '\', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '<', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '>', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '[', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, ']', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '{', '', [rfReplaceAll, rfIgnoreCase] );
Result := StringReplace( Result, '}', '', [rfReplaceAll, rfIgnoreCase] );
// Убираем лишние символы..
end;
procedure TForm1.Button1Click(Sender: TObject);
var
StringCount: Word;
sl: TStringList;
l: TList;
i, j: integer;
s, tmp: string;
r: PRec;
f: boolean;
begin
StringCount := 0;
sl := TStringList.Create;
// выделяем слова
for i := 0 to Memo1.Lines.Count-1 do
begin
s := Memo1.Lines[i];
while Length( s ) > 0 do
begin
if Pos( ' ', s ) > 0 then
begin
tmp := Copy( s, 1, Pos( ' ', s )-1 );
Delete( s, 1, Pos( ' ', s ) );
tmp := TrimEx( tmp );
end
else
begin
tmp := s;
s := '';
tmp := TrimEx( tmp );
end;
if Trim( tmp ) <> '' then
sl.Add( tmp );
end;
end;
StringCount := sl.Count;
// Производим расчёт
l := TList.Create;
for i := 0 to sl.Count-1 do
begin
if l.Count = 0 then
begin
New( r );
r^.str := sl[i];
r^.col := 1;
l.Add( r );
end
else
begin
f := false;
for j := 0 to l.Count-1 do
begin
r := l[j];
if r^.str = sl[i] then
begin
r^.col := r^.col + 1;
l[j] := r;
f := true;
Break;
end;
end;
if not f then
begin
New( r );
r^.str := sl[i];
r^.col := 1;
l.Add( r );
end;
end;
end;
// Выводим результат
for i := 0 to l.Count-1 do
begin
r := l[i];
Memo2.Lines.Add( r^.str + ' - ' + IntToStr( r^.col ) + ' (' + Format( '%.2f%%', [r^.col/StringCount*100] ) + ')' );
//**********************************
mas_slov[i].slovo := r^.str;
mas_slov[i].chast := r^.col;
//**********************************
end;
l.Free;
sl.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
with OpenDialog1 do
begin
if not Execute then Exit;
Memo1.Lines.LoadFromFile(FileName);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
Var FST : TFileStream;
begin
FST := TFileStream.Create('slov.txt',fmCreate);
Memo2.Lines.SaveToStream(FST);
FST.Free;
end;
end.