wyszukiwanie$usuwanie linii tekstu w memo...

0

Mam taki tekst:

<meta robots="follow"> <meta keywords="ggg ggg ggg"> <title>X-X</title>

jak odnaleźć linie kodu w której jest META oraz ją usunąć. oczywiście usunąć wszystki linie, które zawierają META :)

0
Function str_replace(const szukaj, zamienNa : String; tekst: String; var liczbaPowtorzen : integer) : String;
// szukaj - szukana fraza
// zamienNa - czym szukana fraza ma byc zast±piona
// tekst - tekst, w którym się szuka frazy
// liczbaPowtorzen - jak wiele razy znaleziono frazę (jak nie interesuje cię to ustaw nil)
var
   pozycja, pozycja2, LengthSzukaj: integer;
begin
   liczbaPowtorzen:=0;
   LengthSzukaj := Length(szukaj);
   pozycja := -1;
   pozycja2 := pos(szukaj, tekst);
   while pozycja2 <> 0 do
   begin
      if pozycja2 = pozycja then
         break;
      pozycja := pos(szukaj, tekst);
      delete(tekst, pozycja, LengthSzukaj);
      insert(zamienNa, tekst, pozycja);
      pozycja2 := pos(szukaj, tekst);
      Inc(liczbaPowtorzen);
   end;
   result := tekst;
end;

procedure costam;
var
   lp, i : integer;

begin
   for i:=0 to memo.lines.count do
   begin
      str_replace('<meta', '', memo.lines[i], lp);
      if lp=0 then
        memo.lines[i] := #9; //z tego co pamiętam to chr(9) to backspace
      end;
end;

Funkcja powinna działać jak trzeba, za to costam pisałem z głowy i na pewno się gdzieś pomyliłem :P

0

Ja bym to napisał tak:

procedure usunmeta(memo:Tmemo);
var i:integer;
temp:tstringlist;
kopia:string;
begin
temp:=tstringlist.Create;
if memo.Lines.Count-1>0 then
  begin;
    for i:=0 to memo.Lines.Count-1 do begin;temp.Append(memo.Lines[i]);end;
    i:=0;
    repeat
        kopia:=memo.Lines[i];
        kopia:=copy(kopia,pos('meta',kopia),4);
        if kopia='meta' then temp[i]:='';
        inc(i);
    until i=temp.Count-1;
    memo.Clear;
    for i:=0 to temp.Count-1 do
      begin;
        if temp[i]<>'' then memo.Lines.Add(temp[i]);
      end;
  end;
end;

A wywołanie poprzez np

usunmeta(form1.memo1);
0

a ja to napisze tak:

var i: integer;
begin
    for i := txt.Lines.Count - 1 downto 0 do
        if Pos('<meta', AnsiLowerCase(txt.Lines.Strings[i])) > 0 then
            txt.Lines.Delete(i);
end;

:|

0
Adamo napisał(a)

a ja to napisze tak:

var i: integer;
begin
    for i := txt.Lines.Count - 1 downto 0 do
        if Pos('<meta', AnsiLowerCase(txt.Lines.Strings[i])) > 0 then
            txt.Lines.Delete(i);
end;

:|

a można by odwrócić ten kod tak aby nie usuwał tego 1 elementu a resztę usuwał?
Próbuje ciągle wstawić coś za to lines.delete i nic mi nie działa :D

0

Chodzi Tobie o to żeby linia o indeksie zero została w Memo to popraw pętlę aby wykonywała się tylko do 2
elementu (czyli o indeksie 1) - downto 1, takie podstawy, ręce opadają jak widać jak pewni nie myślą tutaj.

0

A ja jak zrobić tak, żeby zaznaczało tą wyszukaną, frazę?

miałem taki pomysł. Stawiłbym na formie TButton, i po jego wciśnięciu do TListBox'a są wczytywane Liczby 1 - X, czyli ile Tych fraz w Memo jest.
Jeżeli jedna to:
1

Jezeli dwie to:
1
2
itd.
Potem znów ten button, i wtedy zaznacza tą frazę

0

Może ten kod Tobie się przyda i coś wyjaśni. Wyszukuje on podany w RichEdit tekst i
ewentualnie go zamienia na inny. Jest też użyty przycisk koloruj, ktory pokoloruje na
czerwono wszystkie wystąpienia wyrazu podanego w polu edycyjnym, bo jeśli chcesz
mieć zaznaczone tak jak przy wyszukaniu wszystkie wystąpienia wyrazu to nie wiem
czy w Windows jest taka możliwość. Lepiej pokolorować wyszukane wyrazy, jednym
kolorem bez względu na wielkość liter. Ah i koncze ten post, bo znowu się za dużo
rozpisałem, a miałem krótko. Ach, ta presja otoczenia :P Trzeba się ciągle pilnować,
bo ludzie marudzą: http://www.speedyshare.com/files/24498577/replacedialog.rar

1 użytkowników online, w tym zalogowanych: 0, gości: 1