Pascal: karakteres olvasással szeretném HTML fájlból kinyerni az összes linket. Miként lehet a legegyszerűbben ezt megvalósítani?
Miként lehetne legegyszerűbben HTML fájlokból hivatkozásokat kiolvasni Free Pascal segítségével?
Találtam egy projektet, ami tud ilyet is sokminden más mellett, de az elég komplikált volt nekem, valamint nekem csak hivatkozások kiolvasására lenne szükségem.
Szeretném, ha akkor is működne, ha <A href, <A HREF formában van megadva a fájlban a hivatkozás.
Nem tudom, szabályos -e, hogy a halmaznevet nagybetűvel írtam, bár semmir nem mentem vele, mert a "not in" utasítást sehol nem volt hajlandó elfogadni a Pascal.
Nem AnsiString és ehhez hasonlókkal szeretném megoldani a beolvasást, hanem így, karakterenként.
Miként oldható az meg, hogy ki is lépjen szabályosan, ha az olvasás a fájl végére ért/nem várható több adott karakter és így a feltétel soha nem teljesülhet?
Elegánsabb, frappánsabb megoldása is van ennek annál, hogy pl. folyamatosan pakolnám a stringbe a karaktereket, és meghívnám a pos függvényt a konstansként definiált stringgel, majd ha >0 akor kilép?
program link_kiir;
{$MODE OBJFPC} {$H+}
const
link_eleje : string = ('<a href=' );
link_hatarolok: set of char=(['"',chr(39)]);
CRLf:set of char = ([#10,#13]);
var
f : file of char;
ch : char;
link, link_belseje : string;
karakter : byte;
begin
Assign (f, ParamStr (1) );
Reset (f);
repeat
link := '';
karakter := 1;
repeat
Read (f, ch);
if (ch <> '"') and (ch <> Chr (39)) then begin
if (ch = link_eleje[karakter]) then
begin
link := link+ch;
inc(karakter);
end
else
if (ch <> link_eleje [karakter]) and (karakter > 1) then dec(karakter)
end;
until (karakter = Length ( link_eleje ) );
WriteLn(link);
link_belseje := '';
while (ch <> '"') and (ch <> Chr (39)) do
begin
Read(f, ch);
if (ch <> '"') and (ch <> Chr (39)) then
link_belseje := link_belseje+ch;
end;
WriteLn(link_belseje);}
until Eof (f);
Close(f);
end.
A karakterenkénti olvasásnál kifinomultabb megoldás: reguláris kifejezések.
Annál is kifinomultabb megoldás: HTML parszer könyvtár használata, ahol akár CSS szelektor alapján kiválaszthatsz elemeket. Nem tudom Pascal-hoz milyenek vannak (Google megmondja helyettem), de Java-hoz ott van a Jsoup, Ruby-hoz a Nokogiri.
Valami Internet Tools van Lazarus alá, de szerintem nagy, komplikált és bonyolult, valamint a letöltési linket meg se találtam, csak a Wiki-t.
Kezdetnek: if not (valami in halmaz) then...
Ha estig nem jön össze segítek :)
Köszönöm, megpróbálom.
Sikeresen benthagytam egy } jelet a bemásolt kódban véletlenül a link_belseje kiírás után, így nem fordul le :S
> az a helyzet, hogy más programozási nyelvet nem ismerek, egyet se. :(
Python-nal egy nap alatt eljutnál idáig. :)
Köszönöm, így már sikerült a halmazokat felhasználni.
A megvalósítás sajnos nem megy, nagyon hálás lennék a segítségért, hogy mi a rossz, mit kellene másképpen.
program link_kiir;
{$MODE OBJFPC} {$H+}
const
Link_eleje : string = ('<a href=' );
link_hatarolok: set of char=([ '"', Chr(39) ]);
CRLf:set of char = ([#10,#13]);
var
f : file of char;
ch : char;
link, link_belseje : string;
karakter : byte;
begin
Assign (f, ParamStr (1) );
Reset (f);
repeat
link := '';
link_belseje := '';
karakter := 1;
repeat
Read (f, ch);
if not (ch in CrLf) then begin
if (ch = link_eleje[karakter]) then
begin
link := link+ch;
inc(karakter);
end
else
if (ch <> link_eleje [karakter]) and (karakter > 1) then dec(karakter)
end;
until (karakter = Length ( link_eleje ) ) or ( Eof (f) );
link_belseje := '';
while not (ch in Link_hatarolok) and (not eof (f) ) do
begin
Read(f, ch);
if not (ch in CrLf) then
link_belseje := link_belseje+ch;
end;
WriteLn(link + link_belseje);
until Eof (f);
Close(f);
end.
És akkor most teljes indukcióval megállapítjuk, hogy egyik programozási nyelv sem csodanyelv. Köszönjük.
Tehát mi is a baj azzal, hogy
(1) próbálom kinyitni a kérdező szemét, hogy az NEM KORLÁT, hogy csak egy nyelvet ismer, nyugodtan megtanulhat egy másikat?
(2) a Python nyelvet ajánlom, ami identálásra tanít, ugyanakkor tizedannyi gépeléssel és erőfeszítéssel sokkal flexibilisebben tudná megoldani a feladatot?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!