Здравствуйте. Есть текст(StrPage) и там с помощью регулярок ищу мыльники. Ищу и пытаюсь их добавить в мемо, но сначало проверяя на дубликаты. Делаю это вот так: Code: if Reg2.Exec(StrPage) then //strPage содержится html код страницы, reg2.exec проверяет его на наличие мыл begin repeat for i:=0 to memo1.Lines.Count-1 do if reg2.Match[0]<>Memo1.Lines[i] then //в reg2.Match[0] содержится мыло и если его нет в memo1 Memo1.Lines.Add(reg2.Match[0]) //то собсвтенно и добавляем это мыло в мемо1 until not Reg2.ExecNext; //переходим к следущему мылу в strPage end; но вместо того что Я ожидаю бесконечное добавление одних и тех же мыльников. Пытался делать и так Code: X := Reg2.Exec(StrPage); while X do begin for i:=0 to memo1.Lines.Count-1 do if reg2.Match[0]<>Memo1.Lines[i] then Memo1.Lines.Add(reg2.Match[0]); X := Reg2.ExecNext; end; но теперь уже просто пустота Почему? Помогите пожалуйста!
он у тебя в первом коде проверяет ни равно ли мыло текушей позиции в мемо, если не равно добавляет его... и так дальше...
Code: if Reg2.Exec(StrPage) then begin repeat for i:=0 to memo1.Lines.Count-1 do begin if reg2.Match[0]<>Memo1.Lines[i] then begin Memo1.Lines.Add(reg2.Match[0]) ; break; end end; until not Reg2.ExecNext; end; теперь уже снова пустота
ну как то так... Code: if Reg2.Exec(StrPage) then begin k:=0; repeat for i:=0 to memo1.Lines.Count-1 do if reg2.Match[0]<>Memo1.Lines[i] then inc(k); if k=memo1.Lines.Count-1 then Memo1.Lines.Add(reg2.Match[0]) until not Reg2.ExecNext; end;
ну да, потому что если у Меня цикл как в первом посте то мыльники добавляюся только что попробовал чтото теперь та регулярка не добавляет ничего, вот регулярка Reg2.Expression:= '[\w\d\-\.]+@[\w\d\-]+\.ru' которая выдирает мыльники
все фуух проблему решил кажется наконец вот таким способом: Code: procedure dubl; var SL : TStringList; i, i2 : integer; flag : Boolean; begin SL := TStringList.Create; SL.AddStrings(form1.Memo1.Lines); for i := form1.Memo1.Lines.Count - 1 downto 0 do begin flag := False; for i2 := SL.Count - 1 downto 0 do begin if form1.Memo1.Lines[i] = SL.Strings[i2] then if flag then SL.Delete(i2) else flag := True; end; end; form1.Memo1.Clear; form1.Memo1.Lines.AddStrings(SL); SL.Free; end; function bbo(s:string):boolean; var i:integer; flag:boolean; begin flag:=true; for i:=0 to form1.memo1.Lines.Count do begin if s=form1.Memo1.Lines[i] then begin flag:=false; end; if flag then begin form1.Memo1.Lines.Add(s) ; break; end; end; end; и использую эти процедуры и функции вот так: Code: if Reg2.Exec(StrPage) then begin repeat begin bbo(reg2.Match[0]); dubl; application.ProcessMessages; end; until not Reg2.ExecNext; end; ничего оригинальней не придумал, просто при каждом добавлении нового мыла содержимое мемо переносится в тстринГлист и уже оттуда свойством dublicate удаляются дубликаты ну и заново заносятся в мемо. Если у кого есть другие идеи, то пишите пожалуйста