Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.05.2013, 17:58
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию Сравнение строк memo и их сложение

Всем добрый вечер. подскажите пожалуйста, есть memo в него загружен текст:

User, 192.168.0.103, 18:39:15, 3642, 1, 2, 0, 0
User, 192.168.0.103, 18:39:15, 3642, 3, 4, 0, 0
Admin, 192.168.0.103, 18:39:15, 3642, 2, 6, 0, 0
Admin, 192.168.0.103, 18:39:15, 3642, 7, 8, 0, 0

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

теперь на примере:
Имеется 4е строки которые описаны выше, в первых двух имя повторяется это значит что 5 и 6й столбец прибавляем между собой label5.caption:=1+3 и label6.caption:=2+4. Сколько строк за ранее не известно каждый раз прибавляются и имена могут чередоваться.

Как разбить строки нашёл, а как сделать так чтоб он по строчно разбивал складывал и тд и тп ума не приложу.
Ответить с цитированием
  #2  
Старый 12.05.2013, 21:09
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вместо мемо нужен листбокс
Код:
function nu(ds: string): string;
begin
 Result:= Copy(ds, 1, pos(',', ds)-1);
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
 i, b5, b6: integer;
 sl, sv: TStrings;
begin
 sv:= TStringList.Create;
 sl:= TStringList.Create;

 for i := 0 to ListBox1.Items.Count-1 do
 if nu(ListBox1.Items.Strings[i]) = nu(ListBox1.Items.Strings[listbox1.ItemIndex]) then
    sv.Add(ListBox1.Items.Strings[i]);
 b5:= 0;
 b6:= 0;

 for i := 0 to sv.Count-1 do
  begin
   sl.Text:= StringReplace(sv.Strings[i],',',#10,[rfReplaceAll]);
   inc(b5, StrToInt(sl.Strings[4]));
   inc(b6, StrToInt(sl.Strings[5]));
 end;

 Label1.Caption:='Столбец 5: '+IntToStr(b5);
 Label2.Caption:='Столбец 6: '+ IntToStr(b6);

 sl.Free;
 sv.Free;
end;
Ответить с цитированием
  #3  
Старый 12.05.2013, 21:23
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
...
Alegun спасибо за ответ мне тут подсказали что вот так можно сделать^
Код:
q:=TStringList.Create;w:=TStringList.Create;e:=TStringList.Create;
with Memo.Lines do 
 for i:=0 to Count-1 do begin
  q.DelimitedText:=Strings[i];
  if q.count>5 then w.values[q[0]]:=IntToStr(StrToIntDef(w.values[q[0]],0)+q[4]);
  if q.count>6 then e.values[q[0]]:=IntToStr(StrToIntDef(e.values[q[0]],0)+q[5]);
 end;
Но что то не выходит можешь посмотреть где ошибка?
Ответить с цитированием
  #4  
Старый 12.05.2013, 21:30
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
...
Тот код который ты дал он работает но только получается на одного пользователя??? просто тот код который мне посоветовали то он каждого пользователя выводит цифры но цифры выводит не правильно(((
Ответить с цитированием
  #5  
Старый 12.05.2013, 21:34
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Тут обычный CSV парсер присобачить и все.
Обнаружение повторов тоже не проблема сделать.

Схема такая:
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 12.05.2013 в 21:36.
Ответить с цитированием
  #6  
Старый 12.05.2013, 21:35
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
...
Спасибо за совет а можно кодом?
Ответить с цитированием
  #7  
Старый 12.05.2013, 21:49
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от cezer
Спасибо за совет а можно кодом?
Студент? Какая кафедра/факультет?

Там есть примеры: http://ru.wikipedia.org/wiki/Автомат...ограммирование
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #8  
Старый 12.05.2013, 21:49
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Наверное так
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 q,w,e:TStrings;
 i: integer;
begin
 q:= TStringList.Create; 
 w:= TStringList.Create;
 e:= TStringList.Create;
with Memo1.Lines do
 for i:=0 to Count-1 do
  begin
   q.DelimitedText:= Strings[i];
   if q.count>5 then w.values[q[0]]:= IntToStr(StrToIntDef(w.values[q[0]],0)+ StrToInt(q[4]));
   if q.count>6 then e.values[q[0]]:= IntToStr(StrToIntDef(e.values[q[0]],0)+ StrToInt(q[5]));
  end;
 Label1.Caption:=w.Text;
 Label2.Caption:=e.Text;
 q.Free;
 w.Free;
 e.Free;
end;
Ответить с цитированием
  #9  
Старый 12.05.2013, 21:53
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Наверное так...
Вау браво спасибо а как можно это все привести в нормальный вид чтоб он в grid выводил каждого пользователя по строчно но не повторяя имён
Ответить с цитированием
  #10  
Старый 12.05.2013, 21:59
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Написать самому.
Это чето вообще хардкорный пример.

Ссылку я дал, ничего сложного. Если сильные приступы лени или включен режим "по щучьему веленью" - я удаляюсь.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #11  
Старый 12.05.2013, 22:01
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Прочитайте вот это, пункт 2.3
Ответить с цитированием
  #12  
Старый 12.05.2013, 22:03
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
...
Прости M.A.D.M.A.N. Нет не студент пытаюсь написать программу для Логов которая будет из логов вытаскивать пользователей и вносить в DBgrid без повторений и плюс сложения столбцов. С начало когда возникла мысль показалось легко но когда столкнулся не осилил(((
Ответить с цитированием
  #13  
Старый 12.05.2013, 22:05
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Прочитайте вот это, пункт 2.3
Прочел спасибо) Пошёл создавать новую тему))
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:48.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter