![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем добрый вечер. подскажите пожалуйста, есть 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
|
||||
|
||||
![]() Вместо мемо нужен листбокс
Код:
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
|
|||
|
|||
![]() Цитата:
Код:
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
|
|||
|
|||
![]() Цитата:
|
#5
|
||||
|
||||
![]() Тут обычный CSV парсер присобачить и все.
Обнаружение повторов тоже не проблема сделать. Схема такая: ![]() — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 12.05.2013 в 21:36. |
#6
|
|||
|
|||
![]() Цитата:
|
#7
|
||||
|
||||
![]() Цитата:
Там есть примеры: http://ru.wikipedia.org/wiki/Автомат...ограммирование — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#8
|
||||
|
||||
![]() Наверное так
Код:
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
|
|||
|
|||
![]() Цитата:
|
#10
|
||||
|
||||
![]() Написать самому.
Это чето вообще хардкорный пример. Ссылку я дал, ничего сложного. Если сильные приступы лени или включен режим "по щучьему веленью" - я удаляюсь. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#11
|
||||
|
||||
![]() Прочитайте вот это, пункт 2.3
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#12
|
|||
|
|||
![]() Цитата:
|