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

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

как сделать такое


новычек ©   (2007-08-25 15:09:00) 

Мастера подскажите как сделать следующее:
в мемо в каждой строчке типо того:
A1=
A1=
A4=
A1=
A3=
A4=

Как мне в другое мемо записать кол-во каждого из 'A ='  ...
т.е. чтобы результат был в мемо такой:
A1 = 3
A4 = 2
A3 = 1

спасибо


новычек   (2007-08-25 16:28:00) [1]

спасибо, работает :)


Turbouser   (2007-08-25 16:23:00) [2]

:-)
procedure TForm1.Button1Click(Sender: TObject);
var
 i, Idx: integer;
begin
 Memo2.Clear;
 for i := 0 to Pred(Memo1.Lines.Count) do
   if (Memo1.Lines.Names[i] > '') then
   begin
     Idx := Memo2.Lines.IndexOfName(Memo1.Lines.Names[i]);
     if Idx < 0 then
       Memo2.Lines.Add(Memo1.Lines.Names[i] + '=1')
     else
       Memo2.Lines.ValueFromIndex[Idx] :=
         IntToStr(StrToInt(Memo2.Lines.ValueFromIndex[Idx]) + 1);
   end;
end;


Turbouser   (2007-08-25 16:22:00) [3]

> [5] новычек   (25.08.07 16:14)

procedure TForm1.Button1Click(Sender: TObject);
var
 i, Idx: integer;
begin
 Memo2.Clear;
 for i := 0 to Pred(Memo1.Lines.Count) do
 begin
   Idx := Memo2.Lines.IndexOfName(Memo1.Lines.Names[i]);
   if (Memo1.Lines.Names[i] > '') then
     if Idx < 0 then
       Memo2.Lines.Add(Memo1.Lines.Names[i] + '=1')
     else
       Memo2.Lines.ValueFromIndex[Idx] :=
         IntToStr(StrToInt(Memo2.Lines.ValueFromIndex[Idx]) + 1);
 end;
end;


новычек   (2007-08-25 16:14:00) [4]

чет не так делаю, повторяются:
var
k,j,i,l:integer;
s:string;
list:tstringlist;
begin
list:=tstringlist.Create;
for i:=0 to memo1.Lines.Count - 1 do
begin
 k:=0;
 s:=memo1.Lines.Strings[i];
 for l:=0 to list.Count - 1 do
   if list.Strings[l] <>s then
   list.Add(s);
   for j:=0 to memo1.Lines.Count - 1 do
   begin
     if memo1.Lines.Strings[j] = s then
     inc(k);
   end;
 memo2.Lines.Add(S+' = '+inttostr(k));

end;
list.Free;


sniknik   (2007-08-25 16:08:00) [5]

логика это элементарно...
сортируешь записи по значению до =
дальше читаешь значение первой записи и пока она равна такой же перебираешь записи с одновременным подсчетом, как только станет не равна (или конец записей) сохраняешь значение и счетчик в другое место, принимаешь новое значение скидываешь счетчик и продолжаешь цикл. все.

но вообще в том что понадобилось уже просматривается нужда если не в базах то хотябы в структурах для работы с данными (рекордсетах/подобия)... пихать в мемо структурированные(по идее) данные это себе дороже в итоге выйдет.


Zeqfreed   (2007-08-25 16:00:00) [6]

Выделяешь массив достаточного размера. Инициализируешь нулями. В цикле проходишься в списку. Берешь текущий индекс из строчки. По этому индексу инкрементируешь элемент массива. После завершения цикла проходишься по массиву, записывая необходимую информацию в текстовое поле.


новычек   (2007-08-25 15:32:00) [7]

не могу придумать логику для реализации этого


Turbouser   (2007-08-25 15:31:00) [8]

А в чем трудность?
Показывай как делаешь и что не получается.


Наверх

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