Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2013, 17:59   #1
cezer
Пользователь
 
Регистрация: 01.06.2012
Сообщений: 22
По умолчанию Сравнение строк 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. Сколько строк за ранее не известно каждый раз прибавляются и имена могут чередоваться.

Как разбить строки нашёл, а как сделать так чтоб он по строчно разбивал складывал и тд и тп ума не приложу.
cezer вне форума Ответить с цитированием
Старый 12.05.2013, 18:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я думаю нужно задействовать ODBC провайдер для текстовых файлов типа CSV.
Тогда группировку можно будет провести SQL запросом.
Я бы так и сделал.
Впрочем можно и так:
Код:
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;
Теперь в списках w и е данные просуммированы по логинам.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2013, 19:58   #3
cezer
Пользователь
 
Регистрация: 01.06.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
...
Спасибо за ответ. Но
в memo очень много пользователей и они повторяются и чередуются нужно для каждого пользователя вывести общее число сложив 5 и 6 столбец...
упрощённый вариант

User, 1, 2
User, 1, 5
Admin, 1, 8
Vasya, 6, 9
Admin, 9, 5
Vasya, 10, 5

итог:
User | 2 | 7
Admin | 10 | 13
Vasya | 16 | 14
cezer вне форума Ответить с цитированием
Старый 12.05.2013, 21:42   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
cezer
Мой пример разве это не делает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2013, 21:50   #5
cezer
Пользователь
 
Регистрация: 01.06.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Мой пример разве это не делает?
Ооо Стилет слава богам я думал уже не откликнешься)) Первое он выдал ошибку в последних двух строкач но я переделал поставил скобки по другому но он не правильно считает(((
cezer вне форума Ответить с цитированием
Старый 12.05.2013, 22:13   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Поправив на
Код:
    if q.count>5 then w.values[q[0]]:=IntToStr(StrToIntDef(w.values[q[0]],0)+StrToIntDef(q[4],0));
    if q.count>6 then e.values[q[0]]:=IntToStr(StrToIntDef(e.values[q[0]],0)+StrToIntDef(q[5],0));
Проверил свой пример на твоем тексте - все считает верно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2013, 22:16   #7
cezer
Пользователь
 
Регистрация: 01.06.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
....
Работает Стилето. Спасибо а ка так получается что при нажатии если в memo2 пользователя он сам создаёт label и вписывает значение? И такой вопрос как можно в DBgrid перевести чтоб получилось что то типо того:
User1 | цифры( w.Text | цифры( e.Text
Admin | цифры( w.Text | цифры( e.Text
Root | цифры( w.Text | цифры( e.Text

и так далее по пользователям чтоб они не повторялись?
cezer вне форума Ответить с цитированием
Старый 12.05.2013, 23:18   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а ка так получается что при нажатии если в memo2 пользователя он сам создаёт label и вписывает значение?
Не ниче набора из понял этого слов
Цитата:
как можно в DBgrid перевести
Я не зря выше говорил про ODBC. Почитай о том, как подключиться к текстовому (csv или plan text) файлу как к базе данных.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi.Чтение файла в Memo, вычисление, добавление строк в Memo antonio_sk Помощь студентам 0 26.04.2013 18:01
сравнение строк и исключение повторов в пределах 4 строк Dariloff Microsoft Office Excel 2 20.01.2013 23:33
Сложение строк loktor Помощь студентам 0 10.12.2011 21:23
сложение строк zhenya.ya Помощь студентам 2 07.03.2011 13:39
Сложение строк. Дырдин Общие вопросы C/C++ 16 12.11.2009 19:30