Форум: "Начинающим";
Текущий архив: 2009.02.01;
Скачать: [xml.tar.bz2];
Вниздоработка в программе Найти похожие ветки
← →
flunkkkk © (2008-12-21 15:12) [0]программа открывает .txt файл, вывожу файл в мемо1 программа анализирует текст и в мемо2 указывает сколько раз каждое слово употребляется в тексте!
хочу создать еще кнопку чтобы в мемо2 программа упорядочила мне слова по частоте употребления в тексте. А она мне просто показывает по порядку каждое слово сколько раз встречается!
вот мне подсказали ето:
TStringList(Memo2.Lines).Sort;
Memo2.Update;
Но чтото оно не работает! подскажите где ошибка???
← →
Leonid Troyanovsky © (2008-12-21 15:18) [1]
> flunkkkk © (21.12.08 15:12)
> вот мне подсказали ето:
> TStringList(Memo2.Lines).Sort;
Небось, двоешники посоветовали?
Выводи не в мемо2, а, скажем, TListBox со стилем OwnerDraw.
А уж показывать будет оный тот StringList, в который слова сложишь.
--
Regards, LVT.
← →
{RASkov} © (2008-12-21 15:19) [2]> [0] flunkkkk © (21.12.08 15:12)
Ты решил, что двумя строчками кода написал всю программу? :)
Я начал было в этом посте рассказывать как тебе поступить, но оказалось, что тут много нужно тебе рассказывать.... стре все нафик.
Давай спрашивай конкретно, что тебе не ясно.
Покажи код, где ты подсчитываешь кол-во уникальных(?) слов в тексте.
Подсказка: тут рядом ветка, там есть решение по нахождению общего кол-ва слов в тексте, может пригодится чем нибудь...
← →
{RASkov} © (2008-12-21 15:21) [3]> [1] Leonid Troyanovsky © (21.12.08 15:18)
> Небось, двоешники посоветовали?
:)
Да нет, посоветовал это Сергей М.) Но этот совет, т.н. подсказка, был на вопрос автора об сортировке, а никак не о подсчете)
← →
Leonid Troyanovsky © (2008-12-21 15:24) [4]
> {RASkov} © (21.12.08 15:19) [2]
> стре все нафик.
Это как?
--
Regards, LVT.
← →
flunkkkk © (2008-12-21 15:24) [5]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;
← →
{RASkov} © (2008-12-21 15:25) [6]> [4] Leonid Troyanovsky © (21.12.08 15:24)
стёр :)
← →
flunkkkk © (2008-12-21 15:25) [7]"Да нет, посоветовал это Сергей М.) Но этот совет, т.н. подсказка, был на вопрос автора об сортировке, а никак не о подсчете)"
подсчет мне не надо! у меня выводит подсчитаные слова, мне только надо их отсортировать
← →
Leonid Troyanovsky © (2008-12-21 15:26) [8]
> {RASkov} © (21.12.08 15:21) [3]
> > Небось, двоешники посоветовали?
> Да нет, посоветовал это Сергей М.)
Я пропустил, дай ссыл, плиз.
--
Regards, LVT.
← →
{RASkov} © (2008-12-21 15:28) [9]> [5] flunkkkk © (21.12.08 15:24)
Ё-мое.... нафик тут указатели, нафик TList непосредственно???
У Мемо есть свойство Текст, где и есть весь текст - в нем и считай сколько слов....
Что такое PRec?....
В общем слишком все сложно, для простой задачи...
← →
{RASkov} © (2008-12-21 15:30) [10]> [8] Leonid Troyanovsky © (21.12.08 15:26)
http://delphimaster.net/view/1-1229791957/
← →
Leonid Troyanovsky © (2008-12-21 15:33) [11]
> {RASkov} © (21.12.08 15:30) [10]
Спасибо. Жалко, что закрыли.
Мне есть что им сказать [ДВ] :)
--
Regards, LVT.
← →
{RASkov} © (2008-12-21 15:34) [12]Достаточно 1 Мемо и 1 Листбокс...
В мемо текст, а в ЛистБоксе Слова с их кол-вом...
Листбокса достаточно - Strings - Сами слова Objects - Кол-во данного слова...
Сортировать можно как по словам, так и по кол-ву....
Но можно и табличный компонент какой-нибудь использовать... но, имхо, достаточно ЛистБокса...
← →
flunkkkk © (2008-12-21 15:37) [13]мне это не очень дошло, вот я и пишу в форум начинающим. ..
можно поподробнее с листбоксом?
← →
Leonid Troyanovsky © (2008-12-21 15:40) [14]
> {RASkov} © (21.12.08 15:34) [12]
> Сортировать можно как по словам, так и по кол-ву....
> Но можно и табличный компонент какой-нибудь использовать.
> .. но, имхо, достаточно ЛистБокса...
Для сортировать - достаточно TStringList.
А показывать - любой контрол с virtual, в т.ч. и ЛистБокс.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-12-21 15:49) [15]
> flunkkkk © (21.12.08 15:37) [13]
> можно поподробнее с листбоксом?
Можешь взглянуть на пример с TStringGrid
http://groups.google.com/group/fido7.ru.delphi/msg/8c27f707490716b2
Это как идея. Просто тогда стиль, скажем, lbVirtual
не был широко распространен.
--
Regards, LVT.
← →
{RASkov} © (2008-12-22 01:24) [16]> [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"ом... А уже его данные отоброжать в виртуальном ЛистБоксе...
Так же подсчет можно вести уже при Екстракте слов... ни к чему кучу циклов делать...
← →
Германн © (2008-12-22 01:31) [17]
> Так что, ...копи-пасты тебя отчислят с учебы.... немного
> сам соображай что делаешь.... Мы поможем, не волнуйся
Ага. Поможем с превеликим удовольствием. Когда демобилизуешься. Если тогда ещё захочешь продолжать заниматься программированием. :)
← →
flunkkkk © (2008-12-22 10:24) [18]я не на программера учусь, у меня просто курсач в делфи и все я про него забуду . . . ..
просто после 6 лекций препод сказал что мы сможем написать что угодно в делфи . . .
← →
Сергей М. © (2008-12-22 10:30) [19]
> flunkkkkvar
sl: TStringList;
..
sl := TStringList.Create;
try
sl.Assign(Memo.Lines);
sl.Sort;
Memo.Lines := sl;
finally
sl.Free;
end;
← →
{RASkov} © (2008-12-22 10:35) [20]> [18] flunkkkk © (22.12.08 10:24)
Ну и писАл бы чего-нибудь попроще.... а зачем для непрограммера такие "сложности"???
> просто после 6 лекций препод сказал что мы сможем написать что угодно в делфи . .
В чем-то препод и прав. Я вот вообще ни на одной лекции не был...
С другой стороны, ты что тут хочешь, что бы твой курсач за тебя сделали?
Вот ты нашел код "выдирания" слов из текста... даже с их подсчетом, да еще и с процентным соотношением - повезло?)
А вот сортировку в том коде не предусмотрели :( Тут нужно переписывать.... А ты даже после 6 или сколько там лекций, нифика не можешь даже готовое переделать для себя) Я могу тебе написать CustomSort для StringList"а, но что тебе это даст? Тыж не сможешь его прикрутить куда нужно, тогда зачем тебе это писать?
← →
{RASkov} © (2008-12-22 10:37) [21]> [19] Сергей М. © (22.12.08 10:30)
Его условия:
> чтобы в мемо2 программа упорядочила мне слова по частоте употребления в тексте.
А в "его" Мемо2 такого не сделать)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.02.01;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.008 c