Показать сообщение отдельно
  #10  
Старый 12.02.2008, 21:49
MasteR MasteR вне форума
Прохожий
 
Регистрация: 14.05.2006
Сообщения: 12
Репутация: 10
По умолчанию

Код:
  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.

Не могу загнать данные (слово, частота) в массив записей mas_slov. Главное в Memo выводит r^.str и r^.col, а в массив нет!