Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

доработка в программе [D7, XP]


Страницы:   1 2

flunkkkk ©   (2008-12-21 15:12:00) 

программа открывает .txt файл, вывожу файл в мемо1 программа анализирует текст и в мемо2 указывает сколько раз каждое слово употребляется в тексте!
хочу создать еще кнопку чтобы в мемо2 программа упорядочила мне слова по  частоте употребления в тексте. А она мне просто показывает по порядку каждое слово сколько раз встречается!
вот мне подсказали ето:
TStringList(Memo2.Lines).Sort;
Memo2.Update;
Но чтото оно не работает! подскажите где ошибка???


{RASkov}   (2008-12-22 10:37:00) [1]

> [19] Сергей М. ©   (22.12.08 10:30)

Его условия:

> чтобы в мемо2 программа упорядочила мне слова по  частоте употребления в тексте.

А в "его" Мемо2 такого не сделать)


{RASkov}   (2008-12-22 10:35:00) [2]

> [18] flunkkkk ©   (22.12.08 10:24)

Ну и писАл бы чего-нибудь попроще.... а зачем для непрограммера такие "сложности"???

> просто после 6 лекций препод сказал что мы сможем написать что угодно  в делфи . .

В чем-то препод и прав. Я вот вообще ни на одной лекции не был...

С другой стороны, ты что тут хочешь, что бы твой курсач за тебя сделали?
Вот ты нашел код "выдирания" слов из текста... даже с их подсчетом, да еще и с процентным соотношением - повезло?)
А вот сортировку в том коде не предусмотрели :( Тут нужно переписывать.... А ты даже после 6 или сколько там лекций, нифика не можешь даже готовое переделать для себя) Я могу тебе написать CustomSort для StringList'а, но что тебе это даст? Тыж не сможешь его прикрутить куда нужно, тогда зачем тебе это писать?


Сергей М.   (2008-12-22 10:30:00) [3]


> flunkkkk


var
 sl: TStringList;
..
 sl := TStringList.Create;
 try
   sl.Assign(Memo.Lines);
   sl.Sort;
   Memo.Lines := sl;
 finally
   sl.Free;
 end;


flunkkkk   (2008-12-22 10:24:00) [4]

я не на программера учусь, у меня просто курсач в делфи и все я про него забуду . . . ..
просто после 6 лекций препод сказал что мы сможем написать что угодно  в делфи . . .


Германн   (2008-12-22 01:31:00) [5]


> Так что, ...копи-пасты тебя отчислят с учебы.... немного
> сам соображай что делаешь.... Мы поможем, не волнуйся

Ага. Поможем с превеликим удовольствием. Когда демобилизуешься. Если тогда ещё захочешь продолжать заниматься программированием. :)


{RASkov}   (2008-12-22 01:24:00) [6]

> [5] flunkkkk ©   (21.12.08 15:24)

http://forum.ishodniki.ru/index.php?topic=15424.0

> подсчет мне не надо! у менявыводит подсчитаные слова, мне только надо их отсортировать

Ну ну :) ...у тебя)

Сортировать в Мемо2 хочешь? Надеюсь тебе по кол-ву не нужно сортировку, ибо после
Memo2.Lines.Add( r^.str + ' - ' + IntToStr( r^.col ) + ' (' + Format( '%.2f%%', [r^.col/StringCount*100] ) + ')' );
уже не будет такой возможности. Только заново наполнять текст Мемо2 но перед этим сортировать по кол-ву нужно L, а он у тебя был локальным и уничтожен...
Так что, ...копи-пасты тебя отчислят с учебы.... немного сам соображай что делаешь.... Мы поможем, не волнуйся, но все делать за тебя - это не верно.
Вот подсказка:
Тип
TRec = record
 str: String;
 col: Integer;
end;
PRec = ^TRec;
прекрасно заменится TStringList'ом... А уже его данные отоброжать в виртуальном ЛистБоксе...
Так же подсчет можно вести уже при Екстракте слов... ни к чему кучу циклов делать...


Leonid Troyanovsky   (2008-12-21 15:49:00) [7]


> flunkkkk ©   (21.12.08 15:37) [13]

> можно поподробнее с листбоксом?

Можешь взглянуть на пример с TStringGrid
http://groups.google.com/group/fido7.ru.delphi/msg/8c27f707490716b2

Это как идея. Просто тогда стиль, скажем, lbVirtual
не был широко распространен.

--
Regards, LVT.


Leonid Troyanovsky   (2008-12-21 15:40:00) [8]


> {RASkov} ©   (21.12.08 15:34) [12]

> Сортировать можно как по словам, так и по кол-ву....
> Но можно и табличный компонент какой-нибудь использовать.
> .. но, имхо, достаточно ЛистБокса...

Для сортировать - достаточно TStringList.
А показывать - любой контрол с virtual, в т.ч. и ЛистБокс.

--
Regards, LVT.


flunkkkk   (2008-12-21 15:37:00) [9]

мне это не очень дошло, вот я и пишу в форум начинающим. ..
можно поподробнее с листбоксом?


{RASkov}   (2008-12-21 15:34:00) [10]

Достаточно 1 Мемо и 1 Листбокс...
В мемо текст, а в ЛистБоксе Слова с их кол-вом...
Листбокса достаточно - Strings - Сами слова Objects - Кол-во данного слова...
Сортировать можно как по словам, так и по кол-ву....
Но можно и табличный компонент какой-нибудь использовать... но, имхо, достаточно ЛистБокса...


Leonid Troyanovsky   (2008-12-21 15:33:00) [11]


> {RASkov} ©   (21.12.08 15:30) [10]

Спасибо. Жалко, что закрыли.
Мне есть что им сказать [ДВ] :)

--
Regards, LVT.


{RASkov}   (2008-12-21 15:30:00) [12]

> [8] Leonid Troyanovsky ©   (21.12.08 15:26)

http://www.delphimaster.ru/cgi-bin/forum.pl?n=0&id=1229791957


{RASkov}   (2008-12-21 15:28:00) [13]

> [5] flunkkkk ©   (21.12.08 15:24)

Ё-мое.... нафик тут указатели, нафик TList непосредственно???
У Мемо есть свойство Текст, где и есть весь текст - в нем и считай сколько слов....
Что такое PRec?....
В общем слишком все сложно, для простой задачи...


Leonid Troyanovsky   (2008-12-21 15:26:00) [14]


> {RASkov} ©   (21.12.08 15:21) [3]

> > Небось, двоешники посоветовали?

> Да нет, посоветовал это Сергей М.)

Я пропустил, дай ссыл, плиз.

--
Regards, LVT.


flunkkkk   (2008-12-21 15:25:00) [15]

"Да нет, посоветовал это Сергей М.) Но этот совет, т.н. подсказка, был на вопрос автора об сортировке, а никак не о подсчете)"
подсчет мне не надо! у меня выводит подсчитаные слова, мне только надо их отсортировать


{RASkov}   (2008-12-21 15:25:00) [16]

> [4] Leonid Troyanovsky ©   (21.12.08 15:24)

ст ёр:)


flunkkkk   (2008-12-21 15:24:00) [17]

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] ) + ')' );
   

  end;

  l.Free;
  sl.Free;


Leonid Troyanovsky   (2008-12-21 15:24:00) [18]


> {RASkov} ©   (21.12.08 15:19) [2]

>  стре все нафик.

Это как?

--
Regards, LVT.


{RASkov}   (2008-12-21 15:21:00) [19]

> [1] Leonid Troyanovsky ©   (21.12.08 15:18)
> Небось, двоешники посоветовали?

:)
Да нет, посоветовал это Сергей М.) Но этот совет, т.н. подсказка, был на вопрос автора об сортировке, а никак не о подсчете)


{RASkov}   (2008-12-21 15:19:00) [20]

> [0] flunkkkk ©   (21.12.08 15:12)

Ты решил, что двумя строчками кода написал всю программу? :)
Я начал было в этом посте рассказывать как тебе поступить, но оказалось, что тут много нужно тебе рассказывать.... стре все нафик.
Давай спрашивай конкретно, что тебе не ясно.
Покажи код, где ты подсчитываешь кол-во уникальных(?) слов в тексте.
Подсказка: тут рядом ветка, там есть решение по нахождению общего кол-ва слов в тексте, может пригодится чем нибудь...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо