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 :)
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 :)
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
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);
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;
:|
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
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.
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ę
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