Mam dorbny problemik...
Na laborke mam napisac programik, ktory ma wywalic z danego pliku wszystkie znaczniki htmla....
(zakladajac ze znacznik miesci sie miedzy < a >)...
Musze sie jeszcze tylko dowiedziec, ale to i tak juz wielkich zmian w programie nie bedzie wymagalo czy nie lepiej gdyby znacznik traktowac jako to miedzy '<' a '/>'...
No ale mam dorbny problem...
Pisalem juz kilkanascie wersji tego programu ale ciagle pojawial sie jakis problem...
Slowny opis algorytmu (narazie zakladajac brak 'zlosliwcow' w stylu tekstu z < czy>):
Program wyszukuje w tekscie znaku < potem > i to co miedzy nimi to znacznik do wywalenia - czyli np. moge to napisac:
...
dlugosc:=length(tekst);
for a:=1 to dlugosc do
begin
znak:=copy(tekst,a,1);
if znak= '<' then
for b:=a to dlugosc do
begin
znak2:=copy(tekst,b,1);
if znak2='>' then
begin
dlugosc:=b-1+1; {dlugosc znacznika}
delete(tekst,a,dlugosc); {wywalanie znacznika}
end;
end;
end;
end;
...
no dobra tylko ze jak widac program nie bedzie dzialal tak jak trzeba ;(
choc popprzednia wersja najbardziej mi sie podoba postanowilem jednak sprobowac inaczej....
Ponizej zamieszczam inna wersje programu:
uses crt;
var
plik1:text;
sciezka1:string;
tekst:string;
dlugosc:integer;
a,b:integer;
znak1,znak2:string;
znacznik:string;
BEGIN
clrscr;
write('Prosze podac sciezke: ');
readln(sciezka1);
assign(plik1,sciezka1);
reset(plik1);
read(plik1,tekst);
a:=0;
b:=0;
repeat
a:=a+1;
znak1:=copy(tekst,a,1);
until znak1='<';
writeln('a: ',a);
repeat
b:=b+1;
znak2:=copy(tekst,b,1);
until znak2='>';
writeln('b: ',b);
dlugosc:=b-a+1;
writeln('dlugosc wycinanego znacznika: ',dlugosc);
znacznik:=copy(tekst,a,dlugosc);
writeln('wycinany znacznik: ',znacznik);
delete(tekst,a,dlugosc);
writeln('pozostaly tekst: ',tekst);
close(plik1);
readln
END.
PROGRAM NIE DZIALA NARAZIE TAK JAK POWINIEN BO JEST W TRAKCIE PISANIA WIEC ZAPISANIE TEGO ZOSTAWIAM N DOPIERO NA KONIEC GDY JUZ BEDZIE DZIALAL POPRAWNIE...
Jak mozna sprawdzic program dziala... ale tylko dla jednego znacznika... wiec zastanawiam sie jakby to zapetlic by bylo ok...
Juz sam nie wiem co zrobic wiec prosze o pomoc!
Program narazie jestpisany w TP ale w ostatecznej wersji ma byc to aplikacja konsolowa delphi - z przeksztalceniem nie bedzie raczej problemow.
Czy ma ktos moze jakies propozycje??
Chodzi tylko o jakas podpowiedz...
Gdzie popelniam blad.. moze w rozumowaniu??
Za wszelkie podpowiedzi z gory dziekuje
Na laborke mam napisac programik, ktory ma wywalic z danego pliku wszystkie znaczniki htmla....
(zakladajac ze znacznik miesci sie miedzy < a >)...
Musze sie jeszcze tylko dowiedziec, ale to i tak juz wielkich zmian w programie nie bedzie wymagalo czy nie lepiej gdyby znacznik traktowac jako to miedzy '<' a '/>'...
No ale mam dorbny problem...
Pisalem juz kilkanascie wersji tego programu ale ciagle pojawial sie jakis problem...
Slowny opis algorytmu (narazie zakladajac brak 'zlosliwcow' w stylu tekstu z < czy>):
Program wyszukuje w tekscie znaku < potem > i to co miedzy nimi to znacznik do wywalenia - czyli np. moge to napisac:
...
dlugosc:=length(tekst);
for a:=1 to dlugosc do
begin
znak:=copy(tekst,a,1);
if znak= '<' then
for b:=a to dlugosc do
begin
znak2:=copy(tekst,b,1);
if znak2='>' then
begin
dlugosc:=b-1+1; {dlugosc znacznika}
delete(tekst,a,dlugosc); {wywalanie znacznika}
end;
end;
end;
end;
...
no dobra tylko ze jak widac program nie bedzie dzialal tak jak trzeba ;(
choc popprzednia wersja najbardziej mi sie podoba postanowilem jednak sprobowac inaczej....
Ponizej zamieszczam inna wersje programu:
uses crt;
var
plik1:text;
sciezka1:string;
tekst:string;
dlugosc:integer;
a,b:integer;
znak1,znak2:string;
znacznik:string;
BEGIN
clrscr;
write('Prosze podac sciezke: ');
readln(sciezka1);
assign(plik1,sciezka1);
reset(plik1);
read(plik1,tekst);
a:=0;
b:=0;
repeat
a:=a+1;
znak1:=copy(tekst,a,1);
until znak1='<';
writeln('a: ',a);
repeat
b:=b+1;
znak2:=copy(tekst,b,1);
until znak2='>';
writeln('b: ',b);
dlugosc:=b-a+1;
writeln('dlugosc wycinanego znacznika: ',dlugosc);
znacznik:=copy(tekst,a,dlugosc);
writeln('wycinany znacznik: ',znacznik);
delete(tekst,a,dlugosc);
writeln('pozostaly tekst: ',tekst);
close(plik1);
readln
END.
PROGRAM NIE DZIALA NARAZIE TAK JAK POWINIEN BO JEST W TRAKCIE PISANIA WIEC ZAPISANIE TEGO ZOSTAWIAM N DOPIERO NA KONIEC GDY JUZ BEDZIE DZIALAL POPRAWNIE...
Jak mozna sprawdzic program dziala... ale tylko dla jednego znacznika... wiec zastanawiam sie jakby to zapetlic by bylo ok...
Juz sam nie wiem co zrobic wiec prosze o pomoc!
Program narazie jestpisany w TP ale w ostatecznej wersji ma byc to aplikacja konsolowa delphi - z przeksztalceniem nie bedzie raczej problemow.
Czy ma ktos moze jakies propozycje??
Chodzi tylko o jakas podpowiedz...
Gdzie popelniam blad.. moze w rozumowaniu??
Za wszelkie podpowiedzi z gory dziekuje