Kezdőoldal » Számítástechnika » Programozás » Pascal: karakteres olvasással...

Pascal: karakteres olvasással szeretném HTML fájlból kinyerni az összes linket. Miként lehet a legegyszerűbben ezt megvalósítani?

Figyelt kérdés

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.



2015. okt. 12. 13:29
1 2
 11/20 SimkoL ***** válasza:
Az egy napon van a hangsúly.
2015. okt. 12. 16:00
Hasznos számodra ez a válasz?
 12/20 anonim ***** válasza:

Igaz, tényleg nem volt korrekt az 1 nap. Átjavítom 1 órára. Kényelmes telepítgetéssel ehhez nem kell több:


```python

from bs4 import BeautifulSoup

with open ("data.txt", "r") as myfile:

> html_doc=myfile.read().replace('\n', '')

soup = BeautifulSoup(html_doc, 'html.parser')

for link in soup.find_all('a'):

> print(link.get('href'))

```


Mondjuk az is igaz, hogy a linkek kinyerése az Internet Tools-al Pascal-ban sem kerül több sorba. Nem értem, a Kérdező miért nem azt használja, dehát mindegy...


Oldásként: ezt ragasszátok ki valahová! :D

[link]

2015. okt. 12. 16:11
Hasznos számodra ez a válasz?
 13/20 A kérdező kommentje:

Nem találtam meg a letöltési linket, csak a Wiki-t.

Lazarus telepítése nélkül is le tudom fordítani az Internettools-t?

2015. okt. 12. 16:42
 14/20 SimkoL ***** válasza:
#12: Ugye nem nagyon ismersz nagyon sok nyelvet és programozni sem tudsz 'magasabb' szinten' ? Egy valamire való programozó tiszteletben tartja a másik 'nyelvét', ha érdemben nem tud a témához szólni 'kussban' marad. Lásd Prog.hu. Ha a kérdezőnk a Pascalhoz ért abban illik megadni a választ.
2015. okt. 12. 17:42
Hasznos számodra ez a válasz?
 15/20 SimkoL ***** válasza:

Nem nagyon szeretem a Lazarust, ezért inkább Delphi alatt készülnek ezek a szösszenetek. 98%-ig az alapok kompatibilisek.


program Project2;


{$APPTYPE CONSOLE} //Delphi miatt


uses SysUtils, StrUtils //PosEx miatt;


var f: text;

s, s1: String;

pos1, pos2: integer;


begin

Assign(f, ParamStr(1));

Reset(f);

while not Eof(f) do

begin

ReadLn(f, s);

s1 := s1 + s;

end;

Close(f);

s1 := UpperCase(s1);

pos2 := 1;

while pos1 <> 0 do

begin

pos1 := PosEx('<A HREF="', s1, pos2);

if pos1 = 0 then Break;

pos2 := PosEx('">', s1, pos1);

WriteLn(Copy(s1, pos1 + 9, pos2 - pos1 - 9));

pos2 := pos1 + 9;

end;

ReadLn;

end.

2015. okt. 12. 20:47
Hasznos számodra ez a válasz?
 16/20 SimkoL ***** válasza:
...ja és a hibakezelést rád bízom :)
2015. okt. 12. 20:48
Hasznos számodra ez a válasz?
 17/20 SimkoL ***** válasza:
*uses SysUtils, StrUtils; //PosEx miatt
2015. okt. 12. 21:29
Hasznos számodra ez a válasz?
 18/20 anonim ***** válasza:

Minek ide 3 sor és 5 perc? Itt van 10 másodperc és 1 sor alatt ami weboldalról letölti a linkeket Wolfram nyelven.


Import[" [link] "Hyperlinks"]

2015. okt. 12. 21:33
Hasznos számodra ez a válasz?
 19/20 A kérdező kommentje:

Ha ezt nem string használatával hanem file of char és karakter olvasásával akartam volna megoldani, az is lehetséges lett volna?


Az olyan problémákat is megoldja ez a stringes megoldás, mint hogy pl. a link két sorba törik?

2015. okt. 13. 06:18
 20/20 SimkoL ***** válasza:

- Igen, csak akkor pár sorral több lett volna.

- Igen, mivel az egész file-t egy stringként kezeli. {$H+} legyen hozzáadva

2015. okt. 13. 07:09
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!