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